找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序缺少LCD1602.h要如何获取?直接使用别的工程里面的同名文件可以吗?

[复制链接]
跳转到指定楼层
楼主
ID:920233 发表于 2021-6-30 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
4黑币
之前看到xrt123大佬写的排队取号程序,大佬不在线,我写LCD1602.h头文件写不出来,求帮助,谢谢,新人没有太多币。麻烦各位了

http://www.51hei.com/bbs/dpj-206484-1.html

最佳答案

查看完整内容

我给你来个程序试试

评分

参与人数 1黑币 +15 收起 理由
angmall + 15 共享的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:155507 发表于 2021-6-30 10:28 | 只看该作者
我给你来个程序试试

  1. //LCD1602.h
  2. #ifndef _LCD1602_H_
  3. #define _LCD1602_H_
  4. /**********************************
  5. 包含头文件
  6. **********************************/
  7. #include <reg51.h>
  8. #include <string.h>

  9. //---重定义关键词---//
  10. #ifndef uchar
  11. #define uchar unsigned char
  12. #endif

  13. #ifndef uint
  14. #define uint unsigned int
  15. #endif

  16. /**********************************
  17. 当使用的是4位数据传输的时候定义,
  18. 使用8位取消这个定义
  19. **********************************/
  20. //#define LCD1602_4PINS

  21. /**********************************
  22. PIN口定义
  23. **********************************/
  24. #define LCD1602_DATAPINS P0
  25. sbit LCD1602_E =P2^2;
  26. sbit LCD1602_RW=P2^1;
  27. sbit LCD1602_RS=P2^0;

  28. /**********************************
  29. 函数声明
  30. **********************************/
  31. /*在51单片机12MHZ时钟下的延时函数*/
  32. void Lcd1602_Delay1ms(uint c);   //误差 0us
  33. /*LCD1602写入8位命令子函数*/
  34. void LcdWriteCom(uchar com);
  35. /*LCD1602写入8位数据子函数*/       
  36. void LcdWriteData(uchar dat);
  37. /*LCD1602初始化子程序*/               
  38. void LCD_init();
  39. //设定显示行位置子程序
  40. void LCD_row(unsigned char row);
  41. //写字符函数
  42. void LCD_disp_char(uchar Y, uchar X, uchar DData);  
  43. //写字符串函数
  44. void LCD_DispString(unsigned char *lcd_string);
  45. //显示位置和写字符串函数
  46. //void DisplayStr(uchar Y, uchar X, uchar code *DData);


  47. /*******************************************************************************
  48. * 函 数 名         : Lcd1602_Delay1ms
  49. * 函数功能                   : 延时函数,延时1ms
  50. * 输    入         : c
  51. * 输    出         : 无
  52. * 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
  53. *******************************************************************************/

  54. void Lcd1602_Delay1ms(uint c)   //误差 0us
  55. {
  56.     uchar a,b;
  57.         for (; c>0; c--)
  58.         {
  59.                  for (b=199;b>0;b--)
  60.                  {
  61.                           for(a=1;a>0;a--);
  62.                  }      
  63.         }
  64.            
  65. }


  66. /*******************************************************************************
  67. * 函 数 名         : LcdWriteCom
  68. * 函数功能                   : 向LCD写入一个字节的命令
  69. * 输    入         : com
  70. * 输    出         : 无
  71. *******************************************************************************/
  72. #ifndef         LCD1602_4PINS         //当没有定义这个LCD1602_4PINS时
  73. void LcdWriteCom(uchar com)          //写入命令
  74. {
  75.         LCD1602_E = 0;     //使能
  76.         LCD1602_RS = 0;           //选择发送命令
  77.         LCD1602_RW = 0;           //选择写入
  78.        
  79.         LCD1602_DATAPINS = com;     //放入命令
  80.         Lcd1602_Delay1ms(1);                //等待数据稳定

  81.         LCD1602_E = 1;                  //写入时序
  82.         Lcd1602_Delay1ms(5);          //保持时间
  83.         LCD1602_E = 0;
  84. }
  85. #else
  86. void LcdWriteCom(uchar com)          //写入命令
  87. {
  88.         LCD1602_E = 0;         //使能清零
  89.         LCD1602_RS = 0;         //选择写入命令
  90.         LCD1602_RW = 0;         //选择写入

  91.         LCD1602_DATAPINS = com;        //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
  92.         Lcd1602_Delay1ms(1);

  93.         LCD1602_E = 1;         //写入时序
  94.         Lcd1602_Delay1ms(5);
  95.         LCD1602_E = 0;

  96. //        Lcd1602_Delay1ms(1);
  97.         LCD1602_DATAPINS = com << 4; //发送低四位
  98.         Lcd1602_Delay1ms(1);

  99.         LCD1602_E = 1;         //写入时序
  100.         Lcd1602_Delay1ms(5);
  101.         LCD1602_E = 0;
  102. }
  103. #endif
  104. /*******************************************************************************
  105. * 函 数 名         : LcdWriteData
  106. * 函数功能                   : 向LCD写入一个字节的数据
  107. * 输    入         : dat
  108. * 输    出         : 无
  109. *******************************************************************************/                  
  110. #ifndef         LCD1602_4PINS                  
  111. void LcdWriteData(uchar dat)                        //写入数据
  112. {
  113.         LCD1602_E = 0;        //使能清零
  114.         LCD1602_RS = 1;        //选择输入数据
  115.         LCD1602_RW = 0;        //选择写入

  116.         LCD1602_DATAPINS = dat; //写入数据
  117.         Lcd1602_Delay1ms(1);

  118.         LCD1602_E = 1;   //写入时序
  119.         Lcd1602_Delay1ms(5);   //保持时间
  120.         LCD1602_E = 0;
  121. }
  122. #else
  123. void LcdWriteData(uchar dat)                        //写入数据  //写数据函数
  124. {
  125.         LCD1602_E = 0;          //使能清零
  126.         LCD1602_RS = 1;          //选择写入数据
  127.         LCD1602_RW = 0;          //选择写入

  128.         LCD1602_DATAPINS = dat;        //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
  129.         Lcd1602_Delay1ms(1);

  130.         LCD1602_E = 1;          //写入时序
  131.         Lcd1602_Delay1ms(5);
  132.         LCD1602_E = 0;

  133.         LCD1602_DATAPINS = dat << 4; //写入低四位
  134.         Lcd1602_Delay1ms(1);

  135.         LCD1602_E = 1;          //写入时序
  136.         Lcd1602_Delay1ms(5);
  137.         LCD1602_E = 0;
  138. }
  139. #endif
  140. /*******************************************************************************
  141. * 函 数 名       : LcdInit()
  142. * 函数功能                 : 初始化LCD屏
  143. * 输    入       : 无
  144. * 输    出       : 无
  145. *******************************************************************************/                  
  146. #ifndef                LCD1602_4PINS
  147. void LCD_init()                                                  //LCD初始化子程序
  148. {
  149.         LcdWriteCom(0x38);  //开显示
  150.         LcdWriteCom(0x0c);  //开显示不显示光标
  151.         LcdWriteCom(0x06);  //写一个指针加1
  152.         LcdWriteCom(0x01);  //清屏
  153.         LcdWriteCom(0x80);  //设置数据指针起点
  154. }
  155. #else
  156. void LCD_init()                                                  //LCD初始化子程序
  157. {
  158.         LcdWriteCom(0x32);         //将8位总线转为4位总线
  159.         LcdWriteCom(0x28);         //在四位线下的初始化
  160.         LcdWriteCom(0x0c);  //开显示不显示光标
  161.         LcdWriteCom(0x06);  //写一个指针加1
  162.         LcdWriteCom(0x01);  //清屏
  163.         LcdWriteCom(0x80);  //设置数据指针起点
  164. }
  165. #endif

  166. /*****************************************************************************
  167. 函数功能:设定显示行位置子程序
  168. 入口参数:row
  169. 出口参数:
  170. *****************************************************************************/
  171. void LCD_row(unsigned char row)
  172. {
  173.         if(row == 1)
  174.         LcdWriteCom( 0x80);
  175.         else if(row == 2)
  176.         LcdWriteCom( 0x80 + 0x40);

  177. }

  178. void LCD_disp_char(uchar Y, uchar X, uchar DData)  //写字符函数
  179. {
  180.         Y -=1;
  181.           Y &= 0x01;
  182.           X &= 0x0F; //限制X不能大于15,Y不能大于1
  183.           if(Y) X |= 0x40; //当要显示第二行时地址码+0x40;
  184.           X |= 0x80; //算出指令码
  185.           LcdWriteCom(X); //发送地址码
  186.           LcdWriteData(DData);
  187. }

  188. /*输出字符串*/
  189. void LCD_DispString(unsigned char *lcd_string)  //写字符串函数
  190. {
  191.         unsigned char i=0;
  192.         while(lcd_string[i]!=0x00)
  193.         {
  194.                 LcdWriteData(lcd_string[i]); //显示单个字符
  195.                 i++;
  196.         }
  197. }

  198. /*
  199. void DisplayStr(uchar Y, uchar X, uchar code *DData) //显示位置和写字符串函数
  200. {
  201.           uchar ListLength,j;
  202.           ListLength = strlen(DData);
  203.         Y -=1;
  204.           Y &= 0x01;
  205.           X &= 0x0F; //限制X不能大于15,Y不能大于1
  206.     if (X <= 0x0F) //X坐标应小于0xF
  207.     {
  208.                 for(j=0;j<ListLength;j++)
  209.                 {
  210.              LCD_disp_char(X, Y, DData[j]); //显示单个字符
  211.              X++;
  212.                 }
  213.         }
  214. }
  215. */

  216. #endif

复制代码
回复

使用道具 举报

板凳
ID:123289 发表于 2021-6-30 16:46 | 只看该作者
你知道【LCD1602.h】是干什么的吗?别的工程里面的同名文件,如果与你想要干的是同一码事,则可行。
回复

使用道具 举报

地板
ID:824490 发表于 2021-6-30 17:00 | 只看该作者
同名同姓,不同姓别的人多了去了,能是一个人吗?
回复

使用道具 举报

5#
ID:920233 发表于 2021-7-1 09:23 | 只看该作者
angmall 发表于 2021-6-30 10:28
我给你来个程序试试

谢谢大佬,完美运行。
回复

使用道具 举报

6#
ID:483991 发表于 2021-7-1 10:13 | 只看该作者
这个不是固定的代码!建议你多看几遍视频,看明白你也写的出来!别人写的代码是根据自身爱好写的!你不了解不一定能用好!
回复

使用道具 举报

7#
ID:939710 发表于 2021-7-4 07:56 | 只看该作者
lcd的一般直接移植就行了,但是你.c和.h要对应起来。因为有驱动函数
回复

使用道具 举报

8#
ID:390416 发表于 2021-7-6 20:32 | 只看该作者
LCD1602显示℃ 这种自定义符号 http://www.51hei.com/bbs/dpj-200685-1.html
LCD1602液晶最新资料 说明了具体的时间要求 http://www.51hei.com/bbs/dpj-205768-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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