[AVR单片机] atmega16断电后再上电1602液晶无显示

[复制链接]
 楼主| zage2009 发表于 2011-7-28 15:54 | 显示全部楼层 |阅读模式
本帖最后由 zage2009 于 2011-10-9 12:36 编辑

写了个操作1602显示字符的程序,烧写后运行正常,不过断电后,再上电,1602就无显示内容,需要按一下复位键后,液晶才显示,请问哪里没有设置好?程序如下
  1. #include<avr/io.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. void delay(uint z)
  5. {
  6.         uint i,j;
  7.         for(i=z;i>0;i--)
  8.                 for(j=1140;j>0;j--);
  9. }
  10. void write_com(uchar com)
  11. {
  12.         PORTA&=~(1<<4);//lcdrs=0;
  13.         PORTB=com;
  14.         delay(5);
  15.         PORTA|=(1<<6);//lcden=1
  16.         delay(5);
  17.         PORTA&=~(1<<6);//lcden=0;
  18. }
  19. void write_data(uchar data)
  20. {
  21.         PORTA|=(1<<4);//lcdrs=1;
  22.         PORTB=data;
  23.         delay(5);
  24.         PORTA|=(1<<6);//lcden=1;
  25.         delay(5);
  26.         PORTA&=~(1<<6);//lcden=0;
  27. }
  28. void init(void)
  29. {
  30.         DDRA=0xff;
  31.         DDRB=0xff;
  32.         PORTA&=~(1<<5);//lcdwr=0;
  33.         PORTA&=~(1<<6);//        lcden=0;
  34.         write_com(0x38);
  35.         write_com(0x0e);
  36.         write_com(0x06);
  37.         write_com(0x01);
  38.         write_com(0x80);
  39. }
  40. int main(void)
  41. {
  42.         uchar num;
  43.         const  char * p="I like mcu";        
  44.         init();
  45.         while(1)
  46.         {
  47.                 while(*p)
  48.                 {
  49.                         write_data(*p);
  50.                         delay(30);
  51.                         p++;
  52.                 }        
  53.         }        
  54. }
selfstudy 发表于 2011-7-28 21:14 | 显示全部楼层
在   PORTA&=~(1<<6);//lcden=0; 后延时 5ms试试。。
 楼主| zage2009 发表于 2011-7-29 07:56 | 显示全部楼层
2# selfstudy 改了以后,可以了,看来还是液晶的时序问题。
lixiaoxu2meng 发表于 2011-8-1 16:00 | 显示全部楼层
2# selfstudy
为什么 加延时呢
joing1999 发表于 2011-8-5 10:21 | 显示全部楼层
液晶小知识
RST脚,复位脚。
一般上电后,先拉低300MS,再拉高300MS,然后再一直保持高电平进行初始化。
这是标准的液晶复位流程。
如果没有复位脚,也建议客户上电后延时500MS再初始化。
我是做液晶的
欢迎交流
QQ1143946234

评分

参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!

查看全部评分

 楼主| zage2009 发表于 2011-8-7 09:00 | 显示全部楼层
5# joing1999

很对,只有在初始化之前延时一段时间,实验板上电后液晶才有显示,我只是延时了五六十毫秒也可以显示。
 楼主| zage2009 发表于 2011-10-9 12:34 | 显示全部楼层

RE: atmega16断电后再上电1602液晶无显示

液晶小知识
RST脚,复位脚。
一般上电后,先拉低300MS,再拉高300MS,然后再一直保持高电平进行初始化。
这是标准的液晶复位流程。
如果没有复位脚,也建议客户上电后延时500MS再初始化。
我是做液晶的
欢迎交流
QQ1 ...
joing1999 发表于 2011-8-5 10:21


最近在万用板上焊了最小系统,只引出了32个IO(atmega16),又碰到这个问题了。发现确实只有在液晶初始化函数之前延时500ms左右,才能使1602液晶断电后再上电能够显示出数据。在写命令和写数据的PORTA&=~(1<<6);//lcden=0;只延时5ms没有用。
小虾520 发表于 2013-4-19 16:06 | 显示全部楼层
恩,我也哟那样的情况
qin552011373 发表于 2013-4-20 09:31 | 显示全部楼层
注意看datasheet的时序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

36

帖子

0

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