找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LCD1602可以在仿真显示出来,插到我的单片机上就只亮,不显示字符

[复制链接]
跳转到指定楼层
楼主
ID:316073 发表于 2018-5-20 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>

  2. #define LCD1602_DB P0

  3. sbit LCD1602_RS = P2^6;
  4. sbit LCD1602_RW = P2^5;
  5. sbit LCD1602_E  = P2^7;

  6. typedef unsigned int uint;
  7. typedef unsigned char uchar;

  8. void Delay10us(uint i)         
  9. {
  10.         while(i--);
  11. }

  12. /* lcd1602写入数据/命令(i=1/i=0) */
  13. void Write_Cmd_Dat(uchar i,uchar dat)   
  14. {
  15.         LCD1602_RS = i;
  16.         LCD1602_RW = 0;        
  17.         LCD1602_E  = 1;
  18.         LCD1602_DB = dat;
  19.         Delay10us(500);                 //不能少!!
  20.         LCD1602_E  = 0;
  21. }


  22. void LCD1602Init()
  23. {
  24.         Write_Cmd_Dat(0,0x38);
  25.         Write_Cmd_Dat(0,0x0c);
  26.         Write_Cmd_Dat(0,0x06);
  27.         Write_Cmd_Dat(0,0x01);
  28. }


  29. /* 设置LCD1602光标位置 */
  30. void LcdSetCursor(uchar x,uchar y)
  31. {
  32.         uchar addr;

  33.         if(y==0)
  34.                 addr = 0x00 + x;
  35.         else
  36.                 addr = 0x40 + x;

  37.         Write_Cmd_Dat(0,addr |0x80);
  38. }

  39. /* LCD1602显示字符串 */
  40. void DisplayString(uchar *s)
  41. {
  42.         while(*s>0)
  43.         {
  44.                 Write_Cmd_Dat(1,*s);
  45.                 s++;
  46.         }
  47. }



  48. void main()
  49. {

  50.         char code string_1[] = "sadfsadf";
  51.         char code string_2[] = "   23";
  52.         LCD1602Init();
  53.         LcdSetCursor(0,0);
  54.         DisplayString(string_1);

  55.         LcdSetCursor(0,1);
  56.         DisplayString(string_2);

  57.         while(1);               
  58. }

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

使用道具 举报

沙发
ID:316073 发表于 2018-5-20 16:31 | 只看该作者
请问是哪里得问题呢
回复

使用道具 举报

板凳
ID:334285 发表于 2018-5-20 16:45 | 只看该作者
检查有无虚焊,有无短路情况

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:213173 发表于 2018-5-20 21:03 | 只看该作者
13067071271 发表于 2018-5-20 16:31
请问是哪里得问题呢

查延时程序是否与所用单片机适配
回复

使用道具 举报

5#
ID:329561 发表于 2018-5-21 09:04 | 只看该作者
你的程序的有问题,你应该根据LCD的DataSheet来写程序,根据LCD的时序图来对应程序。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:319019 发表于 2018-5-21 09:16 | 只看该作者
我老是看到有人写1602的程序总是没‘’检查是否忙碌“”这个函数,我还以为不写也可以,就特地去删除这个函数试试,结果出现一排方块。我是真的服,我看到没加的不止三次了。还有你的
/* LCD1602显示字符串 */while(*s>0)这样写不是死循环吗,能显示出吗?DisplayString(string_1);没加&编译没报错,我没写立刻报错.
        
  

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:329561 发表于 2018-5-23 16:53 | 只看该作者
zhdp 发表于 2018-5-21 09:16
我老是看到有人写1602的程序总是没‘’检查是否忙碌“”这个函数,我还以为不写也可以,就特地去删除这个函 ...

这个回帖明显有问题,忙信号检测可以加但是没有必要,只要加入一定的延迟即可不必那么麻烦的,忙检测对于高速器件单片机来说是必要的,但是51单片机的最大频率也就24MHz,我之前测试过,在两个数据写入不加延迟是可以正常显示的,也不用忙检测。
再解释下忙检测,是为了防止写一个信号的时候,这一个信号没有写完就开始写下一数据,造成错误才加入的忙检测。
我之前回复过这个问题,程序有问题,根据LCD1602D 的DATASHEET文档来编写程序。
(我的正确答案只有20黑币奖励,回答有问题的竟然奖励50黑币,我很不开心~)

评分

参与人数 1黑币 +90 收起 理由
admin + 90 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:329561 发表于 2018-5-23 17:01 | 只看该作者
本来想等着楼主回复,问我怎么改程序的,发现楼主不见了,那我把你的问题解释一下,你的数据输入之前应该满足建立时间的要求,数据先使能再写入数据怎么能满足建立时间的要求呢。你应该先把数据写入LCD延迟一段时间之后使能EN置1,再延迟一段时间后清0 EN

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:296970 发表于 2018-5-23 20:46 | 只看该作者
调一下电位器试试
回复

使用道具 举报

10#
ID:316073 发表于 2018-6-4 18:40 | 只看该作者
小黑不黑 发表于 2018-5-20 16:45
检查有无虚焊,有无短路情况

问题已经解决了  我发现我的液晶屏是4路的

回复

使用道具 举报

11#
ID:316073 发表于 2018-6-4 18:42 | 只看该作者
谢谢打家由于我是第一次发帖没能及时回复大家
下面是我把配置的代码改了就没问题了
void LcdInit()                                                  //LCD初始化子程序
{
        Write_Cmd_Dat(0,0x32);         //将8位总线转为4位总线
        Write_Cmd_Dat(0,0x28);         //在四位线下的初始化
        Write_Cmd_Dat(0,0x0c);  //开显示不显示光标
        Write_Cmd_Dat(0,0x06);  //写一个指针加1
        Write_Cmd_Dat(0,0x01);  //清屏
        Write_Cmd_Dat(0,0x80);  //设置数据指针起点
}
回复

使用道具 举报

12#
ID:316073 发表于 2018-6-4 18:44 | 只看该作者
xyzmk123 发表于 2018-5-23 17:01
本来想等着楼主回复,问我怎么改程序的,发现楼主不见了,那我把你的问题解释一下,你的数据输入之前应该满 ...

是的 我就是没有建立时间的要求 在adc0832这个芯片上吃了亏
这个lcd是为了做一个做单片机测电压的
回复

使用道具 举报

13#
ID:316073 发表于 2018-6-4 18:47 | 只看该作者
zhdp 发表于 2018-5-21 09:16
我老是看到有人写1602的程序总是没‘’检查是否忙碌“”这个函数,我还以为不写也可以,就特地去删除这个函 ...

谢谢你 我回去改了函数
回复

使用道具 举报

14#
ID:344884 发表于 2018-6-4 19:07 | 只看该作者
硬件本身有问题吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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