找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2843|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

1602lcd.H頭文件分享

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:192910 發(fā)表于 2017-4-24 02:35 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
下載
1602lcd.rar (1.1 KB, 下載次數(shù): 19)


  1. #include < reg51.h >
  2. #include < intrins.h >
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit  LCD_RS = P2^0;            
  6. sbit  LCD_RW = P2^1;
  7. sbit  LCD_EN = P2^2;
  8. /**********************************************************

  9. * 5us 延時(shí)子程序

  10. **********************************************************/
  11. void  lcd_delayNOP()
  12. {
  13.    _nop_();
  14.    _nop_();
  15.    _nop_();
  16.    _nop_();
  17.    _nop_();
  18. }

  19. /**********************************************************

  20. * 延時(shí)子程序

  21. **********************************************************/
  22. void lcd_delay(uint ms)

  23. {
  24.    uchar t;
  25.    while(ms--)
  26.    {
  27.      for(t = 0; t < 120; t++);
  28.    }
  29. }


  30. /**********************************************************

  31. * 檢查LCD忙狀態(tài)                                          
  32. * lcd_busy為1時(shí),忙,等待。                              
  33. * lcd-busy為0時(shí),閑,可寫指令與數(shù)據(jù)                        

  34. **********************************************************/
  35. bit lcd_busy()
  36. {                          
  37.     bit result;
  38.     LCD_RS = 0;
  39.     LCD_RW = 1;
  40.     LCD_EN = 1;
  41.     lcd_delayNOP();
  42.     result = (bit)(P0&0x80);
  43.     LCD_EN = 0;
  44.     return(result);
  45. }

  46. /*********************************************************

  47. * 寫指令或數(shù)據(jù)

  48. * start=0, 寫入命令;  start=1, 寫入數(shù)據(jù)

  49. *********************************************************/

  50. void lcd_write(bit start, uchar in_data)
  51. {

  52.     while(lcd_busy());

  53.     if(start==0)
  54.     LCD_RS = 0;               //寫入命令
  55.     else
  56.     LCD_RS = 1;                 //寫入數(shù)據(jù)

  57.     LCD_RW = 0;
  58.     LCD_EN = 0;
  59.     lcd_delayNOP();

  60.     P0 = in_data;                 //發(fā)送8位
  61.     lcd_delayNOP();          
  62.     LCD_EN = 1;
  63.     lcd_delayNOP();
  64.     LCD_EN = 0;
  65. }

  66. /*************************************************************

  67. *  LCD初始化設(shè)定                                             

  68. *************************************************************/
  69. void lcd_init()
  70. {
  71.     lcd_delay(15);
  72.     lcd_write(0,0x38);                //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
  73.     lcd_delay(5);
  74.     lcd_write(0,0x38);
  75.     lcd_delay(5);
  76.     lcd_write(0,0x38);

  77.     lcd_delay(5);
  78.     lcd_write(0,0x0c);               //顯示開,關(guān)光標(biāo)
  79.     lcd_delay(5);
  80.     lcd_write(0,0x06);              //移動(dòng)光標(biāo)
  81.     lcd_delay(5);
  82.     lcd_write(0,0x01);              //清除LCD的顯示內(nèi)容
  83.     lcd_delay(25);                          //延時(shí)
  84. }

  85. /**********************************************************

  86. *  設(shè)定顯示的行、列位置 (行的范圍:1——2,  列的范圍:1——16)                                            
  87.                                                         
  88. **********************************************************/
  89. void lcd_pos(uchar hang,uchar lie)
  90. {  
  91.    if(hang==1&&(lie-1)<=16&&(lie)>0)                        
  92.    lcd_write(0,(lie-1)|0x80);     //數(shù)據(jù)指針=80+地址變量
  93.    else if(hang==2&&(lie-1)<=127&&(lie)>0)                        
  94.    lcd_write(0,(lie-1)|0xC0);     //數(shù)據(jù)指針=C0+地址變量
  95. }
  96. /*********************************************************

  97. 專門寫單個(gè)數(shù)字

  98. *********************************************************/

  99. void lcdwrite_sz(uchar in_data)
  100. {

  101.     while(lcd_busy());
  102.         if(0<=in_data<=9)
  103.    {
  104.             LCD_RS = 1;                 //寫入數(shù)據(jù)
  105.        
  106.             LCD_RW = 0;
  107.             LCD_EN = 0;
  108.             lcd_delayNOP();
  109.        
  110.             P0 = in_data+0x30;                 //發(fā)送8位
  111.             lcd_delayNOP();          
  112.             LCD_EN = 1;
  113.             lcd_delayNOP();
  114.             LCD_EN = 0;
  115.         }
  116. }
  117. /*********************************************************

  118. 專門寫單個(gè)字母(大小寫的“a-z”)

  119. *********************************************************/
  120. void lcdwrite_zm(uchar in_data)
  121. {

  122.     while(lcd_busy());
  123.         if(0x20<=in_data<=0x7f)
  124.    {
  125.             LCD_RS = 1;                 //寫入數(shù)據(jù)
  126.        
  127.             LCD_RW = 0;
  128.             LCD_EN = 0;
  129.             lcd_delayNOP();
  130.        
  131.             P0 = in_data;                 //發(fā)送8位
  132.             lcd_delayNOP();          
  133.             LCD_EN = 1;
  134.             lcd_delayNOP();
  135.             LCD_EN = 0;
  136.         }
  137. }

  138. void lcdwrite_string(unsigned char *str)
  139. {
  140.         while(*str!='\0')
  141.         {
  142.                 lcdwrite_zm(*str);
  143.                 str++;
  144.         }
  145. }

  146. void lcd_clear()
  147. {
  148.     lcd_write(0,0x01);              //清除LCD的顯示內(nèi)容
  149.     lcd_delay(25);                          //延時(shí)
  150. }
復(fù)制代碼


1602lcd.rar

1.1 KB, 下載次數(shù): 11, 下載積分: 黑幣 -5

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

使用道具 舉報(bào)

沙發(fā)
ID:192235 發(fā)表于 2017-4-24 09:10 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表