标题: lcd1602显示问题 [打印本页]
作者: qq821013112 时间: 2017-10-17 12:10
标题: lcd1602显示问题
麻烦各位大佬帮我看看是哪里出问题了,以下是程序
#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;
}
}
}
}
}
-
QQ截图20171017120720.png
(5.54 KB, 下载次数: 42)
仿真开始前段时间
-
QQ截图20171017120934.png
(4.04 KB, 下载次数: 38)
走一段时间就变这样了
作者: yzwzfyz 时间: 2017-10-17 19:33
当出现问题时,走单步运行,看看为何不显示。
作者: zl2168 时间: 2017-10-17 21:21
本帖最后由 zl2168 于 2017-10-17 21:22 编辑
实例67 LCD1602显示屏显示。
若需改变1602显示内容,只须将需显示的内容用ASCII码写入显示数组,即可。
实例61 LCD1602显示屏显示.rar
(49.26 KB, 下载次数: 3)
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者: usb123 时间: 2017-10-17 22:28
找一个别人好的历程,,对比一下,,看看自己的为什么没有显示出来,一步一步的找问题
作者: autoauto 时间: 2017-10-18 05:53
不要光仿真,实际板子运行下
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |