📄 7_2.c
字号:
//秒计数器,定时器0工作在方式0,每5毫秒产生一次中断,转换一次数码管的显示位。
//同时,计数5毫秒的次数,到200次为1秒,使秒计数器time加1。
#include <AT892051.h>
#include <absacc.h>
#define DISPLAY_SEGMENT1 XBYTE[0x8001] //LED显示阳极高位,段输出
#define BIT_LED XBYTE[0x8002] //LED显示阴极,位输出
bit chgdis; //显示位转换,=0时,显示个位数,=1时显示十位数
unsigned char data display0,display1; //显示位0和1
unsigned char data counter; //计数5毫秒的个数
unsigned char data time; //秒计数
unsigned char code led_segment_code[]={0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,
0x04,0x02};//共阳数码管段码
main()
{
TMOD=0x00; //定时器0为方式0
IP=0x02; //定时器中断0为高优先级
TH0=0xCB;TL0=0x1D; //定时器0的时间常数(5ms,4MHZ)
counter=0; //计数5毫秒的个数
time=0; //秒计数初始值0秒
TR0=1; //启动定时器0
IE=0x82; //开放显示中断
while(1);
}
void time0_int(void) interrupt 1 //显示中断服务子程序,每五毫秒中断一次
{
TH0=0xCB;TL0=0x1D; //重装定时器0的时间常数(5ms,4MHZ)
counter++;
if (counter==200) //一秒
time++; //秒计数
display1=time/10; //算出显示十位数
display0=time-display1*10; //算出显示个位数
chgdis^=1; //更换显示位
if (chgdis==0)
{
P3_7=1; //十位数不显示
P1=led_segment_code[display0]; //送个位数显示段码
}
else
{
P1=led_segment_code[display1]^0x01; //送十位数显示段码
P3_7=0; //显示十位数
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -