标题: LCD1602显示为什么有问题 代码 图片如下 [打印本页]

作者: 李博文    时间: 2018-8-2 10:34
标题: LCD1602显示为什么有问题 代码 图片如下
  1. #include<reg52.h>

  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;

  4. sbit RS = P3^5;
  5. sbit RW = P3^6;
  6. sbit EN = P3^4;
  7. //判断液晶显示是否忙
  8. void Read_Busy()
  9. {
  10.    uchar busy;
  11.    P0 = 0xff;
  12.    RS = 0;
  13.    RW = 1;
  14.    
  15.    do{
  16.       EN = 1;
  17.       busy = P0;
  18.       EN = 0;
  19.    
  20.    }while(busy & 0x80);//判断 如果为0允许读写 则跳出循环
  21. }
  22. //写入一个字节的指令
  23. void Writer_cmd(uchar cmd)
  24. {
  25.     Read_Busy();
  26.           RS = 0;
  27.         RW = 0;
  28.         P0 = cmd;
  29.         EN = 1;
  30.         EN = 0;
  31. }
  32. //写入一个字节的数据
  33. void Writer_dat(uchar dat)
  34. {
  35.    Read_Busy();
  36.    RS = 1;
  37.    RW = 0;
  38.    P0 = dat;
  39.    EN = 1;
  40.    EN = 0;
  41. }


  42. void main()
  43. {
  44.   
  45.   
  46.   Writer_cmd(0x38);//设置16*2显示
  47.   Writer_cmd(0x0c);//开显示 显示光标 光标闪烁
  48.   Writer_cmd(0x06);//地址指针加一 整屏显示不移动
  49.   Writer_cmd(0x80);
  50.   Writer_cmd(0x01);        //清屏
  51.   Writer_dat(0x48);

  52.   while(1);
  53.                          
  54. }
复制代码



程序编译也没错误

捕获.PNG (11.26 KB, 下载次数: 40)

捕获.PNG

作者: 李博文    时间: 2018-8-2 11:20
程序的编译一直没问题 仿真一直显示P
作者: 飞翔的Cat    时间: 2018-8-2 12:07
这个和你单片机p0.0-p0.7口的电平有关吧?

作者: 杨雪飞    时间: 2018-8-2 12:21
你只写了个0x48数据,你还想显示什么?
作者: 杨雪飞    时间: 2018-8-2 12:35
0x48应该显示个大写的H就对了
作者: 杨雪飞    时间: 2018-8-2 12:37
0x05
是P
作者: 李博文    时间: 2018-8-2 13:44
杨雪飞 发表于 2018-8-2 12:35
0x48应该显示个大写的H就对了

显示不了p
作者: 李博文    时间: 2018-8-2 13:45
杨雪飞 发表于 2018-8-2 12:35
0x48应该显示个大写的H就对了

不是 显示不了H一直显示p
作者: CDYSZ    时间: 2018-8-2 14:27
上面正解,你再写一个0X30,看下是不是显示0

作者: 李博文    时间: 2018-8-2 16:30
杨雪飞 发表于 2018-8-2 12:37
0x05
是P

找到了问题  程序一直卡在 判忙哪里 时序出了问题  
作者: omikeai    时间: 2018-8-2 17:05
1602手册里初始化开头记得是延时15ms,写指令38h,
作者: 杨雪飞    时间: 2018-8-2 19:05
李博文 发表于 2018-8-2 16:30
找到了问题  程序一直卡在 判忙哪里 时序出了问题

这个小测试程序好像不检测忙也可以,我看到好多都是没有检测忙的
作者: omikeai    时间: 2018-8-2 22:18
前面几个可以不检测忙,但初始化要按照手册里写的,你现在是初始化里没有写这6行代码
作者: 李博文    时间: 2018-8-3 09:28
杨雪飞 发表于 2018-8-2 19:05
这个小测试程序好像不检测忙也可以,我看到好多都是没有检测忙的

不检测忙是有延时的 我没验延时 就检测忙
作者: zl2168    时间: 2018-8-3 21:08
本帖最后由 zl2168 于 2018-8-3 21:53 编辑

实例67  LCD1602显示屏显示
Proteus仿真一下,确认有效。
实例61 LCD1602显示屏显示.rar (49.26 KB, 下载次数: 8)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1。书中电路和程序设计有详细说明,程序语句条条有注解。

作者: 暗双魂    时间: 2018-8-5 20:37
绝对是判忙程序出了问题,换成while(busy & 0x80==1);




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