【研旭TMS320F28335 DSP实用板试用体验】+查询法按键检测

  • Jason_Lee
  • LV3工程师
  • |      2018-02-02 21:40:59
  • 浏览量 1341
  • 回复:0
本帖最后由 Jason_Lee 于 2018-2-2 21:45 编辑 通过原理图可知,用户按键和DSP芯片的GPIO13连接。当按键未按下时DSPGPIO13为高电平,当按键按下时,GPIO为低电平,因此只需检测DSPGPIO13的电平状态就可以检测按键的状态。编程思想:(1) 系统时钟、看门狗配置(2) 系统中断配置(3) DSP的GPIO配置(4) 检测按键,控制LED的亮灭程序如下:#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File#include "DSP2833x_Examples.h" // DSP2833x Examples Include File #define LED4 GpioDataRegs.GPADAT.bit.GPIO0 //自定义4个控制LEDGPIO数据寄存器#define LED3 GpioDataRegs.GPADAT.bit.GPIO1#define LED1 GpioDataRegs.GPADAT.bit.GPIO6#define LED2 GpioDataRegs.GPADAT.bit.GPIO7 void configtestled(void); //GPIO配置 void main(void){ InitSysCtrl(); DINT; InitPieCtrl();// Disable CPU interrupts andclear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000; InitPieVectTable(); configtestled(); LED1=0; //初始化LED电平 DELAY_US(10); LED2=1; DELAY_US(10); LED3=0; DELAY_US(10); LED4=1; DELAY_US(10); while(1){ if(GpioDataRegs.GPADAT.bit.GPIO13 == 0){ //如果检测到GPIO为低电平,即按键按下 DELAY_US(10000); //延时消抖,防止电平抖动导致的误触发 if(GpioDataRegs.GPADAT.bit.GPIO13 == 0){ //如果还是低电平说明按键确实按下了 LED1=~LED1; //四个LED灯电平取反,实现LED闪烁效果 LED2=~LED2; LED3=~LED3; LED4=~LED4; DELAY_US(50000); while(GpioDataRegs.GPADAT.bit.GPIO13 == 0);//等待按键松开 } } }} void configtestled(void){ EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能 GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0设置为输出 GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1 GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; // GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0; //按键GPIO设置,GPIO13复用为GPIO功能 GpioCtrlRegs.GPADIR.bit.GPIO13 = 0; //设置为输入 EDIS; }最终效果:
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子