找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2435|回复: 4
收起左侧

lcd1602显示问题

[复制链接]
ID:240203 发表于 2017-10-17 12:10 | 显示全部楼层 |阅读模式
麻烦各位大佬帮我看看是哪里出问题了,以下是程序
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit BF=P0^7;
uint t,f,f_g,f_s,m,m_g,m_s,s,s_g,s_s;
void delay1ms()
{
        uchar i,j;
        for(i=0;i<10;i++)
                for(j=0;j<33;j++);       
}
void delay(uchar n)
{
        uchar i;
        for(i=0;i<n;i++)
                delay1ms();
}
uchar BusyTest(void)
{
        bit result;
        RS=0;RW=1;E=1;
        _nop_();_nop_();_nop_();_nop_();
        result=BF;
        E=0;
        return result;
}
void WriteInstruction(uchar dictate)
{
         while(Busytest()==1);
         RS=0;RW=0;E=0;
         _nop_();_nop_();
         P0=dictate;
         _nop_();_nop_();_nop_();_nop_();
         E=1;
         _nop_();_nop_();_nop_();_nop_();
         E=0;
}
void WriteAddress(uchar x)
{
        WriteInstruction(x+0x80);       
}
void WriteData(uchar y)
{
        while(Busytest()==1);
        RS=1;RW=0;E=0;
        P0=y;
        _nop_();_nop_();_nop_();_nop_();
        E=1;
        _nop_();_nop_();_nop_();_nop_();
        E=0;
}
void LcdInitiate()
{
        delay(15);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x0c);
        delay(5);
        WriteInstruction(0x06);
        delay(5);
        WriteInstruction(0x01);
        delay(5);
}
void Time0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t++;
}
void init0()
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;          
        ET0=1;
        TR0=1;       
}
void main()
{
        init0();
        LcdInitiate();
                m=58;
        while(1)
        {
       
                WriteAddress(0x02);
                WriteData('B');
        WriteAddress(0x03);
        WriteData('e');
                WriteAddress(0x04);
                WriteData('i');
        WriteAddress(0x05);
        WriteData('J');
                WriteAddress(0x06);
                WriteData('i');
        WriteAddress(0x07);
        WriteData('n');
                WriteAddress(0x08);
                WriteData('g');
        WriteAddress(0x0a);
        WriteData('T');
                WriteAddress(0x0b);
                WriteData('i');
        WriteAddress(0x0c);
        WriteData('m');
                WriteAddress(0x0d);
                WriteData('e');
        WriteAddress(0x45);
        WriteData(':');
                WriteAddress(0x48);
                WriteData(':');
                m_s=m/10;
                m_g=m%10;
                WriteAddress(0x4a);
                WriteData(0x30+m_g);
                WriteAddress(0x49);
                WriteData(0x30+m_s);
                        f_s=f/10;
                        f_g=f%10;
                        WriteAddress(0x47);
                        WriteData(0x30+f_g);
                        WriteAddress(0x46);
                        WriteData(0x30+f_s);
                s_s=s/10;
                s_g=s%10;
                WriteAddress(0x44);
                WriteData(0x30+s_g);
                WriteAddress(0x43);
                WriteData(0x30+s_s);
                if(t==5)
                {
                        t=0;
                        m++;
                        if(m==60)
                        {
                                f++;
                                m=0;
                                if(f==60)
                                {
                                        s++;
                                        f=0;
                                }
                        }               
                }
        }
}

仿真开始前段时间

仿真开始前段时间

走一段时间就变这样了

走一段时间就变这样了
回复

使用道具 举报

ID:123289 发表于 2017-10-17 19:33 | 显示全部楼层
当出现问题时,走单步运行,看看为何不显示。
回复

使用道具 举报

ID:111634 发表于 2017-10-17 21:21 | 显示全部楼层
本帖最后由 zl2168 于 2017-10-17 21:22 编辑

实例67  LCD1602显示屏显示。
若需改变1602显示内容,只须将需显示的内容用ASCII码写入显示数组
,即可。
实例61 LCD1602显示屏显示.rar (49.26 KB, 下载次数: 3)
1602.jpg
Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

ID:166645 发表于 2017-10-17 22:28 | 显示全部楼层
找一个别人好的历程,,对比一下,,看看自己的为什么没有显示出来,一步一步的找问题
回复

使用道具 举报

ID:240443 发表于 2017-10-18 05:53 | 显示全部楼层
不要光仿真,实际板子运行下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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