求指教啊(关于1602液晶显示时钟)
本帖最后由 水若人 于 2013-7-23 21:26 编辑#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rw=P2^5;
sbit rs=P2^6;
sbit lcde=P2^7;
uchar code table[]="2013-07-23";
uchar code table1[]="23:59:50";
uchar num,cc,shi,fen,miao;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write(uchar aa)
{
rw=0;
rs=0;
lcde=0;
P0=aa;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void write1(uchar bb)
{
rw=0;
rs=1;
lcde=0;
P0=bb;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void sfm(uchar dd,uchar ee)
{
uchar shi,ge;
shi=ee/10;
ge=ee%10;
write(0x80+0x43+dd);
write1(0x30+shi);
write1(0x30+ge);
}
void init()
{
lcde=0;
write(0x0c);
write(0x38);
write(0x06);
write(0x01);
write(0x83);
for(num=0;num<10;num++)
write1(table);
write(0x80+0x44);
for(num=0;num<8;num++)
write1(table1);
TMOD=0x01;
TH0=(65036-50000)/256;
TL0=(65036-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if(cc==20)
{
cc=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
sfm(1,shi);
}
sfm(4,fen);
}
sfm(7,miao);
}
}
}
void time() interrupt 1
{
TH0=(65036-50000)/256;
TL0=(65036-50000)%256;
cc++;
}
//为什么 硬件仿真时 秒不是从50开始走,而是从0开始了,,(分钟和时也是)。。。。。求指点!!(好像这个初始值没有用,怎么改呀?) 这个肯定是从零开始啦,你想从五十开始,那你就在那个显示的位置相应的加多那个需要多加的数字。 zhong296887142 发表于 2013-7-23 21:44 static/image/common/back.gif
这个肯定是从零开始啦,你想从五十开始,那你就在那个显示的位置相应的加多那个需要多加的数字。 ...
程序怎么改呢? 水若人 发表于 2013-7-24 08:15 static/image/common/back.gif
程序怎么改呢?
给秒一个50的初值,它就从50开始工作了了 水若人 发表于 2013-7-24 08:15 static/image/common/back.gif
程序怎么改呢?
把miao赋50给它,就可以啦。你程序里面的数组只是初始化时显示50,但个一秒后,就会把miao这个值重新显示在液晶上,而你这个miao默认是0
页:
[1]