51单片机外部中断0

本文介绍了如何通过下载程序控制单片机,实现LED交通灯的D1状态取反以及利用K3按键触发LED变化。使用了延时函数处理按键的消抖,并设置了外部中断1(INT0)来响应按键输入。
摘要由CSDN通过智能技术生成

/****************************************************************
**********************
实验现象:下载程序后,操作 K3 按键使 D1 状态取反
接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节)
1,单片机-->LED&交通灯模块
P20-->D1
2,单片机-->独立按键模块
P32-->K3
注意事项:
*****************************************************************
**********************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k3=P3^2; //定义按键 K3
sbit led=P2^0; //定义 P20 口是 led
/****************************************************************
***************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1 时,大约延时 10us
*****************************************************************
**************/
void delay(u16 i)
{
while(i--);
}
/****************************************************************
***************
* 函 数 名 : Int1Init()
* 函数功能 : 设置外部中断 1
* 输 入 : 无
* 输 出 : 无
*****************************************************************
**************/
void Int0Init()
{
//设置 INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开 INT0 的中断允许。
EA=1;//打开总中断
}
/****************************************************************
***************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*****************************************************************
**************/
void main()
{
Int0Init(); // 设置外部中断 0
while(1);
}
/****************************************************************
***************
* 函 数 名 : Int0() interrupt 0
* 函数功能 : 外部中断 0 的中断函数
* 输 入 : 无
* 输 出 : 无
*****************************************************************
**************/
void Int0() interrupt 0 //外部中断 0 的中断函数
{
delay(1000); //延时消抖
if(k3==0)
{
led=~led;
}
}

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
51单片机外部中断0可以通过连接到单片机的INT0引脚来触发。流水灯可以通过控制多个LED灯的亮灭来实现。 在控制流水灯的过程中,需要使用单片机的GPIO口来控制每个LED灯的亮灭。当外部中断0被触发时,可以在中断服务程序中编写控制流水灯的代码。具体实现步骤如下: 1. 配置GPIO口为输出模式,用于控制LED灯的亮灭。 2. 在中断服务程序中编写控制流水灯的代码。可以使用一个计数器来记录当前亮灯的位置,每次中断服务程序被执行时,将当前亮灯的位置向后移动一位,并将前一位的LED灯熄灭,将当前位置的LED灯点亮。 3. 在主函数中启用外部中断0,并等待中断的触发。 4. 循环执行主函数,直到程序被中断退出。 需要注意的是,在中断服务程序中,应尽量避免使用延时函数或者其他可能会造成中断延迟的代码,以保证流水灯能够流畅地显示。同时,需要注意控制LED灯的亮灭时间,避免灯光闪烁或者过于暗淡。 下面是一个简单的51单片机外部中断0控制流水灯的程序示例: ```c #include <reg52.h> sbit LED1 = P1^0; sbit LED2 = P1^1; sbit LED3 = P1^2; sbit LED4 = P1^3; unsigned char LedIndex = 0; void main() { EA = 1; // 开启总中断 EX0 = 1; // 开启外部中断0 IT0 = 1; // 设置外部中断0为下降沿触发 while(1) { // 主函数中可以添加其他代码 } } void Interrupt0() interrupt 0 { LedIndex++; if(LedIndex > 3) { LedIndex = 0; } switch(LedIndex) { case 0: LED1 = 1; LED2 = 0; LED3 = 0; LED4 = 0; break; case 1: LED1 = 0; LED2 = 1; LED3 = 0; LED4 = 0; break; case 2: LED1 = 0; LED2 = 0; LED3 = 1; LED4 = 0; break; case 3: LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 1; break; default: break; } } ``` 在上面的程序中,使用了P1口的四个引脚来控制四个LED灯的亮灭,中断服务程序中使用了一个switch语句来控制LED灯的流水效果。主函数中可以添加其他代码,例如初始化等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬件工程师1234

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值