<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        LCD1602.H(51單片機LCD1602顯示驅動程序)

        作者:串亖の六花   來源:本站原創   點擊數:  更新時間:2014年04月28日   【字體:

         

         
         
        /*無敵高氯酸修改
         
          函數功能
          delay_ms(time)  延時time毫秒
          LCD_init()      初始化清空LCD屏
          LCD_print(x,y,str)在(x,y)坐標上顯示str字符       0=<x=<15     y=0或者1
        */
        /*定義端口*********************************************************/
        #define Port P2 //數據端口
        sbit Rs = P0^7;     /*LCD 第四腳*/
        sbit Rw = P0^6;     /*LCD 第五腳*/
        sbit En = P0^5;  /*LCD 第六腳*/
         
        /*定義類型*/
        #define uchar unsigned char
        #define uint unsigned int
           
        /*定義LCD控制字*****************************************************/
        //清屏及光標歸位
        #define LCD_CLEAR 0x01 // 清屏
        #define LCD_HOMING 0x02 // 光標返回左上角
        //顯示開關控制指令
        #define LCD_SCREEN_ON 0x0C //顯示開
        #define LCD_SCREEN_OFF 0x08 //顯示關
        #define LCD_CURSOR_ON 0x0A //顯示光標
        #define LCD_CURSOR_OFF 0x08 //無光標
        #define LCD_C_FLASH_ON 0x09 //光標閃動
        #define LCD_C_FLASH_OFF 0x08 //光標不閃動
        //進入模式設置指令
        #define LCD_AC_UP 0x06 //新數據后光標右移
        #define LCD_AC_DOWN 0x04 //新數據后光標左移
        #define LCD_S_MOVE_ON 0x05 // 畫面可平移
        #define LCD_S_MOVE_OFF 0x04 //畫面不可平移
        //設定顯示屏或光標移動方向指令
        #define LCD_C_LEFT 0x10 //光標左移1格,且AC值減1
        #define LCD_C_RIGHT 0x11 //光標右移1格,且AC值加1
        #define LCD_CHAR_LEFT 0x18 //顯示器上字符全部左移一格,但光標不動
        #define LCD_CHAR_RIGHT 0x1C //顯示器上字符全部右移一格,但光標不動
        uchar code number[10]={"0123456789"};
        /*所有函數聲明*********************************************************/
        void LCD_init(void);
        void LCD_wdata(uchar wdata);
        void LCD_wcommand(uchar lcd_cmd,busy_f);
        void LCD_gotoxy(uchar x,uchar y);
        void LCD_print(uchar x,uchar y,uchar *str);
        uchar Rstatus(void);
        uchar LCD_rdata(void);
        void delay_ms(unsigned int n)  {
            unsigned int i=0,j=0;
            for (i=n;i>0;i--)
             for (j=0;j<1140;j++); 
        }
          /*********************************************************************
        函數名稱:LCD_print()
        功能描述:顯示字符或字符串
        入口參數:字符或字符串
        返回值:無
        **********************************************************************/
        void LCD_print(uchar x,uchar y,uchar *str)
        {
        LCD_gotoxy(x,y);
        while(*str!='\0')
        {
        LCD_wdata(*str);
        str++;
        }
        }
         
        /*
        ********************************************************************
        函數名稱:LCD_wcommand()
        功能描述:LCD寫指令
        入口參數:uchar lcd_cmd:命令字,uchar busy_f:忙檢測標志位
        返回值:無
        ********************************************************************
        */
        void LCD_wcommand(uchar lcd_cmd,busy_f)
        {
        if (busy_f) Rstatus(); //不忙才執行下個程序
        Port = lcd_cmd;
        Rs = 0;
        Rw = 0;
        En = 0;
        En = 0;
        En = 1;
        }
        /*********************************************************************
        函數名稱:LCD_wdata()
        功能描述:LCD寫數據
        入口參數:uchar wdata:所寫數據
        返回值:無
        *********************************************************************/
        void LCD_wdata(uchar wdata)
        {
        Rstatus();
        Port = wdata;
        Rs = 1;
        Rw = 0;
        En = 0; //若晶振速度太高可以在這后加小的延時
        En = 0; //延時
        En = 1;
        }
        /*********************************************************************
        函數名稱:LCD_rdata()
        功能描述:LCD讀數據
        入口參數:無
        返回值:所讀數據
        *********************************************************************/
        uchar LCD_rdata(void)
        {
        Rs = 1;
        Rw = 1;
        En = 0;
        En = 0;
        En = 1;
        return Port;
        }
        /*********************************************************************
        函數名稱:Rstatus()
        功能描述:LCD讀忙狀態
        入口參數:無
        返回值:若忙,則等待,不忙則返回Port
        *********************************************************************/
        uchar Rstatus(void)
        {
        Port = 0xFF;
        Rs = 0;
        Rw = 1;
        En = 0;
        En = 0;
        En = 1;
        while (Port & 0x80); //檢測忙信號,不忙則退出等待
        return(Port);
        }
        /*********************************************************************
        函數名稱:LCD_init()
        功能描述:LCD初始化
        入口參數:無
        返回值:無
        *********************************************************************/
        void LCD_init(void)
        {
        Port = 0;
        LCD_wcommand(0x38,0); //三次顯示模式設置,不檢測忙信號
        delay_ms(3);
        LCD_wcommand(0x38,0);
        delay_ms(3);
        LCD_wcommand(0x38,0);
        delay_ms(3);
        LCD_wcommand(0x38,1); //顯示模式設置(0X38雙行(5*7),0X34單行(5*10)),0X30單行(5*7);開始要求每次檢測忙信號
        LCD_wcommand(0x08,1); //關閉顯示
        LCD_wcommand(0x01,1); //顯示清屏
        LCD_wcommand(0x06,1); // 顯示光標移動設置
        LCD_wcommand(0x0C,1); // 顯示開及光標設置
        }
         
        /*********************************************************************
        函數名稱:LCD_gotoxy()
        功能描述:定位到(x,y)位置
        入口參數:x為行(0~1),y為列(0~15)
        返回值:無
        *********************************************************************/
        void LCD_gotoxy(uchar x, uchar y)
        {
        x &= 0x1; //限制x不能大于1,y不能大于15
        y &= 0xF;
        if(!x) LCD_wcommand(0x80|y,1);
        else LCD_wcommand(0xC0|y,1);
        }
         
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮