找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1338|回复: 5
收起左侧

STC15单片机驱动1602每次下载程序后,显示结果不一样

[复制链接]
ID:614901 发表于 2020-7-25 17:33 | 显示全部楼层 |阅读模式
用stc15f2k60s2写了个1602驱动,然后程序不做任何更改直接源文件下载进去,显示的内容都不一样是怎么回事?,有时候下载下去又直接正常
51hei图片_20200725172710.jpg 51hei图片_20200725172719.jpg

这是怎么回事?
  1. void main()
  2. {


  3.         Init_CPP();
  4.         Init_1602();
  5.         Write_string(1,1,"test ok");
  6.         while(1)
  7.         {
  8.                 sprintf(display,"time:%02d",dd);
  9.                 Write_string(0,0,display);

  10.         }
  11. }
复制代码
  1. bit CheckBusy()
  2. {
  3.         
  4.         P=0xff;
  5.         E=0;
  6.         RS=0;
  7.         RW=1;
  8.         E=1;
  9.         _nop_();
  10.         _nop_();
  11.         _nop_();
  12.         _nop_();
  13.         _nop_();        
  14.         dd=P0;
  15.         
  16.         E=0;
  17.         return(bit)(dd&0x80);
  18. }

  19. void Write_dat(unsigned char dat)
  20. {
  21.         while(CheckBusy());
  22. DelayMs();                                //这是个5ms的延时,如果不加这个显示就是乱码
  23. DelayMs();        
  24.         E=0;
  25.         RS=1;
  26.         RW=0;
  27.         _nop_();
  28.         _nop_();
  29.                 E=1;

  30.         P0=dat;
  31.         _nop_();
  32.         _nop_();
  33.         _nop_();
  34.         _nop_();
  35.                 _nop_();
  36.         E=0;

  37. }

  38. void Write_com(unsigned char com)
  39. {
  40.         while(CheckBusy());
  41. DelayMs();
  42.         DelayMs();
  43.         E=0;
  44.         RS=0;
  45.         RW=0;
  46.         _nop_();
  47.         _nop_();
  48.         E=1;

  49.         P0=com;
  50.         _nop_();
  51.         _nop_();
  52.         _nop_();
  53.         _nop_();        
  54.         _nop_();
  55.         E=0;
  56. }

  57. void Write_string(unsigned char x,unsigned char y,unsigned char*s)
  58. {
  59.         if(y==0)
  60.                 Write_com(0x80+x);
  61.         else
  62.                 Write_com(0xc0+x);
  63.         while(*s)
  64.         {
  65.                 Write_dat(*s);
  66.                 s++;
  67.         }
  68. }
复制代码



回复

使用道具 举报

ID:213173 发表于 2020-7-26 07:09 | 显示全部楼层
可能是1602驱动码时序没有调整好,处于临界状态。也可能硬件连接不可靠。
回复

使用道具 举报

ID:614901 发表于 2020-7-26 16:11 | 显示全部楼层
wulin 发表于 2020-7-26 07:09
可能是1602驱动码时序没有调整好,处于临界状态。也可能硬件连接不可靠。

找到原因了,感谢赐教。就是时序问题,还有个就是判忙函数里,P0口少打了个零,不过奇怪的是编译时居然没有报错
回复

使用道具 举报

ID:584814 发表于 2020-7-28 00:39 | 显示全部楼层
判忙函数基本可以不用的。
回复

使用道具 举报

ID:807712 发表于 2020-7-28 08:02 | 显示全部楼层
lm9417 发表于 2020-7-26 16:11
找到原因了,感谢赐教。就是时序问题,还有个就是判忙函数里,P0口少打了个零,不过奇怪的是编译时居然没 ...

编译是报你语法错误,你运行结果是不会干涉你的,那怕你掉了判忙语句,他也不可能提示你
回复

使用道具 举报

ID:146782 发表于 2020-7-28 08:42 | 显示全部楼层
你这是忙信号没判断对
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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