8051 单片机 外部中断控制LED闪烁
8051 单片机外部中断控制LED闪烁
这段代码基于8051单片机,通过外部中断控制LED闪烁。
#include 'reg52.h'
typedef unsigned int u16;
typedef unsigned char u8;
sbit LED1=P2^0;
sbit KEY3=P3^2;
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
void exti0_init(void)
{
IT0=1;
EX0=1; // 打开INT0的中断允许
EA=1; // 打开总中断
}
void main()
{
exti0_init();
while(1)
{
}
}
void time0() interrupt 0
{
delay_10us(1000);
if(KEY3==0)
LED1=!LED1;
}
代码分析:
-
数据类型定义:
typedef unsigned int u16;: 定义了无符号整型变量u16,用于存储16位无符号整型数据。typedef unsigned char u8;: 定义了无符号字符型变量u8,用于存储8位无符号整型数据。
-
引脚定义:
sbit LED1=P2^0;: 将P2.0引脚定义为LED1,用于控制LED。sbit KEY3=P3^2;: 将P3.2引脚定义为KEY3,用于检测按键状态。
-
延时函数:
void delay_10us(u16 ten_us): 该函数用于产生ten_us个10微秒的延时。
-
外部中断初始化函数:
void exti0_init(void): 该函数初始化外部中断INT0,包括打开中断允许和总中断允许。
-
主函数:
void main():程序从该函数开始执行。首先调用exti0_init()初始化外部中断,然后进入一个无限循环。
-
定时器0中断函数:
void time0() interrupt 0: 当定时器0计数到一定值时,会触发中断,调用该函数。- 函数内部首先调用
delay_10us(1000)产生一个延时。 - 然后判断
KEY3是否被按下,如果被按下,则将LED1的状态取反,实现LED闪烁。
代码功能:
该代码实现了一个简单的外部中断控制LED闪烁的功能。当按键 KEY3 被按下时,会触发外部中断 INT0,进而调用定时器0中断函数 time0(),该函数控制 LED1 闪烁。
使用说明:
- 将代码烧录到8051单片机中。
- 连接LED和按键到相应的引脚。
- 按下按键
KEY3,观察LED1闪烁。
备注:
- 该代码仅供参考,实际使用中可能需要根据具体情况进行调整。
- 请注意选择合适的延时时间,以控制LED闪烁的速度。
- 请确保连接的电路安全可靠。
原文地址: https://www.cveoy.top/t/topic/n6Ak 著作权归作者所有。请勿转载和采集!