新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC16F91x系列單片機驅動1602液晶屏程序

        PIC16F91x系列單片機驅動1602液晶屏程序

        作者: 時間:2016-11-29 來源:網絡 收藏
        /******************************************************************************
        * 函 數 名: void Write_1602_data(uchar gdata)
        * 函數功能: 寫數據
        * 入口參數: gdata--數據
        * 返 回: 無
        *******************************************************************************/
        /*----------- 寫數據 -------------*/
        void Write_1602_data(uchar gdata)
        {
        if(Chk_1602_busy()) //寫數據必須是在LCD空閑模式下才能寫
        {
        LCD_RS=1; //選擇數據
        LCD_RW=0; //選擇寫
        PORTC=gdata;
        LCD_EN=1; //使能
        Delay_US(30);
        LCD_EN=0;
        Delay_US(10);
        }
        }
        /******************************************************************************
        * 函 數 名: void INIT_1602(void)
        * 函數功能: 初始化1602LCD
        * 入口參數: 無
        * 返 回: 無
        *******************************************************************************/
        /*-----------1602初始化函數-------------*/
        void INIT_1602(void)
        {
        Delay_Ms(15);
        Write_1602_command(0x38,0); //設置16X2顯示,5X7點陣,8位數據傳送,不檢測忙信號
        Delay_Ms(5);
        Write_1602_command(0x38,0);
        Delay_Ms(5);
        Write_1602_command(0x38,0); //設置16X2顯示,5X7點陣,8位數據傳送,不檢測忙信號
        Write_1602_command(0x38,1); //設置16X2顯示,5X7點陣,8位數據傳送,檢測忙信號
        Write_1602_command(0x08,1); //關閉顯示、無光標、檢測忙信號
        Write_1602_command(0x01,1); //清屏、光標歸位、AC=0、檢測忙信號
        Write_1602_command(0x06,1); //顯示光標右移位置、檢測忙信號
        Write_1602_command(0x0c,1); //顯示功能開、無光標
        }
        /******************************************************************************
        * 函 數 名: void Display_1602_string(uchar gadd_start,uchar gline,uchar glength,uchar *pdata)
        * 函數功能: 顯示字符串
        * 入口參數: gadd_start-列號,uchar gline-行號,glength-數據長度,pdata-數組元素
        * 返 回: 無
        *******************************************************************************/
        /*-----------顯示字符串-------------*/
        // 列號 行號 數據長度 數組元素
        void Display_1602_string(uchar gadd_start,uchar gline,uchar glength,uchar *pdata)
        {
        uchar gaddress;
        uchar *pdat;
        uchar gcount=0;
        if(!gline) //第0行
        { gaddress=0x80+gadd_start; } //地址對應
        else
        { gaddress=0xc0+gadd_start; } //第一行
        for(;gcount {
        Write_1602_command(gaddress,1); //設定數據地址
        Write_1602_data(*pdata); //取設定地址里的數據
        gaddress++;
        pdata++;
        }
        }
        /******************************************************************************
        * 函 數 名: void Display_1602(uchar x,uchar y,uchar gdata)
        * 函數功能: 指定位置顯示字符
        * 入口參數: x-起始地址橫坐標,y-起始地址縱坐標,gdata-要顯示的字符
        * 返 回: 無
        *******************************************************************************/
        /*-----------指定位置顯示字符-------------*/
        void DispChar_XY_1602(uchar x,uchar y,uchar gdata)
        {
        uchar gaddress;
        if(!y)
        { gaddress=0x80+x; }
        else
        { gaddress=0xc0+x; }
        Write_1602_command(gaddress,1); //設定數據地址
        Write_1602_data(gdata);
        }
        /*-----------指定位置顯示數字-------------*/
        void DispNum_XY_1602(uchar x,uchar y,uchar gdata)
        {
        uchar gaddress;
        if(!y)
        { gaddress=0x80+x; }
        else
        { gaddress=0xc0+x; }
        Write_1602_command(gaddress,1); //設定數據地址
        Write_1602_data(gdata+0x30);
        }
        /*-----------清屏-------------*/
        void Clear_Display(void)
        {
        Write_1602_command(0x01,1);
        Delay_Ms(5);
        }
        void Open_Disp(void)
        {
        Write_1602_command(0x0c,1);
        }
        void Close_Disp(void)
        {
        Write_1602_command(0x08,1);
        }
        /*-----------顯示光標-------------*/
        void Display_Cursor(void)
        {
        Write_1602_command(0x06,1); //顯示光標右移位置、檢測忙信號
        Write_1602_command(0x0D,1); //顯示功能開、無光標
        }
        /*-----------1602端口初始化-------------*/
        void Port_1602_Init(void)
        {
        PORTA=0x00;
        CMCON0=0xff;
        ANSEL = 0x00;
        TRISA=0X00;
        PORTC=0x00;
        TRISC=0x00;
        LCDCON=0x00;
        }
        Display.h如下:
        #ifndef __Display_H__
        #define __Display_H__
        #define uchar unsigned char
        #define uint unsigned int
        #define TESTBIT(a,b) ((a)&(1<<(b)))
        #define LCD_RS RA0
        #define LCD_RW RA1
        #define LCD_EN RA2
        /************************聲明函數*********************************************/
        uchar Chk_1602_busy(void);
        void Write_1602_command(uchar gcmd,uchar gvalue);
        void Write_1602_data(uchar gdata);
        void INIT_1602(void);
        void Display_1602_string(uchar gadd_start,uchar gline,uchar glength,uchar *pdata);
        void DispChar_XY_1602(uchar x,uchar y,uchar gdata);
        void DispNum_XY_1602(uchar x,uchar y,uchar gdata);
        void Clear_Display(void);
        void Open_Disp(void);
        void Close_Disp(void);
        void Display_Cursor(void);
        void Port_1602_Init(void);
        #endif
        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东港市| 九江县| 饶河县| 沽源县| 河南省| 大荔县| 英吉沙县| 闸北区| 冷水江市| 绥阳县| 石首市| 郸城县| 界首市| 囊谦县| 称多县| 蓝山县| 洮南市| 南丹县| 南京市| 泾阳县| 丰城市| 类乌齐县| 遂昌县| 龙山县| 宜君县| 乐亭县| 马鞍山市| 叙永县| 蒙自县| 黎平县| 扶绥县| 大竹县| 奉节县| 台江县| 宜宾市| 郁南县| 青冈县| 隆尧县| 保山市| 莱西市| 吐鲁番市|