📄 数字钟程序.txt
字号:
//MCU:AT89S51
//晶振:12M
#include "AT89X51.H"
unsigned char code numcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x40};
//数字及"-"共阴代码
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char dispbuf[8]={0,0,10,0,0,10,0,0};
unsigned char disp_bit_count;
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int tcount;
unsigned char disp_count;
/********1ms延时子程序***********/
delay_nms(unsigned int n)
{
unsigned int i;
unsigned char j;
for(i=0;i<n;i++)
for(j=0;j<120;j++)
; //空操作
}
void main(void)
{
TMOD=0x02; //使用定时器0,选择方式2(常数自动重装的8位定时器)
TH0=0x06; //保存数值,用于自动重装
TL0=0x06; //定时250uS初值
TR0=1; //开定时器0
ET0=1; //开定时器0溢出中断
EA=1; //开总中断
while(1)
{
if(P2_0==0)
{
delay_nms(10);
if(P2_0==0)
{
second++; //按键SW1按下,秒加1
if(second==60)
{
second=0;
}
dispbuf[0]=second%10;
dispbuf[1]=second/10;
while(P2_0==0);
}
}
if(P2_1==0)
{
delay_nms(10);
if(P2_1==0)
{
minite++; //按键SW2按下,分加1
if(minite==60)
{
minite=0;
}
dispbuf[3]=minite%10;
dispbuf[4]=minite/10;
while(P2_1==0);
}
}
if(P2_2==0) // 按键SW3按下,分加1
{
delay_nms(10);
if(P2_2==0)
{
hour++;
if(hour==24)
{
hour=0;
}
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
while(P2_2==0);
}
}
;
}
}
/**********T0250uS中断服务程序***************/
void t0(void) interrupt 1 using 0
{
tcount++;
disp_count++;
if(disp_count==8)
{
disp_count=0;
P0=numcode[dispbuf[disp_bit_count]];
P1=dispbitcode[disp_bit_count];
disp_bit_count++;
if(disp_bit_count==8)
{
disp_bit_count=0;
}
}
if(tcount==4000)
{
tcount=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
dispbuf[0]=second%10;
dispbuf[1]=second/10;
dispbuf[3]=minite%10;
dispbuf[4]=minite/10;
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -