
刚刚用C语言写的单片机程序,帮忙看看哪里错了.
#include<reg52.h>sbitrs=P2^6;sbitrw=P2^5;sbitlcde=P2^7;unsignedcharcodetable[]="2013-...
#include<reg52.h>
sbit rs=P2^6;
sbit rw=P2^5;
sbit lcde=P2^7;
unsigned char code table[]="2013-02-11 Mon";
unsigned char code table1[]="00:00:00";
unsigned char num=0,num1=0,numb,hour,hour1,hour2,min,min1,min2,sec,sec1,sec2;
void delay(unsigned char c)
{
unsigned char a,b;
for(a=0;a<c;a++)
for(b=0;b<123;b++);
}
void wcmd(unsigned char cmd)
{
rs=0;
rw=0;
lcde=0;
delay(3);
lcde=1;
delay(3);
P0=cmd;
delay(3);
lcde=0;
delay(2);
}
void wdat(unsigned char dat)
{
rs=1;
rw=0;
lcde=0;
delay(3);
lcde=1;
delay(3);
P0=dat;
delay(3);
lcde=0;
delay(2);
}
void init()
{
wcmd(0x38);
wcmd(0x0e);
delay(5);
wcmd(0x80+1);
for(num=0;num<14;num++)
{
wdat(table[num]);
delay(5);
}
wcmd(0x80+0x40+4);
for(num1=0;num1<8;num1++)
{
wdat(table1[num1]);
delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numb++;
if(numb==18)
{
numb=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
hour2=hour%10;
hour1=hour/10;
wcmd(0x80+0x40+6);
wdat(0x30+hour2);
wcmd(0x80+0x40+5);
wdat(0x30+hour1);
}
min2=min%10;
min1=min/10;
wcmd(0x80+0x40+9);
wdat(0x30+min2);
wcmd(0x80+0x40+8);
wdat(0x30+min1);
}
sec2=sec%10;
sec1=sec/10;
wcmd(0x80+0x40+12);
wdat(0x30+sec2);
wcmd(0x80+0x40+11);
wdat(0x30+sec1);
}
}
void main()
{
init();
}
有没有高人,看看我写的LCD1602电子表 程序,写进去怎么数不走呢?只显示 00:00:00.。。 展开
sbit rs=P2^6;
sbit rw=P2^5;
sbit lcde=P2^7;
unsigned char code table[]="2013-02-11 Mon";
unsigned char code table1[]="00:00:00";
unsigned char num=0,num1=0,numb,hour,hour1,hour2,min,min1,min2,sec,sec1,sec2;
void delay(unsigned char c)
{
unsigned char a,b;
for(a=0;a<c;a++)
for(b=0;b<123;b++);
}
void wcmd(unsigned char cmd)
{
rs=0;
rw=0;
lcde=0;
delay(3);
lcde=1;
delay(3);
P0=cmd;
delay(3);
lcde=0;
delay(2);
}
void wdat(unsigned char dat)
{
rs=1;
rw=0;
lcde=0;
delay(3);
lcde=1;
delay(3);
P0=dat;
delay(3);
lcde=0;
delay(2);
}
void init()
{
wcmd(0x38);
wcmd(0x0e);
delay(5);
wcmd(0x80+1);
for(num=0;num<14;num++)
{
wdat(table[num]);
delay(5);
}
wcmd(0x80+0x40+4);
for(num1=0;num1<8;num1++)
{
wdat(table1[num1]);
delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numb++;
if(numb==18)
{
numb=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
hour2=hour%10;
hour1=hour/10;
wcmd(0x80+0x40+6);
wdat(0x30+hour2);
wcmd(0x80+0x40+5);
wdat(0x30+hour1);
}
min2=min%10;
min1=min/10;
wcmd(0x80+0x40+9);
wdat(0x30+min2);
wcmd(0x80+0x40+8);
wdat(0x30+min1);
}
sec2=sec%10;
sec1=sec/10;
wcmd(0x80+0x40+12);
wdat(0x30+sec2);
wcmd(0x80+0x40+11);
wdat(0x30+sec1);
}
}
void main()
{
init();
}
有没有高人,看看我写的LCD1602电子表 程序,写进去怎么数不走呢?只显示 00:00:00.。。 展开
3个回答
展开全部
主程序改一下:
void main()
{
init();
while(1);
}
void main()
{
init();
while(1);
}
更多追问追答
追问
先谢谢了,5点多就起来帮我解答。在凌晨2:00的时候我找出问题了,解决了。不过还有个问题 :
秒数到59后,分钟能进上去。分钟到59后,小时还是维持初始化的。另外,分钟变为01,而不是00,。。。
追答
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numb++;
if(numb==18)
{
numb=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
hour2=hour%10;
hour1=hour/10;
wcmd(0x80+0x40+6);
wdat(0x30+hour2);
wcmd(0x80+0x40+5);
wdat(0x30+hour1);
min2=min%10;
min1=min/10;
wcmd(0x80+0x40+9);
wdat(0x30+min2);
wcmd(0x80+0x40+8);
wdat(0x30+min1);
sec2=sec%10;
sec1=sec/10;
wcmd(0x80+0x40+12);
wdat(0x30+sec2);
wcmd(0x80+0x40+11);
wdat(0x30+sec1);
}
}

2025-08-18 广告
深圳市金创图电子设备有限公司,联系电话:18928465613。金创图是一家集研发、生产、营销、服务为一体的高新技术企业。致力于生产:管装烧录机,编带烧录机,托盘烧录机,通用型烧录机、自动一体化烧录机等;设备产品具有高速率、高刚性、高性能、...
点击进入详情页
本回答由小谢提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询