📄 clock2.c
字号:
#include <AT89X51.h>
unsigned char tc,sta=0x08; //软件延时单元,状态标志
bit flag1=0; //秒标志
unsigned char data dispbit,dispbuf[6]; //显示位,显示缓冲区
code unsigned char ds=20; //软件延时系数__20
unsigned char second,minute,hour; //秒,分,时
void delay (unsigned int count); //延时函数
void display(void); //显示函数
void key(void); //键处理函数
void sx(void); //送显示函数
void main(void) //主函数
{
TMOD=0x01; //定时器初始化
TH0=0x4C;
TL0=0x00;
IE=0x82; //开放定时器0中断
tc=ds; //软件延时初值
TR0=1; //启动定时器
P1=~sta; //初始状态
do{
key(); //键处理
display(); //显示
if(flag1==1) //有秒标志
{
flag1=0; //秒标志清零
second++; //秒加一
if (second==60)
{
second=0;
minute++; //分加一
if (minute==60)
{
hour++; //时加一
minute=0;
if (hour==24) hour=0;
}
}
sx(); //送显示
}
}while(1);
}
void timer0(void) interrupt 1 //定时器0中断服务函数
{
TH0=0x4C; //再送定时初值
tc--; //软件延时计数
if (tc==0) //中断20次
{
tc=ds; //再设软件延时初值
flag1=1; //建秒标志
}
}
void display(void) //显示函数
{
code unsigned char design[32]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,
0x01,0x09,0xFF,0x00,0x00,0x00,0x00,0x00,
0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,
0x00,0x08,0x31,0x00,0x00,0x00,0x00,0x00};
//字型码表
unsigned char i;
dispbit=0x01; //字位初值
for(i=0;i<6;i++) //扫描6位数码显示器
{
P0=design[dispbuf[i]]; //转换字型并输出
P2=dispbit; //输出字位
dispbit=dispbit+dispbit; //字位左移
delay (2); //延时
}
}
void key(void)
{
unsigned char keycode,k1;
k1=~(P3)&0x30; //读键
if ( k1 != 0) //有键按下
{
delay (20); //延时
keycode=~(P3)&0x30; //读键码
do //等待键释放
{
k1=~(P3)&0x30;
}
while (k1!=0);
switch (keycode)
{
case 0x10: //P3.4键,转换状态
{
sta=sta+sta;
if(sta==0x10) sta=0x01;
P1=~sta;
if(sta==0x08) IE=0x82; //开中断
else IE=0x00; //关中断
};
break;
case 0x20: //P3.5键,校时
{
switch (sta)
{
case 0x01:
{
second++;
if(second==60) second=0;
};
break;
case 0x02:
{
minute++;
if(minute==60) minute=0;
};
break;
case 0x04:
{
hour++;
if(hour==24) hour=0;
};
}
};
}
sx(); //送显示
}
}
void delay (unsigned int count)//延时函数
{
unsigned int i,j;
for (i=0;i<count;i++)
for (j=0;j<120;j++);
}
void sx (void) //送显示函数
{
dispbuf[5]=second%10; //秒个位
dispbuf[4]=second/10; //秒十位
dispbuf[3]=minute%10; //分个位
dispbuf[2]=minute/10; //分十位
dispbuf[1]=hour%10; //时个位
dispbuf[0]=hour/10; //时十位
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -