
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
uchar shi,fen,miao
uchar time
void delay(uint x)
{
uint y
for(x>0x--)
{
for(y=0y<124y++)
}
}
void display(uchar shi,uchar fen,uchar miao)
{
P2=0 //位码
P0=(tab[shi/10]) //段码
delay(2)
P2=1
P0=(tab[shi%10])
delay(2)
P2=2 //位码
P0=0x40 //段码
delay(2)
P2=3 //位码
P0=(tab[fen/10]) //段码
delay(2)
P2=4
P0=(tab[fen%10])
delay(2)
P2=5 //位码
P0=0x40 //段码
delay(2)
P2=6 //位码
P0=(tab[miao/10]) //段码
delay(2)
P2=7
P0=(tab[miao%10])
delay(2)
}
void main()
{
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
EA=1
ET0=1
TR0=1
while(1)
{
if(time==20)
{
time=0
miao++
if(miao==60)
{
miao=0
fen++
if(fen==60)
{
fen=0
shi++
if(shi==24)
shi=0
}
}
}
display(shi,fen,miao)
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
time++
}
/*还有什么不明白继续追加*/
程序就不写了,因为每个人有每个人的写作风格,我给你的程序,你不一定能理解我的思路,拿一个现成的程序让你看,那最终不是你自己的,所以要让自己弄懂,就给你一个思路,你就把程序做出来,那才是自己的东西,这里就给你一个思路把0……9的数码显示代码存在ROM里,用tab:db……(字型码)来存,做一段1秒的定时程序,在程序的初始化时要做几个计数器,分别对时分秒计数,先从秒开始,设初始值为10,然后是“分”60个,最后一个是“时”也是60,开中断,启动1秒定时器,一秒到了以后,把1的字型码发送到串行口,然后秒计数器减1,在启动1秒定时,到了后,把2字型码发送出去……直到减为0,个位进1,将秒的“十”位字型码发送到出去,分计数器从60开始减计数,这里要注意,定时器不能停,要一直的循环执行1秒定时,采用中断方式,分进位后,再对时计数器减计数,就象这样,不停的减计数,直至溢出后将相应的代码发送出去,基本思路就是这样,关键的就是几个计数器的控制,要主要完成了一个周期后,要重新赋值
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)