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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

根據51hei論壇里高手的帖子整理的1602液晶屏的C語言驅動文件

[復制鏈接]
跳轉到指定樓層
樓主
ID:353874 發表于 2018-10-24 10:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
根據論壇里高手的帖子,整理的1602屏的C文件,經過測試,4塊開發板均能順利使用。
在C文件中調整1602對應的89C52單片機的引腳,即可點亮。

  1. /****************************************************************
  2. 在數據線定義位置選擇對應引腳
  3. ****************************************************************/

  4. #include<reg51.h>
  5. #include <intrins.h>

  6. #define uchar unsigned char
  7. #define uint  unsigned int

  8. /*引腳順序,可根據不同開發板調整*/

  9. #define IODATA  P2  //數據
  10. sbit  E=P0^5;       //1602使能引腳
  11. sbit RW=P0^6;       //1602讀寫引腳   
  12. sbit RS=P0^7;       //1602數據/命令選擇引腳




  13. /********************************************************************
  14. * 名稱 :1602寫入字符函數
  15. * 功能 : 顯示
  16. * 可以直接復制使用
  17. ***********************************************************************/
  18. /*
  19. lcd1602_char(1,5,'b')    //寫字符
  20. lcd1602_string(1,5,"ab cd ef;")           //寫字符串
  21. lcd1602_init()    //初始化

  22. */

  23. /********************************************************************
  24. * 名稱 : delay()
  25. * 功能 : 延時
  26. * 輸入 : 無
  27. * 輸出 : 無
  28. ***********************************************************************/
  29. void delay1602()
  30. {
  31.         _nop_();
  32.         _nop_();
  33. }

  34. void Delay1602(uint del)
  35. {
  36.         uint i,j;
  37.         for(i=0;i<del;i++)
  38.         for(j=0;j<=148;j++)
  39.         {
  40.         }   
  41. }


  42. /********************************************************************
  43. * 名稱 : bit Busy(void)
  44. * 功能 : 這個是一個讀狀態函數,讀出函數是否處在忙狀態
  45. * 輸入 : 輸入的命令值
  46. * 輸出 : 無
  47. ***********************************************************************/
  48. void Busy(void)
  49. {
  50.         bit busy_flag = 1;
  51.         IODATA  = 0xff;
  52.         RS = 0;
  53.         delay1602();
  54.         RW = 1;
  55.         delay1602();
  56.         E = 1;
  57.         //Delay(1);
  58.         while(1)
  59.         {
  60.                 busy_flag = (bit)(IODATA  & 0x80);
  61.                 if(busy_flag == 0)
  62.                 {
  63.                         break;
  64.                 }
  65.         }
  66.         E = 0;
  67. }

  68. /********************************************************************
  69. * 名稱 : wcmd(uchar del)
  70. * 功能 : 1602命令函數
  71. * 輸入 : 輸入的命令值
  72. * 輸出 : 無
  73. ***********************************************************************/
  74. void wcmd(uchar del)
  75. {
  76.         RS = 0;
  77.         delay1602();
  78.         RW = 0;
  79.         delay1602();
  80.         E = 0;
  81.         delay1602();
  82.         IODATA  = del;
  83.         delay1602();
  84.         E = 1;
  85.         delay1602();
  86.         E = 0;
  87. }

  88. /********************************************************************
  89. * 名稱 : wdata(uchar del)
  90. * 功能 : 1602寫數據函數
  91. * 輸入 : 需要寫入1602的數據
  92. * 輸出 : 無
  93. ***********************************************************************/
  94. void lcd1602_write_data(uchar del)
  95. {
  96.         Busy();      
  97.         delay1602();
  98.         RS = 1;
  99.         delay1602();
  100.         RW = 0;
  101.         delay1602();
  102.         E = 0;
  103.         delay1602();
  104.         IODATA  = del;
  105.         delay1602();
  106.         E = 1;
  107.         delay1602();
  108.         E = 0;
  109. }

  110. /********************************************************************
  111. * 名稱 : L1602_init()
  112. * 功能 : 1602初始化,請參考1602的資料
  113. * 輸入 : 無
  114. * 輸出 : 無
  115. ***********************************************************************/
  116. void lcd1602_init(void)
  117. {
  118.         Delay1602(15);
  119.         wcmd(0x38);                        //8位數據,雙行顯示,5*7點陣
  120.         Delay1602(5);
  121.         wcmd(0x38);
  122.         Delay1602(5);
  123.         wcmd(0x38);
  124.         wcmd(0x38);
  125.         Busy();
  126.         wcmd(0x08);                        //顯示關閉,無光標,光標不顯示
  127.         Busy();   
  128.         wcmd(0x01);                        //清顯示
  129.         Busy();
  130.         wcmd(0x06);                        //光標右移
  131.         Busy();
  132.         wcmd(0x0c);                         //開顯示,有光標,光標閃爍
  133. }

  134. /********************************************************************
  135. * 名稱 : L1602_char(uchar hang,uchar lie,char sign)
  136. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符顯示"b" ,調用該函數如下
  137. lcd1602_char(1,5,'b')
  138. * 輸入 : 行,列,需要輸入1602的數據
  139. * 輸出 : 無
  140. ***********************************************************************/
  141. void lcd1602_char(uchar hang,uchar lie,char sign)
  142. {
  143.         uchar a;
  144.         if(hang == 1)
  145.         {
  146.                 a = 0x80;
  147.         }
  148.         if(hang == 2)
  149.         {
  150.                 a = 0xc0;
  151.         }
  152.         a = a + lie - 1;
  153.         Busy();
  154.         wcmd(a);
  155.         Busy();
  156.         lcd1602_write_data(sign);
  157. }

  158. /********************************************************************
  159. * 名稱 : L1602_string(uchar hang,uchar lie,uchar *p)
  160. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
  161. lcd1602_string(1,5,"ab cd ef;")
  162. * 輸入 : 行,列,需要輸入1602的數據
  163. * 輸出 : 無
  164. ***********************************************************************/
  165. void lcd1602_string(uchar hang,uchar lie,uchar *p)
  166. {
  167.         uchar a;
  168.         if(hang == 1)
  169.         {
  170.                 a = 0x80;
  171.         }
  172.         if(hang == 2)
  173.         {
  174.                 a = 0xc0;
  175.         }
  176.         a = a + lie - 1;
  177.         while(1)
  178.         {
  179.                 Busy();
  180.                 wcmd(a);
  181.                 Busy();
  182.                 lcd1602_write_data(*p);
  183.                 a++;
  184.                 p++;   
  185.                 if((*p == '\0')||(a==0x90)||(a==0xd0))
  186.                 {
  187.                         break;
  188.                 }
  189.         }
  190. }


  191. /*
  192. //定位光標
  193. void lcd1602_locate(unsigned char x,unsigned char y)
  194. {
  195.         unsigned char aa;
  196.         if (x==1) aa=0x80;
  197.         if (x==2) aa=0x80+0x40;
  198.         Busy();
  199.         wcmd(aa+y-1);
  200.         Busy();
  201. }
  202. */


復制代碼



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久不射电影网 | 久草在线青青草 | 亚洲精品日韩一区二区电影 | 欧美国产视频 | 久久精品国产一区二区电影 | 亚洲视频一区二区三区 | 亚洲第一天堂 | 7799精品视频天天看 | 亚洲一区 | www.亚洲免费 | 天堂综合 | 欧美日韩久久精品 | 成人在线一区二区 | 欧美日韩亚 | 日本三级做a全过程在线观看 | 成人超碰在线 | 日韩有码一区 | 欧美一区视频 | 中文字幕第九页 | 狠狠综合久久av一区二区小说 | 色站综合| 精品91久久久 | 美女久久视频 | 亚洲欧美日本在线 | 毛片黄片免费看 | 国产亚洲精品久久久久久牛牛 | 99精品久久久久 | 日韩av免费在线观看 | 视频一区二区在线观看 | 国产精品毛片一区二区三区 | 色综合美女 | 一区不卡在线观看 | 欧美激情精品久久久久久 | 天天草天天 | 亚洲www | 国产精品日韩在线观看 | 亚洲免费精品 | 久久久久久国产精品免费 | 午夜精品久久久久久久99黑人 | 日本不卡一区 | 国产欧美一区二区三区久久手机版 |