📄 counter60.c
字号:
/*60s计数器,每一分钟LED反相1次*/
//===声明区===========================
#include <reg51.h>
#define SEG P2
#define SCANP P1
sbit LED=P0^7;
/*声明T0定时相关声明*/
#define count_M1 50000
#define TH_M1 (65536-count_M1)/256
#define TL_M1 (65536-count_M1)%256
int count_T0=0;
/*声明扫描相关声明*/
#define count_M2 250
#define TH_M2 (256-count_M2)
#define TL_M2 (256-count_M2)
int count_T1=0;
/*声明7段数码管驱动信号数组(共阳)*/
unsigned char TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,//0-4
0x92,0x83,0xf8,0x80,0x98};//5-9
char disp[2]={0xc0,0xc0};
/*声明基本变量*/
char seconds=0;
char scan=0;
//===主程序==============================================
main()
{ IE=0x8a;
TMOD=0x21;
TH0=TH_M1;
TL0=TL_M1;
TR0=1;
TH1=TH_M2;
TL1=TL_M2;
TR1=1;
LED=1;
while(1);
}
//===T0中断子程序--计算并显示秒数==============
void T0_1s(void) interrupt 1
{ TH0=TH_M1;
TL0=TL_M1;
if(++count_T0==20)
{ count_T0=0;
seconds++;
if(seconds==60)
{ seconds=0;
LED=~LED;
}
}
disp[1]=TAB[seconds/10];
disp[0]=TAB[seconds%10];
}
//===T1中断子程序--扫描==============
void T1_8ms(void) interrupt 3
{ if(++count_T1==32)
{ count_T1=0;
if(++scan==3)
scan=1;
SEG=0xff;
SCANP=~scan;
SEG=disp[scan-1];
}
}//T1中断子程序结束===================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -