📄 program_2.c
字号:
#include<at89x52.h>
#define uint unsigned int
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
uint i=0,j=0,sum=100;
uint led[10]={0xbf,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
bit k=1;
void disp0(void);
void disp1(void);
void disp2(void);
void disp3(void);
void ledwork(void);
void main()
{
TMOD=0x01; /*定义工作模式为1*/
EA=1;
ET0=1;
TR0=1;
TH0=0xf1; /*设置初始值,每隔4ms一次中断*/
TL0=0x90;
while(1)
{
if(sum>0)
{
ledwork();
if(j==125) /*每隔0.5s,总数减一*/
{
j=0;
sum=sum-1;
}
}
if(sum==0&&k==1)
ledwork();
if(sum==0&&k==0) /* 数码管熄灭1s*/
P1=0xff;
if(j==250) /*每隔1s,k的状态变换一次,用来控制数码管工作还是熄灭*/
{
k=!k;
j=0;
}
}
}
void timer0(void) interrupt 1 using 1
{
TH0=0xf1;
TL0=0x90;
i++;
i=i%4;
j++;
}
void disp0(void) /* 数码管0工作函数,控制千位**/
{
P0=led[0];
led0=0;
led3=1;
}
void disp1(void) /* 数码管1工作函数,控制百位**/
{
if(sum>99)
P0=led[1];
else P0=led[0];
led1=0;
led0=1;
}
void disp2(void) /* 数码管2工作函数,控制十位**/
{
uint s=0;
s=sum/10%10;
P0=led[s];
led2=0;
led1=1;
}
void disp3(void) /* 数码管3工作函数,控制个位*/
{
uint g=0;
g=sum%10;
P0=led[g];
led2=1;
led3=0;
}
void ledwork(void) /*数码管工作函数*/
{
if(i==0) disp0();
if(i==1) disp1();
if(i==2) disp2();
if(i==3) disp3(); /*误差 4.023-4.00=0.023ms 版权所有2007-love21g*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -