标题: LCD1602基本显示注意事项与单片机程序 [打印本页]

作者: 916878329    时间: 2017-12-21 14:57
标题: LCD1602基本显示注意事项与单片机程序
LCD1602液晶显示:
Welcome!
LCD1602 display
使用方法(注意事项):
1、先插接好LCD1602液晶,插接到LCD1602排针上(位于数码管上方16个孔的排母)
插接方向:插接完成后液晶屏幕处于开发板内(盖住数码管)
一定要把排针全部插入16P排母,插接是注意不能错位。
如果排针有歪斜,用户可以用手慢慢的掰正即可,不会断掉或影响使用,因为排针受外力很容易歪斜,但韧性好。
2、打开开发板电源,烧入配套LCD1602显示的程序。
3、如果没有显示字符,或者出现全黑的方格和字迹不清晰,可以找一个合适的工具,有螺丝刀最好,调节16P排母左边的“液晶对比度电位器”顺时针慢慢调节,直到显示清楚,顺时针调节增加对比度,逆时针减小对比度。接插示意图如下:


单片机源程序如下:
  1. /*********************************************************************************
  2. * 【作    者】: 清翔电子:03
  3. * 【外部晶振】: 11.0592mhz       
  4. * 【主控芯片】: STC89C52
  5. * 【编译环境】: Keil μVisio3       
  6. * 【程序功能】: LCD1602显示                                                                                   
  7. * 【使用说明】: 正确接上LCD1602液晶并调节好对比度
  8. *  说明:免费开源,不提供源代码分析.
  9. **********************************************************************************/
  10. #include <reg52.h>

  11. /*=================================================
  12. *自定义数据类型
  13. =================================================*/
  14. typedef unsigned char uchar;
  15. typedef unsigned int uint;

  16. #define LCD1602_DB P0        //LCD1602数据总线

  17. sbit LCD1602_RS = P3^5;         //RS端
  18. sbit LCD1602_RW = P3^6;         //RW端
  19. sbit LCD1602_EN = P3^4;         //EN端
  20. sbit DU = P2^6;//
  21. sbit WE = P2^7;//数码管位选段选用于关闭数码管显示

  22. /*=================================================
  23. *函数名称:Read_Busy
  24. *函数功能:判断1602液晶忙,并等待
  25. =================================================*/
  26. void Read_Busy()
  27. {
  28.         uchar busy;
  29.         LCD1602_DB = 0xff;//复位数据总线
  30.         LCD1602_RS = 0;          //拉低RS
  31.         LCD1602_RW = 1;          //拉高RW读
  32.         do
  33.         {
  34.                 LCD1602_EN = 1;//使能EN
  35.                 busy = LCD1602_DB;//读回数据
  36.                 LCD1602_EN = 0;         //拉低使能以便于下一次产生上升沿
  37.         }while(busy & 0x80); //判断状态字BIT7位是否为1,为1则表示忙,程序等待
  38. }
  39. /*=================================================
  40. *函数名称:LCD1602_Write_Cmd
  41. *函数功能:写LCD1602命令
  42. *调用:Read_Busy();
  43. *输入:cmd:要写的命令
  44. =================================================*/
  45. void LCD1602_Write_Cmd(uchar cmd)
  46. {
  47.         Read_Busy();         //判断忙,忙则等待
  48.         LCD1602_RS = 0;
  49.         LCD1602_RW = 0;        //拉低RS、RW操作时序情况1602课件下中文使用说明基本操作时序章节
  50.         LCD1602_DB = cmd;//写入命令
  51.         LCD1602_EN = 1;         //拉高使能端 数据被传输到LCD1602内
  52.         LCD1602_EN = 0;         //拉低使能以便于下一次产生上升沿
  53. }
  54. /*=================================================
  55. *函数名称:LCD1602_Write_Dat
  56. *函数功能:写LCD1602数据
  57. *调用:Read_Busy();
  58. *输入:dat:需要写入的数据
  59. =================================================*/
  60. void LCD1602_Write_Dat(uchar dat)
  61. {
  62.         Read_Busy();
  63.         LCD1602_RS = 1;
  64.         LCD1602_RW = 0;
  65.         LCD1602_DB = dat;
  66.         LCD1602_EN = 1;
  67.         LCD1602_EN = 0;
  68. }
  69. /*=================================================
  70. *函数名称:LCD1602_Dis_OneChar
  71. *函数功能:在指定位置显示一个字符
  72. *调用:LCD1602_Write_Cmd(); LCD1602_Write_Dat();       
  73. *输入:x:要显示的横坐标取值0-40,y:要显示的行坐标取值0-1(0为第一行,1为第二行)
  74.                 dat:需要显示的数据以ASCLL形式显示
  75. =================================================*/
  76. void LCD1602_Dis_OneChar(uchar x, uchar y,uchar dat)
  77. {
  78.         if(y)        x |= 0x40;
  79.         x |= 0x80;
  80.         LCD1602_Write_Cmd(x);
  81.         LCD1602_Write_Dat(dat);               
  82. }
  83. /*=================================================
  84. *函数名称:LCD1602_Dis_Str
  85. *函数功能:在指定位置显示字符串
  86. *调用:LCD1602_Write_Cmd(); LCD1602_Write_Dat();
  87. *输入:x:要显示的横坐标取值0-40,y:要显示的行坐标取值0-1(0为第一行,1为第二行)
  88.                 *str:需要显示的字符串
  89. =================================================*/
  90. void LCD1602_Dis_Str(uchar x, uchar y, uchar *str)
  91. {
  92.         if(y) x |= 0x40;
  93.         x |= 0x80;
  94.         LCD1602_Write_Cmd(x);
  95.         while(*str != '\0')
  96.         {
  97.                 LCD1602_Write_Dat(*str++);
  98.         }
  99. }
  100. /*=================================================
  101. *函数名称:Init_LCD1602
  102. *函数功能:1602初始化
  103. *调用:        LCD1602_Write_Cmd();
  104. =================================================*/
  105. void Init_LCD1602()
  106. {
  107.         LCD1602_Write_Cmd(0x38); //        设置16*2显示,5*7点阵,8位数据接口
  108.         LCD1602_Write_Cmd(0x0c); //开显示
  109. ……………………

  110. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
17_LCD1602基本显示程序.rar (1.26 MB, 下载次数: 320)





作者: yangg12    时间: 2018-4-29 18:55
我觉得挺有帮助的,真的
作者: yangg12    时间: 2018-4-29 18:56
对于新手的帮助很大
作者: xjw123    时间: 2018-5-5 13:15
我要我要
作者: zssss    时间: 2018-5-9 11:06
为什么没有主函数?
作者: doney    时间: 2018-5-9 16:18
新手正在学习,感谢分享
作者: 发货威女    时间: 2018-5-29 13:15
手动点赞,感谢分享。
作者: sch3462    时间: 2018-5-29 15:45
黑币不足,怎么办?下不了。
作者: ptlantu    时间: 2018-6-19 09:15
感谢分享。
作者: 风游兮    时间: 2018-6-19 10:15
sch3462 发表于 2018-5-29 15:45
黑币不足,怎么办?下不了。

多评论或者发贴
作者: feiji666    时间: 2018-6-19 17:41
感谢分享,你这PCB板子怎么做的,有资料吗
作者: t1304623861    时间: 2018-6-28 11:29
感谢分享
作者: hujiyu777    时间: 2018-7-5 09:36
很给力
作者: stephen_pro    时间: 2018-7-14 13:28
谢谢了
作者: 嘉立创科技    时间: 2018-7-14 15:11
谢谢分享~~~~~~~~~~~~~
作者: ccc1001    时间: 2018-9-3 09:06
赞一个!
作者: Sandra333    时间: 2018-9-8 21:48
我觉的挺有帮助的,对于一个小白来说,这就是个指导程序呀
作者: hj0787    时间: 2018-10-1 10:35
感谢分享,嘿嘿,程序代码清晰

作者: ximliu    时间: 2018-11-30 15:10
下载看看
作者: 天空之城01    时间: 2018-12-29 11:20
万分感谢
作者: 小小电子前行者    时间: 2019-3-14 21:21
为什么我下了程序后还是不会显示

作者: 峰峰风    时间: 2019-6-12 14:15
很不错
谢谢!
作者: 曹家祥    时间: 2019-6-13 14:05
感谢分享~~~
作者: 祁舞纷飞    时间: 2019-6-22 22:57
我觉得非常有帮助
作者: spendell    时间: 2019-9-23 21:22
弄好后屏幕第一行全黑,是不是说我的屏幕坏了?
作者: ouccuo    时间: 2019-10-2 21:04
试了几个1602程序,这个是最好用的,注释非常详细,赞
作者: RandomM    时间: 2020-3-25 18:42
感谢分享




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1