单片机用t1中断通过P1口接8个LED,P3.5口外接按键,按键再接地,每按下一次按键,计数值增加1 ,当计数值增加4次时,8个LED闪烁不停。
时间: 2023-08-02 12:10:28 浏览: 79
以下是基于51单片机的代码实现:
```c
#include <reg51.h>
#define uint unsigned int
// 8个LED的连接口
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
// 按键连接的口
sbit KEY = P3^5;
// 计数器初值
uint count = 0;
// T1中断服务函数
void T1_ISR() interrupt 3 {
TH1 = 0xFC; // 重新设置T1初值,使其每50ms产生一次中断
TL1 = 0x18;
if (count >= 4) { // 当计数值增加到4时,8个LED闪烁不停
LED1 = !LED1;
LED2 = !LED2;
LED3 = !LED3;
LED4 = !LED4;
LED5 = !LED5;
LED6 = !LED6;
LED7 = !LED7;
LED8 = !LED8;
}
}
void main() {
TMOD = 0x10; // 设置T1为工作方式1,16位定时器
TH1 = 0xFC; // 设置T1初值,使其每50ms产生一次中断
TL1 = 0x18;
ET1 = 1; // 允许T1中断
EA = 1; // 开启总中断
TR1 = 1; // 启动T1
while (1) {
if (!KEY) { // 每按下一次按键,计数值增加1
while (!KEY);
count++;
}
}
}
```
代码中使用定时器T1来产生中断,每隔50ms触发一次中断。在T1中断服务函数中,当计数值增加到4时,8个LED开始闪烁不停。在主函数中,通过检测按键的状态来判断是否需要增加计数值。
阅读全文