📄 main.c
字号:
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9
sbit fout=P1^0;
uchar Dis_2;//定义十位
uchar Dis_1; //定义个位
uchar Dis_4;//定义秒十位
uchar Dis_3; //定义秒个位
uchar flag_second;
uchar ToutCount;
uint f;
void delay(uchar cnt)
{
while(--cnt);
}
void reflash()
{
Dis_1=Dis_2=Dis_3=Dis_4=0;
if(f<10000)
{
Dis_4=0x80;
}
else
{
f/=10;
Dis_3=0x80;
}
Dis_1|=tab[f%10]; //个位显示处理
f/=10;
Dis_2|=tab[f%10];//十位显示处理
f/=10;
Dis_3|=tab[f%10]; //百位显示处理
f/=10;
Dis_4|=tab[f%10];//千位显示处理
}
void display()
{
P2=0xfe;
P0=Dis_4;//显示秒十位
delay(0xff);//短暂延时
P2=0xfd;
P0=Dis_3; //显示秒个位
delay(0xff);
P2=0xfb;
P0=Dis_2;//显示十位
delay(0xff);//短暂延时
P2=0xf7;
P0=Dis_1; //显示个位
delay(0xff);
return;
}
main()
{
ToutCount=0;
TMOD = 0x52; //T1为计数器,方式一,T0为定时器,方式2
TH0 = 6; //定时250us
TL0 = 6;
TH1=0;
TL1=0;
TR0=1; //启动定时计数器
TR1=1;
ET0 = 1;
ET1 = 1;
EA = 1; //开中断
flag_second=1;
while(1)
{
while(flag_second)
{
fout=~fout;
display();
}
reflash();
flag_second=1;
}
}
void timer0() interrupt 1 //定时器0中断服务程序
{
static uint count=0;
count++;
if(count == 4000)
{
TR1 = 0;
TR0 = 0;
f=((int)ToutCount<<16)+((int)TH1<<8)+TL1;
TH1=0;TL1=0;
ToutCount=0;
TR1=1;
count = 0;
flag_second = 0;
TR0 = 1;
}
}
void timer1() interrupt 3 //定时器1中断服务程序
{
ToutCount++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -