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

標(biāo)題: 根據(jù)51hei論壇里高手的帖子整理的1602液晶屏的C語言驅(qū)動文件 [打印本頁]

作者: 893843675    時間: 2018-10-24 10:43
標(biāo)題: 根據(jù)51hei論壇里高手的帖子整理的1602液晶屏的C語言驅(qū)動文件
根據(jù)論壇里高手的帖子,整理的1602屏的C文件,經(jīng)過測試,4塊開發(fā)板均能順利使用。
在C文件中調(diào)整1602對應(yīng)的89C52單片機的引腳,即可點亮。

  1. /****************************************************************
  2. 在數(shù)據(jù)線定義位置選擇對應(yīng)引腳
  3. ****************************************************************/

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

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

  8. /*引腳順序,可根據(jù)不同開發(fā)板調(diào)整*/

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




  13. /********************************************************************
  14. * 名稱 :1602寫入字符函數(shù)
  15. * 功能 : 顯示
  16. * 可以直接復(fù)制使用
  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. * 功能 : 這個是一個讀狀態(tài)函數(shù),讀出函數(shù)是否處在忙狀態(tài)
  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命令函數(shù)
  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寫數(shù)據(jù)函數(shù)
  91. * 輸入 : 需要寫入1602的數(shù)據(jù)
  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位數(shù)據(jù),雙行顯示,5*7點陣
  120.         Delay1602(5);
  121.         wcmd(0x38);
  122.         Delay1602(5);
  123.         wcmd(0x38);
  124.         wcmd(0x38);
  125.         Busy();
  126.         wcmd(0x08);                        //顯示關(guān)閉,無光標(biāo),光標(biāo)不顯示
  127.         Busy();   
  128.         wcmd(0x01);                        //清顯示
  129.         Busy();
  130.         wcmd(0x06);                        //光標(biāo)右移
  131.         Busy();
  132.         wcmd(0x0c);                         //開顯示,有光標(biāo),光標(biāo)閃爍
  133. }

  134. /********************************************************************
  135. * 名稱 : L1602_char(uchar hang,uchar lie,char sign)
  136. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符顯示"b" ,調(diào)用該函數(shù)如下
  137. lcd1602_char(1,5,'b')
  138. * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
  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" ,調(diào)用該函數(shù)如下
  161. lcd1602_string(1,5,"ab cd ef;")
  162. * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
  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. //定位光標(biāo)
  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. */


復(fù)制代碼








歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩精品一区二区三区在线播放 | 国产高清久久久 | 欧美另类视频 | 欧美激情国产日韩精品一区18 | 男人电影天堂 | 美日韩免费视频 | 中国黄色在线视频 | 亚洲天堂一区二区 | 免费毛片网| 欧美日韩在线高清 | 色av一区二区三区 | 欧美久久一区二区三区 | 三级黄色片在线观看 | 香蕉视频在线播放 | 亚洲日日操 | 成人亚洲 | 国产成人久久精品一区二区三区 | 视频一区二区三区四区五区 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 91国内精精品久久久久久婷婷 | 国产一区二区三区日韩 | www.婷婷| 中文字幕亚洲国产 | 久久婷婷色 | 久久精彩视频 | 视频1区| 一级黄色裸片 | 视频在线观看一区 | 黄色播放 | 免费在线黄 | 免费国产网站 | 欧美aaaaaa | 欧美日日 | 国产精品精品视频 | 国产九九精品 | 女人毛片a毛片久久人人 | 亚洲va欧美va人人爽午夜 | 欧美精品在线播放 | 久草在线中文888 | av天天干 | 毛片av免费看|