数字时钟(数码管显示)例如:23-59-23

2014-11-24 02:39:48 · 作者: · 浏览: 1

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char
#define uint unsigned int
static unsigned char count;
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9
uchar smg[8]; //定义缓冲区
uint minute=30,hour=12,second; //定义并且初始化值 12:30:00

void delay(unsigned int cnt)
{
while(--cnt);
}

void display( )
{


smg[0]=tab[hour/10]; //显示小时
smg[1]=tab[hour%10];
smg[2]=0x40; //显示"-"
smg[3]=tab[minute/10]; //显示分钟
smg[4]=tab[minute%10];
smg[5]=0x40; //显示"-"
smg[6]=tab[second/10]; //显示秒
smg[7]=tab[second%10];

}


void main()
{
uchar i;
TMOD |=0x01; //定时器0 10ms in 12M crystal 用于计时
TH0=0xd8; //初值
TL0=0xf0;
ET0=1;
TR0=1;
EA =1;


display();


while(1)
{
for(i=0;i<8;i++)//显示时间
{
P0=smg[i];
P2=i;
delay(100);
}

if (count==100)
{
count=0;
second++; display(); //秒加1
if(second==60)
{
second=0;
minute++; //分加1
if(minute==60)
{
minute=0;
hour++; //时加1
if(hour==24)
hour=0;
}

}

}


display();
}

}


void timer() interrupt 1
{

TH0=0xd8; //重新赋值
TL0=0xf0;
count++;


}