求大神帮忙,关于LCD1602里E(使能端)的问题

[复制链接]
4220|4
 楼主| i足以 发表于 2013-4-14 20:13 | 显示全部楼层 |阅读模式
在关于E的问题,/*?????*/处发现如果E=1在RS,RW之前的话会出现数据丢失,而如果E在两者之后就没问题了。可是我查了很多资料都没看到E的先后问题,求解
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit RS=P2^0;
  6. sbit RW=P2^1;
  7. sbit E=P2^2;
  8. sbit BF=P0^7;
  9. uchar code string[]={"HELLO.WORLD"};
  10. /*****************************************************
  11. 函数功能:延时若干毫秒
  12. 入口参数:n
  13. ***************************************************/
  14. void delay1ms(uchar i)
  15. {
  16.         uchar j;
  17.         while(i--)
  18.         {
  19.                 for(j=0;j<115;j++);
  20.         }
  21. }
  22. /*****************************************************
  23. 函数功能:判断液晶模块的忙碌状态
  24. 返回值:result。result=1,忙碌;result=0,不忙
  25. ***************************************************/
  26. bit busy_lcd()
  27. {
  28.         bit result;
  29.         E=1;           /*大大问题??????????*/
  30.         RS=0;
  31.         RW=1;
  32.         /*E=1;大大问题*/
  33.         _nop_();
  34.         _nop_();
  35.         _nop_();
  36.         _nop_();
  37.         result=BF;
  38.         E=0;
  39.         return result;
  40. }
  41. /*****************************************************
  42. 函数功能:将模式设置指令或显示地址写入液晶模块
  43. 入口参数:dictate
  44. ***************************************************/
  45. void com_lcd(uchar com)
  46. {
  47.         while(busy_lcd()==1);
  48.        
  49.         RS=0;
  50.         RW=0;
  51.         E=0;
  52.         _nop_();
  53.         _nop_();
  54.         _nop_();
  55.         P0=com;
  56.         _nop_();
  57.         _nop_();
  58.         _nop_();
  59.         _nop_();
  60.         E=1;
  61.         _nop_();
  62.         _nop_();
  63.         _nop_();
  64.         _nop_();
  65.         E=0;

  66. }

  67. /*****************************************************
  68. 函数功能:指定字符显示的实际地址
  69. 入口参数:x
  70. ***************************************************/
  71. void addrrom_lcd(uchar add)
  72. {
  73.         com_lcd(0x80|add);
  74.         delay1ms(10);
  75. }
  76. /*****************************************************
  77. 函数功能:将数据(字符的标准ASCII码)写入液晶模块
  78. 入口参数:y(为字符常量)
  79. ***************************************************/
  80. void writer_lcd(uchar dat)
  81. {
  82.         while(busy_lcd()==1);
  83.        
  84.         RS=1;
  85.         RW=0;
  86.         E=0;
  87.         P0=dat;
  88.         _nop_();
  89.         _nop_();
  90.         _nop_();
  91.         _nop_();
  92.         E=1;
  93.         _nop_();
  94.         _nop_();
  95.         _nop_();
  96.         _nop_();
  97.         E=0;
  98. }
  99. /*****************************************************
  100. 函数功能:对LCD的显示模式进行初始化设置
  101. ***************************************************/
  102. void init_lcd()
  103. {
  104.         delay1ms(15);
  105.         com_lcd(0x38);
  106.         delay1ms(5);
  107.         com_lcd(0x38);
  108.         delay1ms(5);
  109.         com_lcd(0x38);
  110.         delay1ms(5);
  111.         com_lcd(0x01);
  112.         delay1ms(5);
  113.         com_lcd(0x06);
  114.         delay1ms(5);
  115.         com_lcd(0x0f);
  116.         delay1ms(5);

  117. }
  118. void main()
  119. {
  120.         uchar i;
  121.         init_lcd();
  122.         delay1ms(10);
  123.         while(1)
  124.         {
  125.                  i=0;
  126.                  com_lcd(0x01);
  127.                 delay1ms(2);
  128.                  addrrom_lcd(0x00);
  129.                  delay1ms(2);
  130.                  while(string[i]!='\0')
  131.                  {
  132.                          writer_lcd(string[i]);
  133.                         delay1ms(100);
  134.                         i++;
  135.                  }
  136.                  while(1);
  137.         }       
  138. }
hlzhaowu 发表于 2013-4-14 23:02 | 显示全部楼层
建议楼主那种方式行得通就用那种方式好了
rabbitws1987 发表于 2014-3-8 21:31 | 显示全部楼层
说明书上的E时序有问题,能显示就好了,不必纠结于资料怎么说
ningling_21 发表于 2014-3-8 21:55 | 显示全部楼层
资料没错的话要严格按照资料的时序来写程序...
天风立马 发表于 2014-3-9 22:35 | 显示全部楼层
估计你没满足时序要求。你可以试一下放前面再加个延时,如果也没问题,那真是你没按照时序写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部