实现现象:下载程序后,操作K3按键使LED1(D11)状态取反
注意事项:无。
#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()
{//设置INT0IT0=1;//跳变沿出发方式(下降沿)EX0=1;//打开INT0的中断允许。 EA=1;//打开总中断
}/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{ Int0Init(); // 设置外部中断0while(1);
}/*******************************************************************************
* 函 数 名 : Int0() interrupt 0
* 函数功能 : 外部中断0的中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/void Int0() interrupt 0 //外部中断0的中断函数
{delay(1000); //延时消抖if(k3==0){led=~led;}
}
这段代码是通过外部中断0来检测按键K3的状态,当按键被按下时,LED灯的状态会发生改变。sbit k3=P3^2;
是定义一个位变量k3,它对应单片机的P3口的第2位,用于检测按键K3的状态。sbit led=P2^0;
是定义一个位变量led,它对应单片机的P2口的第0位,用于控制LED灯的状态。void delay(u16 i)
是一个延时函数,参数i决定了延时的时间。这个函数通过一个while循环实现延时。void Int0Init()
是一个设置外部中断0的函数,通过设置IT0、EX0和EA来实现。void main()
是主函数,程序的执行从这里开始。在主函数中,首先调用Int0Init()函数设置外部中断0,然后进入一个无限循环。void Int0() interrupt 0
是外部中断0的中断函数,当外部中断0被触发时,这个函数会被执行。在这个函数中,首先进行延时消抖,然后检测按键K3的状态,如果按键被按下,就改变LED灯的状态。