LCD1602没有显示哦,程序一直在忙等待,为什么会这样呀?

[复制链接]
7080|6
 楼主| gaoyuaug 发表于 2011-9-20 08:41 | 显示全部楼层 |阅读模式
//-------------------------------------------       
        #include<reg52.h>
        #include<intrins.h>

        #define dataport P1
        #define uchar unsigned char
        #define uint unsigned int
       
//        sbit RS =P2^4;
//        sbit RW =P2^3;
//        sbit En =P2^2;
        sbit RS=P2^1;
        sbit RW=P2^0;
        sbit En=P2^2;
        void delay_ms(uchar time)
        {
                uchar i,j;
                for(i=time;i>0;i--)
                {
                        for(j=125;j>0;j--)
                        {;}
                }
        }
//-----------------------------------------        忙等
        void read_bf(void)
        {
                En=0;
                RS=0;
                RW=1;
                dataport=0xff;
                _nop_();
                _nop_();
                En=1;
                while(dataport&0x80) ;
                En=0;
         }
//-----------------------------------------写命令
         void write_command(uchar command)
         {
                 read_bf();
                RW=0;
                RS=0;
                En=1;       
                dataport=command;
                _nop_();
                _nop_();
                En=0;
         }
//------------------------------------------写数据
         void write_data(uchar data_)
         {
                 read_bf();
                RW=0;
                RS=1;
                En=1;
                dataport=data_;       
                _nop_();
                _nop_();
                En=0;
         }
//-------------------------------------------初始化
         void init_lcd(void)
         {                                  
                 delay_ms(15);
                 write_command(0x38);
                delay_ms(5);
                write_command(0x38);
                delay_ms(5);
                write_command(0x38);

                read_bf();
                write_command(0x38);
                read_bf();
                write_command(0x08);
                read_bf();
                write_command(0x01);
                read_bf();
                write_command(0x06);
                read_bf();
                write_command(0x0c);
        }

         void lcd_disp(uchar addr,uchar a_data)
         {
                 write_command(addr);
                write_data(a_data);
         }       
//-------------------------------------------主函数
         void main()
         {
                 uchar ch[8]= {0x53,0x54,0x43,0x38,0x39,0x43,0x35,0x32};
                uchar i;
                init_lcd();
                for(i=0;i<7;i++)
                lcd_disp(0x80+i,ch[i]) ;
                while(1);
        }
//-------------------------------------------
yyx_200 发表于 2011-9-24 09:08 | 显示全部楼层
如果程序没问题,就要去查电压,在上电后一般1602会有点阵显示,如果没有,可能是电压不匹配,1602在5v下工作,你的MCU可能是3.3v
 楼主| gaoyuaug 发表于 2011-9-26 12:57 | 显示全部楼层
哦,谢谢,我把程序的忙待改成10MS延时,就可以了!
woyaochenggong 发表于 2011-9-27 11:41 | 显示全部楼层
对的,有延时就可以了
shuaijing 发表于 2011-9-29 09:06 | 显示全部楼层
延时不能没考虑在内
logokfu 发表于 2012-4-24 18:37 | 显示全部楼层
3# gaoyuaug

我也成功了,:lol
frlop 发表于 2012-4-24 20:29 | 显示全部楼层
怎么会,我从来都是延时5ms的啊。也没问题啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:改掉不良习惯,充实提高自已!

31

主题

188

帖子

0

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