找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机驱动LCD1602只能显示一行,第二行无显示,初始化0x38两次也试过

[复制链接]
跳转到指定楼层
楼主
LCD1602只能显示一行,第二行无显示,初始化0x38两次也试过,单独写第二行也试过,代码如下
  1. /**************************************************************************************
  2. *功能:LCD1602液晶显示                                                                                                                           *
  3. *说明:第一行显示:Crazy Electronic 第二行显示: TEL:0530-2897239                                          *
  4.          1           ---->         16                                                                                                                          *
  5.            -------------------------------                                                                                                  *
  6.            - ****************                         - LCD1602引脚                                                                          *
  7.            - Crazy Electronic                         - 第一行                                                                                  *
  8.            - TEL:0530-2897239                         - 第二行                                                                                  *
  9.            -------------------------------                                                                                                  *
  10. *注意:液晶屏过暗或过亮,请调节R6电位器                                                                                                  *
  11. *硬件连接:                LCD1602  RS                 -->P2.0                                                                                          *
  12. *                                                 RW                 -->P2.1                                                                                            *
  13. *                                                 E                 -->P2.2                                                                                            *
  14. *                                                 D0--D7  -->P0                                                                                   *
  15. *                                                                                                                                                   *
  16. *作者:研发中心                                                                                                                                                  *
  17. *公司:科睿电子产品有限公司                                                                                                                   *
  18. *电话:0530-2897239   15192459227                                                                                                            *
  19. *地址:菏泽市开发区广州路与淮河路交叉口科睿电子产品有限公司                                                   *
  20. ***************************************************************************************/
  21. #include "reg52.h"
  22. #define uchar unsigned char
  23. #define uint unsigned int

  24. sbit rs=P2^0;//H数据,L命令
  25. sbit lcden=P2^2;//高脉冲使能,使能脉宽最小150ns
  26. sbit rw=P2^1;
  27. uchar code table[]= "Crazy Electronic";
  28. uchar code table1[]="TEL:0530-2897239";
  29. /********************************************************************
  30. * 名称 : delay(uchar x)
  31. * 功能 : 延时函数
  32. * 输入 : x
  33. * 输出 : 无
  34. ***********************************************************************/
  35. void delay(uchar x)
  36. {        uint y;
  37.         for(;x>0;x--)
  38.          {                                                                        
  39.                 for(y=100;y>0;y--)
  40.                                 {};
  41.          }
  42. }
  43. /********************************************************************
  44. * 名称 : lcdwrcom(uchar cdat)
  45. * 功能 : LCD1602写数据到LCD1602
  46. * 输入 : cdat
  47. * 输出 : 无
  48. ***********************************************************************/
  49. void lcdwrdata(uchar dat)
  50. {
  51.    //dat = ((dat&0x01)<<7)|((dat&0x02)<<5)|((dat&0x04)<<3)|((dat&0x08)<<1)|((dat&0x10)>>1)|((dat&0x20)>>3)|((dat&0x40)>>5)|((dat&0x80)>>7);
  52.         rs=1;//写数据时RS拉高
  53.         lcden=1;
  54.         P0=dat;
  55.         delay(6);
  56.         lcden=0;
  57.         delay(6);
  58. }
  59. /********************************************************************
  60. * 名称 : lcdwrcom(uchar cdat)
  61. * 功能 : LCD1602写命令到LCD1602
  62. * 输入 : cdat
  63. * 输出 : 无
  64. ***********************************************************************/
  65. void lcdwrcom(uchar cdat)//写指令数据到LCD  
  66. {        
  67.    //cdat = ((cdat&0x01)<<7)|((cdat&0x02)<<5)|((cdat&0x04)<<3)|((cdat&0x08)<<1)|((cdat&0x10)>>1)|((cdat&0x20)>>3)|((cdat&0x40)>>5)|((cdat&0x80)>>7);
  68.     rs=0;//写指令时RS拉低
  69.         lcden=1;
  70.     P0=cdat;//
  71.         delay(6);//不加此延时将导致不能写入指令,但能写入显示数据
  72.         lcden=0;
  73.         delay(6);
  74. }
  75. /********************************************************************
  76. * 名称 : lcd_init()
  77. * 功能 : LCD1602初始化
  78. * 输入 : 无
  79. * 输出 : 无
  80. ***********************************************************************/
  81. void lcd_init()
  82. {
  83.         lcdwrcom(0x38);//0x38设置显示模式为:16X2 显示,5X7 点阵,8 位数据接口
  84.         lcdwrcom(0x0c);//打开显示光标闪烁
  85.         lcdwrcom(0x06);//
  86.         lcdwrcom(0x01);//
  87. }
  88. /********************************************************************
  89. * 名称 : main()
  90. * 功能 : 主函数
  91. * 输入 : 无
  92. * 输出 : 无
  93. ***********************************************************************/
  94. void main()
  95. {
  96.         uchar n;
  97.     rw=0;
  98.         delay(200);
  99.         lcden=0;
  100.         lcd_init();
  101.         lcdwrcom(0x00|0x80);
  102.         for(n=0;n<16;n++)
  103.         {
  104.                 lcdwrdata(table[n]);
  105.                 delay(100);
  106.         }
  107.         lcdwrcom(0x40|0x80);
  108.         for(n=0;n<16;n++)
  109.         {
  110.                 lcdwrdata(table1[n]);
  111.                 delay(100);
  112.         }
  113.         while(1)
  114.         {
  115.         }
  116. }
复制代码


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

使用道具 举报

沙发
ID:111634 发表于 2018-1-25 17:55 | 只看该作者
本帖最后由 zl2168 于 2018-1-25 17:59 编辑

实例67  LCD1602显示屏显示
void  main ( ) {                                 //主函数
unsigned char  x[16]={"0123456789"};                 //定义第一行显示数组x
unsigned char  y[16]={"ABCDEFGHIJKLMNOP"};              //定义第二行显示数组y
E=0;                                 //使能端E低电平,1602准备
init1602 ( );                                   //1602初始化设置
wr1602 (x, 0x80);                                 //写1602第一行数据
wr1602 (y, 0xc0);                                 //写1602第二行数据
while(1);}                              //原地等待


本例编制的LCD 1602显示程序标准化程度很好,若要显示其他字符,只需给数组x[16]y[16]重新赋值即可。
Proteus仿真一下,确认有效。
实例61 LCD1602显示屏显示.rar (49.26 KB, 下载次数: 102)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

板凳
ID:269211 发表于 2018-1-27 17:24 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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