📄 key_int.c
字号:
#include "2410addr.h"
#define KEY1 (1 << 3)//GPG3,EINT11
#define KEY2 (1 << 6)//GPG6,EINT14//GPG7,EINT15
#define KEY3 (1 << 7)//GPG7,EINT15//GPG8,EINT16
#define KEY4 (1 << 11)//GPG11,EINT19
#define LED1 (1 << 4)//GPF4
#define LED2 (1 << 5)//GPF5
#define LED3 (1 << 6)//GPF6
#define LED4 (1 << 7)//GPF7
/*******************************************************************************************
函数原形:void __irq IRQ_KEY(void)
功能描述:键盘中断处理程序,当产生键盘中断后将读取键值,重新刷新LED显示
参 数:无
*******************************************************************************************/
void __irq IRQ_KEY(void)
{
unsigned int i;
ClearPending(BIT_EINT8_23);
rEINTPEND = 0xffffff;
rGPGCON = rGPGCON & (~((3 << 6) | (3 << 12) | (3 << 14) | (3 << 22)));//设置为输入状态
if (rGPGDAT & KEY1){//当KEY1被按下时,LED亮,否则灭
rGPFDAT |= LED1;//熄灭LED1
}
else {
rGPFDAT &= ~LED1;//点亮LED1
}
if (rGPGDAT & KEY2){
rGPFDAT |= LED2;
}
else {
rGPFDAT &= ~LED2;
}
if (rGPGDAT & KEY3){
rGPFDAT |= LED3;
}
else {
rGPFDAT &= ~LED3;
}
if (rGPGDAT & KEY4){
rGPFDAT |= LED4;
}
else {
rGPFDAT &= ~LED4;
}
rGPGCON |= (2 << 6) | (2 << 12) | (2 << 14) | (2 << 22);//重新设置外部中断输入功能
}
/*******************************************************************************************
函数原形:void __irq IRQ_KEY(void)
功能描述:键盘中断初始化,将按键输入管脚设置成外部中断输入功能,双边沿触发,IRQ中断模式
参 数:无
*******************************************************************************************/
void EINT_Init(void)
{
rGPGCON &= (~((3 << 6) | (3 << 12) | (3 << 14) | (3 << 22)));
rGPGCON |= (2 << 6) | (2 << 12) | (2 << 14) | (2 << 22);
//rGPGCON[23:22],[15:14],[13:12],[7:6]=10b,即GPG[11,7,6,3]为外部中断输入功能
rEXTINT1 = rEXTINT1 & (~((7 << 12) | (7 << 24) | (7 << 28))) | ((6 << 12) | (6 << 24) | (6 << 28));
//EINT11,EINT14,EINT15下降沿触发中断
rEXTINT2 = rEXTINT2 & (~(7 << 12)) | (6 << 12);//EINT19下降沿触发中断
pISR_EINT8_23 = (unsigned int)IRQ_KEY;
rPRIORITY = 0x00000000; // 使用默认的固定的优先级
ClearPending(BIT_EINT8_23); // 清除中断标志位
rEINTPEND = 0xffffff;
rINTMOD = 0x00000000; // 所有中断均为IRQ中断
rINTMSK &= (~BIT_EINT8_23); // 使能外部中断8_23
rEINTMASK &= (~((1 << 11) | (1 << 14) | (1 << 15) | (1 << 19)));//使用能EINT11,EINT14,EINT15,EINT17
}
void Main(void){
rGPFCON = (rGPFCON & 0x00ff) | 0x5500;//设置GPF[7:4](LED[4:1])为输出功能
rGPFDAT |= LED1 | LED2 | LED3 | LED4;
EINT_Init();
while (1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -