当前位置:首页 > 单片机 > 单片机
[导读]首先是gpio中断,这一点和1768不同,1768使用的中断时和eint3共用中断通道,到了1788,专门为gpio开辟了中断#ifndef __JOYPAD_H_#define __JOYPAD_H_#include "sys.h"#include "delay.h"#define JOYPAD_A 0X01#define JO

首先是gpio中断,这一点和1768不同,1768使用的中断时和eint3共用中断通道,到了1788,专门为gpio开辟了中断

#ifndef __JOYPAD_H_

#define __JOYPAD_H_

#include "sys.h"

#include "delay.h"

#define JOYPAD_A 0X01

#define JOYPAD_B 0X02

#define JOYPAD_C 0X03

#define JOYPAD_D 0X04

#define JOYPAD_ENTER 0X05

extern u8 joypadValue;

void Joypad_Scan_Init(void);

void Joypad_Exti_Init(void);

u8 Joypad_Get_Key(void);

#endif

#include "joypad.h"

u8 joypadValue=0;

void Joypad_Exti_Init(void)

{

//p4没有中断通道,所以只有key1和key2拥有中断

LPC_SC->PCONP|=(1<<15);//打开时钟

//选择管脚模式,1788为每个管脚都设计了一个寄存器来选择管脚模式

LPC_IOCON->P2_25=0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P2_25|=(2<<3);//上拉

P2dir(25)=0; //输入

LPC_GPIOINT->IO2IntEnF|=(1<<25);//使能IO口下降沿触发

LPC_GPIOINT->IO2IntClr|=(1<<25);//清除io口中断

LPC_IOCON->P2_26=0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P2_26|=(2<<3);//上拉

P2dir(26)=0; //输入

LPC_GPIOINT->IO2IntEnF|=(1<<26);//使能IO口下降沿触发

LPC_GPIOINT->IO2IntClr|=(1<<26);//清除io口中断

LPC_IOCON->P2_23=0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P2_23|=(2<<3);//上拉

P2dir(23)=0; //输入

LPC_GPIOINT->IO2IntEnF|=(1<<23);//使能IO口下降沿触发

LPC_GPIOINT->IO2IntClr|=(1<<23);//清除io口中断

LPC_IOCON->P2_19=0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P2_19|=(2<<3);//上拉

P2dir(19)=0; //输入

LPC_GPIOINT->IO2IntEnF|=(1<<19);//使能IO口下降沿触发

LPC_GPIOINT->IO2IntClr|=(1<<19);//清除io口中断

//P0.14 与usb2_connect冲突,所以使用usb2连接的时候不用p0.14

// LPC_IOCON->P0_14 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

// LPC_IOCON->P0_14 |= (2<<3);//上拉

// P0dir(14) = 0; //输入

// LPC_GPIOINT->IO0IntEnF |= (1<<14);//使能IO口下降沿触发

// LPC_GPIOINT->IO0IntClr |= (1<<14);//清除io口中断

NVIC_ClearPendingIRQ(GPIO_IRQn);

NVIC_SetPriority(GPIO_IRQn,NVIC_EncodePriority(PriorityGroup2,GPIO_PreemptPriority,GPIO_SubPriority));

NVIC_EnableIRQ(GPIO_IRQn);

}

void Joypad_Scan_Init(void)

{

//p2.25 p2.26 p2.23 P2.19 P0.14

LPC_SC->PCONP|=(1<<15);//打开时钟

//选择管脚模式,1788为每个管脚都设计了一个寄存器来选择管脚模式

LPC_IOCON->P2_25=0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P2_25|=(2<<3);//上拉

P2dir(25)=0; //输入

LPC_IOCON->P2_26=0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P2_26|=(2<<3);//上拉

P2dir(26)=0; //输入

LPC_IOCON->P2_23=0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P2_23|=(2<<3);//上拉

P2dir(23)=0; //输入

LPC_IOCON->P2_19=0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P2_19|=(2<<3);//上拉

P2dir(19)=0; //输入

// LPC_IOCON->P0_14 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

// LPC_IOCON->P0_14 |= (2<<3);//上拉

// P0dir(14) = 0; //输入

}

u8 Joypad_Get_Key(void)

{

if(P2in(25)==0)

{

Delay_Ms(5);

if(P2in(25)==0)

{

joypadValue=JOYPAD_A;

}

}

if(P2in(26)==0)

{

Delay_Ms(5);

if(P2in(26)==0)

{

joypadValue=JOYPAD_B;

}

}

if(P2in(23)==0)

{

Delay_Ms(5);

if(P2in(23)==0)

{

joypadValue=JOYPAD_C;

}

}

if(P2in(19)==0)

{

Delay_Ms(5);

if(P2in(19)==0)

{

joypadValue=JOYPAD_D;

}

}

// if(P0in(14) == 0)

// {

// Delay_Ms(5);

// if(P0in(14) == 0)

// {

// joypadValue = JOYPAD_ENTER;

// }

// }

returnjoypadValue;

}

void GPIO_IRQHandler(void)

{

NVIC_ClearPendingIRQ(GPIO_IRQn);

// if((LPC_GPIOINT->IntStatus & (1<<0))) //p0中断

// {

// if((LPC_GPIOINT->IO0IntStatF & (1<<14)))

// {

// //清除中断

// LPC_GPIOINT->IO0IntClr |= (1<<14);

// joypadValue = JOYPAD_ENTER;

// }

// }

if((LPC_GPIOINT->IntStatus&(1<<2))) //p2中断

{

if((LPC_GPIOINT->IO2IntStatF&(1<<25)))

{

//清除中断

LPC_GPIOINT->IO2IntClr|=(1<<25);

joypadValue=JOYPAD_A;

}

if((LPC_GPIOINT->IO2IntStatF&(1<<26)))

{

//清除中断

LPC_GPIOINT->IO2IntClr|=(1<<26);

joypadValue=JOYPAD_B;

}

if((LPC_GPIOINT->IO2IntStatF&(1<<23)))

{

//清除中断

LPC_GPIOINT->IO2IntClr|=(1<<23);

joypadValue=JOYPAD_C;

}

if((LPC_GPIOINT->IO2IntStatF&(1<<19)))

{

//清除中断

LPC_GPIOINT->IO2IntClr|=(1<<19);

joypadValue =

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

MCS-51单片机有两个外部中断源INT0和INT1,它们分别在P3.2和P3.3引脚出现低电平或下降沿信号时向单片机发出中断请求。外部中断可用于检测单片机外部发生的事件,如键盘敲击和特定脉冲发生的次数等。

关键字: 51单片机 外部中断

外部中断是单片机实时地处理外部事件的一种机制。具体指的是,当某种外部事件发生时,单片机的中断系统迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后,又返回被中断的程序处,继续执行下去。这里我们以Nuc...

关键字: MCU 外部中断 ST

STM32CubeMX是官方推荐的配置软件,而HAL库也是取代之前的库函数的通用库,所以STM32CubeMX+HAL库是当前主流的工程创建方式,HAL库的可移植性也高于被取代的库函数。 之前在[程序员小哈]的公众号中写...

关键字: LED 外部中断

  引 言   近年来,由于我国社会经济的快速发展和人们生活方式的转变,心血管病发病率及相关危险因素呈不断上升趋势,人们也越来越注意自己的身心健康。过去测量血压必须到医院,由医生用水银血

关键字: 电子血压计 脉搏波 lpc1788 s0012a

1.ARM中一些常见英文缩写解释 MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:连接片内外设功能的VLSI外设总线; EMC:外部存储器控制器; MAM:存储器加速模块; VIC:向量中...

关键字: ARM THUMB I2C 外部中断

/********************************文件所用资源1.外部中断0、1 定时中断0、1 串口中断2.端口:P3.0,P3.1,P3.3,P3.4,P3.5********************...

关键字: c51程序 串口中断 外部中断 定时中断

#include #include #include int main(void){MCUCR |= (1

关键字: AVR gcc编程 单片机 外部中断

因为没有中断的清除标志位,这一点与其它单片机是不同的。EXTI_CR1 触发边沿的设置要在总中断没开时才能写入!PD7 是 不可屏蔽的最高优先级的硬件中断(TLI)设置顺序:最好先关中断 设置边沿 开启引脚 最后开总中断...

关键字: stm8s 外部中断

以下总结参考原子STM32开发指南STM32F103 的中断控制器支持 19 个外部中断/事件请求。STM32F103 的19 个外部中断为:线 0~15:对应外部 IO 口的输入中断。线 16:连接到 PVD 输出。线...

关键字: STM32 外部中断

一、STM32中断分组:  STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是STM32的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,P...

关键字: gpio STM32 外部中断
关闭
关闭