久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2319|回復: 0
打印 上一主題 下一主題
收起左側

單片機實例:用LCD循環右移顯示Welcome to China

[復制鏈接]
跳轉到指定樓層
樓主
ID:704160 發表于 2020-4-24 14:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 huangbowen 于 2020-4-26 15:31 編輯

用51單片機實現LCD1602的字符顯示:
  1. //實例:用LCD循環右移顯示"Welcome to China"
  2. #include<reg51.h>    //包含單片機寄存器的頭文件
  3. #include<intrins.h>  //包含_nop_()函數定義的頭文件
  4. sbit RS=P2^0;    //寄存器選擇位,將RS位定義為P2.0引腳
  5. sbit RW=P2^1;    //讀寫選擇位,將RW位定義為P2.1引腳
  6. sbit E=P2^2;     //使能信號位,將E位定義為P2.2引腳
  7. sbit BF=P0^7;    //忙碌標志位,,將BF位定義為P0.7引腳
  8. unsigned char code string[ ]={"Welcome to China"};
  9. /*****************************************************
  10. 函數功能:延時1ms
  11. (3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒
  12. ***************************************************/
  13. void delay1ms()
  14. {
  15.    unsigned char i,j;
  16.   for(i=0;i<10;i++)
  17.    for(j=0;j<33;j++)
  18.     ;   
  19. }
  20. /*****************************************************
  21. 函數功能:延時若干毫秒
  22. 入口參數:n
  23. ***************************************************/
  24. void delay(unsigned char n)
  25. {
  26.    unsigned char i;
  27. for(i=0;i<n;i++)
  28.     delay1ms();
  29. }
  30. /*****************************************************
  31. 函數功能:判斷液晶模塊的忙碌狀態
  32. 返回值:result。result=1,忙碌;result=0,不忙
  33. ***************************************************/
  34. unsigned char BusyTest(void)
  35.   {
  36.     bit result;
  37. RS=0;       //根據規定,RS為低電平,RW為高電平時,可以讀狀態
  38.     RW=1;
  39.     E=1;        //E=1,才允許讀寫
  40.     _nop_();   //空操作
  41.     _nop_();
  42.     _nop_();
  43.     _nop_();   //空操作四個機器周期,給硬件反應時間
  44.     result=BF;  //將忙碌標志電平賦給result
  45. E=0;
  46.     return result;
  47.   }
  48. /*****************************************************
  49. 函數功能:將模式設置指令或顯示地址寫入液晶模塊
  50. 入口參數:dictate
  51. ***************************************************/
  52. void WriteInstruction (unsigned char dictate)
  53. {   
  54.     while(BusyTest()==1); //如果忙就等待
  55.   RS=0;                  //根據規定,RS和R/W同時為低電平時,可以寫入指令
  56.   RW=0;   
  57.   E=0;                   //E置低電平(根據表8-6,寫指令時,E為高脈沖,
  58.                              // 就是讓E從0到1發生正跳變,所以應先置"0"
  59.   _nop_();
  60.   _nop_();             //空操作兩個機器周期,給硬件反應時間
  61.   P0=dictate;            //將數據送入P0口,即寫入指令或地址
  62.   _nop_();
  63.   _nop_();
  64.   _nop_();
  65.   _nop_();               //空操作四個機器周期,給硬件反應時間
  66.   E=1;                   //E置高電平
  67.   _nop_();
  68.   _nop_();
  69.   _nop_();
  70.   _nop_();               //空操作四個機器周期,給硬件反應時間
  71.    E=0;                  //當E由高電平跳變成低電平時,液晶模塊開始執行命令
  72. }
  73. /*****************************************************
  74. 函數功能:指定字符顯示的實際地址
  75. 入口參數:x
  76. ***************************************************/
  77. void WriteAddress(unsigned char x)
  78. {
  79.      WriteInstruction(x|0x80); //顯示位置的確定方法規定為"80H+地址碼x"
  80. }
  81. /*****************************************************
  82. 函數功能:將數據(字符的標準ASCII碼)寫入液晶模塊
  83. 入口參數:y(為字符常量)
  84. ***************************************************/
  85. void WriteData(unsigned char y)
  86. {
  87.     while(BusyTest()==1);  
  88.    RS=1;           //RS為高電平,RW為低電平時,可以寫入數據
  89.    RW=0;
  90.    E=0;            //E置低電平(根據表8-6,寫指令時,E為高脈沖,
  91.                        // 就是讓E從0到1發生正跳變,所以應先置"0"
  92.    P0=y;           //將數據送入P0口,即將數據寫入液晶模塊
  93.    _nop_();
  94.    _nop_();
  95.     _nop_();
  96.      _nop_();       //空操作四個機器周期,給硬件反應時間
  97.    E=1;          //E置高電平
  98.    _nop_();
  99.    _nop_();
  100.    _nop_();
  101.   _nop_();        //空操作四個機器周期,給硬件反應時間
  102.   E=0;            //當E由高電平跳變成低電平時,液晶模塊開始執行命令
  103. }
  104. /*****************************************************
  105. 函數功能:對LCD的顯示模式進行初始化設置
  106. ***************************************************/
  107. void LcdInitiate(void)
  108. {
  109.    delay(15);             //延時15ms,首次寫指令時應給LCD一段較長的反應時間
  110.    WriteInstruction(0x38);  //顯示模式設置:16×2顯示,5×7點陣,8位數據接口
  111. delay(5);   //延時5ms 
  112. WriteInstruction(0x38);
  113. delay(5);
  114. WriteInstruction(0x38);
  115. delay(5);
  116. WriteInstruction(0x0f);  //顯示模式設置:顯示開,有光標,光標閃爍
  117. delay(5);
  118. WriteInstruction(0x06);  //顯示模式設置:光標右移,字符不移
  119. delay(5);
  120. WriteInstruction(0x01);  //清屏幕指令,將以前的顯示內容清除
  121. delay(5);
  122. }
  123. void main(void)            //主函數
  124. {
  125.   unsigned char i;
  126.   LcdInitiate();         //調用LCD初始化函數  
  127.   delay(10);
  128.   while(1)
  129.      {
  130.        WriteInstruction(0x01);//清顯示:清屏幕指令
  131.    WriteAddress(0x00);  // 設置顯示位置為第一行的第5個字
  132.          i = 0;
  133.   while(string[i] != '\0')
  134.    {      // 顯示字符
  135.      WriteData(string[i]);
  136.      i++;
  137.      delay(150);
  138.    }
  139.         for(i=0;i<4;i++)
  140.       delay(250);
  141.    
  142.   }
  143.      
  144.   
  145. }
復制代碼

實例:用LCD循環右移顯示Welcome to China.rar

56.04 KB, 下載次數: 2, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区在线 | 亚洲精品成人 | 免费视频一区二区 | 日日操夜夜操天天操 | 国产成人在线视频 | 99色视频 | 欧美成人aaa级毛片在线视频 | 69福利影院| 美女视频一区 | 免费在线性爱视频 | 国产偷久久一级精品60部 | 狠狠爱综合网 | 伊人网国产 | 亚洲天堂999 | 国产精品日韩在线 | 华丽的挑战在线观看 | 伊人精品一区二区三区 | 先锋av资源网| 久久久久久国产精品 | 一区二区三区四区免费视频 | 国产亚洲人成a在线v网站 | 久久久综合 | 国产精品一区视频 | 国产成人免费在线观看 | 97免费视频在线观看 | 99热热99 | 亚洲国产高清在线观看 | 婷婷久久网 | 精品国产一二三区 | 免费黄色的视频 | 亚洲成av人影片在线观看 | 成人精品国产一区二区4080 | 国产一区二区三区 | 看毛片的网站 | 在线免费观看黄色 | 国产精品高清一区二区三区 | 亚洲人精品午夜 | 亚洲精品在线看 | 日韩国产欧美在线观看 | aaaaaaa片毛片免费观看 | 九九热这里只有精品6 |