代码:
#include "reg51.h"
unsigned char num = 0;
unsigned char seg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void init(){
TMOD = 0x06; // 0000 0110
EA = 1; // 开启总中断
ET0 = 1; // 开启计数器0的溢出中断
TR0 = 1; // 启用计数器0
TH0 = 256 - 3; // 初始化,按三次按钮
TL0 = 256 - 3;
}
void init_counter0() interrupt 1{
// 自动重新装载,不需要为TH0和TH1赋值
num++;
}
void main(){
init();
while (1){
if (num == 10) num = 0; // 放在前面,防止seg[10]
P2 = seg[num];
}
}
仿真:
原理:
一、TMOD选择0x06,计数器,工作方式2(自动重新装载)
二、开启中断,开启计数器
TR1——计数运行控制位
TR1=1,启动定时器/计数器T1计数的必要条件。
TR1=0,停止定时器计数器计数。
该位可由软件置“1”或清“0”。(自己手动设置)
三、设置按键中断溢出初值
TH0 = 256 - X // X即为按键多少次
TL0 = 256 - X