c语言:计数器实验

发布时间 2023-06-13 14:50:58作者: 羽小兮

要求: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 灯的亮灭状态。此外,还使用了中断、定时器和按钮输入等多个模块来实现计数器功能。