找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2353|回复: 1
打印 上一主题 下一主题
收起左侧

1602lcd.H头文件分享

[复制链接]
跳转到指定楼层
楼主
ID:192910 发表于 2017-4-24 02:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下载
1602lcd.rar (1.1 KB, 下载次数: 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 延时子程序

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

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

  20. * 延时子程序

  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忙状态                                          
  32. * lcd_busy为1时,忙,等待。                              
  33. * lcd-busy为0时,闲,可写指令与数据                        

  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. * 写指令或数据

  48. * start=0, 写入命令;  start=1, 写入数据

  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;                 //写入数据

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

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

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

  67. *  LCD初始化设定                                             

  68. *************************************************************/
  69. void lcd_init()
  70. {
  71.     lcd_delay(15);
  72.     lcd_write(0,0x38);                //16*2显示,5*7点阵,8位数据
  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);               //显示开,关光标
  79.     lcd_delay(5);
  80.     lcd_write(0,0x06);              //移动光标
  81.     lcd_delay(5);
  82.     lcd_write(0,0x01);              //清除LCD的显示内容
  83.     lcd_delay(25);                          //延时
  84. }

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

  86. *  设定显示的行、列位置 (行的范围: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);     //数据指针=80+地址变量
  93.    else if(hang==2&&(lie-1)<=127&&(lie)>0)                        
  94.    lcd_write(0,(lie-1)|0xC0);     //数据指针=C0+地址变量
  95. }
  96. /*********************************************************

  97. 专门写单个数字

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

  99. void lcdwrite_sz(uchar in_data)
  100. {

  101.     while(lcd_busy());
  102.         if(0<=in_data<=9)
  103.    {
  104.             LCD_RS = 1;                 //写入数据
  105.        
  106.             LCD_RW = 0;
  107.             LCD_EN = 0;
  108.             lcd_delayNOP();
  109.        
  110.             P0 = in_data+0x30;                 //发送8位
  111.             lcd_delayNOP();          
  112.             LCD_EN = 1;
  113.             lcd_delayNOP();
  114.             LCD_EN = 0;
  115.         }
  116. }
  117. /*********************************************************

  118. 专门写单个字母(大小写的“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;                 //写入数据
  126.        
  127.             LCD_RW = 0;
  128.             LCD_EN = 0;
  129.             lcd_delayNOP();
  130.        
  131.             P0 = in_data;                 //发送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的显示内容
  149.     lcd_delay(25);                          //延时
  150. }
复制代码


1602lcd.rar

1.1 KB, 下载次数: 11, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:192235 发表于 2017-4-24 09:10 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表