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

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

        新唐M051驅動LCD1602液晶屏程序

        作者:佚名   來源:Keil4   點擊數:  更新時間:2014年09月01日   【字體:

        共享一個 新唐M051驅動LCd1602液晶屏顯示的程序:

         
        #include "LCD1602.h"
        /***************************************************
         *          大量宏定義,便于代碼移植和閱讀
         ***************************************************/
        #define LCD1602_LINE1        0
        #define LCD1602_LINE2        1
        #define LCD1602_LINE1_HEAD   0x80
        #define LCD1602_LINE2_HEAD   0xC0
        #define LCD1602_DATA_MODE    0x38
        #define LCD1602_OPEN_SCREEN  0x0C
        #define LCD1602_DISP_ADDRESS 0x80
        #define LCD1602_RS_PIN   0
        #define LCD1602_RW_PIN   1
        #define LCD1602_EN_PIN   2
        #define LCD1602_RS(x)      {if((x))P0_DOUT|=  1UL<<LCD1602_RS_PIN;else   P0_DOUT&=~(1UL<<LCD1602_RS_PIN);}//RS引腳控制
        #define LCD1602_RW(x)      {if((x))P0_DOUT|=  1UL<<LCD1602_RW_PIN;else   P0_DOUT&=~(1UL<<LCD1602_RW_PIN);}//RW引腳控制
        #define LCD1602_EN(x)      {if((x))P0_DOUT|=  1UL<<LCD1602_EN_PIN;else   P0_DOUT&=~(1UL<<LCD1602_EN_PIN);}//EN引腳控制
        #define LCD1602_PORT(x)     LS164Send((x))                       //發送數據
        /********************************************
        *函數名稱:LCD1602WriteByte
        *輸    入:ucByte 要寫入的字節
        *輸    出:無
        *說    明:LCD1602 寫字節
        ********************************************/
        VOID LCD1602WriteByte(UINT8 ucByte)
        {
             LCD1602_PORT(ucByte);
             LCD1602_RS(HIGH);
             LCD1602_RW(LOW);
             LCD1602_EN(LOW);
             Delayus(5000);
             LCD1602_EN(HIGH);
        }
        /********************************************
        *函數名稱:LCD1602WriteCommand
        *輸    入:ucCmd 要寫入的命令
        *輸    出:無
        *說    明:LCD1602 寫命令
        ********************************************/
        VOID LCD1602WriteCommand(UINT8 ucCmd)
        {
             LCD1602_PORT(ucCmd);
             LCD1602_RS(LOW);
             LCD1602_RW(LOW);
             LCD1602_EN(LOW);
             Delayus(5000);
             LCD1602_EN(HIGH);
        }
        /********************************************
        *函數名稱:LCD1602SetXY
        *輸    入:x 橫坐標 y 縱坐標
        *輸    出:無
        *說    明:LCD1602 設置坐標
        ********************************************/
        VOID LCD1602SetXY(UINT8 x,UINT8 y)
        {
          UINT8 address;
             if(y == LCD1602_LINE1)
             {
                address=LCD1602_LINE1_HEAD+x;
             }
             else
             {
                address=LCD1602_LINE2_HEAD+x;
             }
          LCD1602WriteCommand(address);
        }
        /********************************************
        *函數名稱:LCD1602PrintfString
        *輸    入:x 橫坐標 y 縱坐標 s字符串
        *輸    出:無
        *說    明:LCD1602 打印字符串
        ********************************************/
        VOID LCD1602PrintfString(UINT8 x,
                                 UINT8 y,
                                 UINT8 *s)
        {
          LCD1602SetXY(x,y);       //設置顯示坐標
         
             while(s && *s)
             {
                LCD1602WriteByte(*s);     //顯示逐個字符
                s++;
               
             }
        }
        /********************************************
        *函數名稱:LCD1602ClearScreen
        *輸    入:無
        *輸    出:無
        *說    明:LCD1602 清屏
        ********************************************/
        VOID LCD1602ClearScreen(VOID)
        {
          LCD1602WriteCommand(0x01);
             Delayus(5000);
        }
        /********************************************
        *函數名稱:LCD1602Init
        *輸    入:無
        *輸    出:無
        *說    明:LCD1602 初始化
        ********************************************/
        VOID LCD1602Init(VOID)
        {
             P0_PMD &= ~(3UL<<(LCD1602_RS_PIN<<1));
             P0_PMD &= ~(3UL<<(LCD1602_RW_PIN <<1));
             P0_PMD &= ~(3UL<<(LCD1602_EN_PIN <<1));
          P0_PMD |= 1UL<<(LCD1602_RS_PIN<<1);
          P0_PMD |= 1UL<<(LCD1602_RW_PIN <<1);
          P0_PMD |= 1UL<<(LCD1602_EN_PIN <<1);
          LCD1602ClearScreen();
             LCD1602WriteCommand(LCD1602_DATA_MODE);   //顯示模式設置,設置16x2顯示,5x7點陣,
                                                       //8位數據接口
             LCD1602WriteCommand(LCD1602_OPEN_SCREEN); //開顯示
             LCD1602WriteCommand(LCD1602_DISP_ADDRESS);//起始顯示地址   
             LCD1602ClearScreen();
        }
        /****************************************
        *函數名稱:main
        *輸    入:無
        *輸    出:無
        *功    能:函數主體
        ******************************************/
        INT32 main(VOID)
        {
        //     Un_Lock_Reg();        //ISP下載時保護FLASH存儲器
         PROTECT_REG
         (
           PWRCON |= XTL12M_EN;      //默認時鐘源為外部晶振
           while((CLKSTATUS & XTL12M_STB) == 0);   //等待12MHz時鐘穩定  
           CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //設置外部晶振為系統時鐘
           LS164Init();           //74LS164初始化
           LCD1602Init();           //LCD1602初始化
          )
             LCD1602PrintfString(0,LCD1602_LINE1,"Hello World!");  //打印第一行
          LCD1602PrintfString(0,LCD1602_LINE2,"I Love You!");  //打印第二行
         
          while(1);
        }
         
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮