要求:P1口接2只LED灯,定时器 T1采用计数模式,方式1中断,外接按钮开关作为计数输入,当按2次按钮开关,P1 口第一只LED点亮,再按2次按钮开关,P1口第二只LED点亮,再按2次按钮,所有LED 灯熄灭。
1 #include <reg52.h> 2 3 // 定义 LED 灯的控制端口和对应的控制位 4 sbit LED1 = P1^0; 5 sbit LED2 = P1^1; 6 7 // 定义计数器的变量 8 static unsigned char counter = 0; 9 10 // 定义按钮输入的函数 11 void buttonInput() interrupt 3 { 12 // 按钮开关在第一位时,计数器加一 13 if (P3 & 0x01) { 14 counter++; 15 } 16 } 17 18 // 定义延时函数 19 void delay(unsigned int time) { 20 unsigned int i, j; 21 for (i = time; i > 0; i--) { 22 for (j = 110; j > 0; j--); 23 } 24 } 25 26 // 主函数 27 void main() { 28 // 初始化定时器 T1 29 TMOD &= 0xF0; 30 TMOD |= 0x01; 31 TH1 = 0xFC; 32 TL1 = 0x18; 33 TR1 = 1; 34 ET1 = 1; 35 EA = 1; 36 37 // 循环检测计数器变量,控制 LED 灯的亮灭状态 38 while (1) { 39 if (counter == 2) { 40 LED1 = 1; 41 delay(50000); 42 LED2 = 1; 43 delay(50000); 44 counter = 0; 45 LED1 = 0; 46 LED2 = 0; 47 } 48 } 49 }
以上代码使用了静态变量counter
来记录按下按钮的次数,通过计数器的值来控制 LED 灯的亮灭状态。此外,还使用了中断、定时器和按钮输入等多个模块来实现计数器功能。