打印

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

[复制链接]
5658|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 | 只看该作者
对的,有延时就可以了

使用特权

评论回复
5
shuaijing| | 2011-9-29 09:06 | 只看该作者
延时不能没考虑在内

使用特权

评论回复
6
logokfu| | 2012-4-24 18:37 | 只看该作者
3# gaoyuaug

我也成功了,:lol

使用特权

评论回复
7
frlop| | 2012-4-24 20:29 | 只看该作者
怎么会,我从来都是延时5ms的啊。也没问题啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

31

主题

188

帖子

0

粉丝