您的当前位置:首页正文

DSP实验二、TMS320F28335按键输入控制LED亮灭

2021-08-12 来源:易榕旅网


.

继续我的第二个实验;实现按键控制

LED亮灭:

功能描述:

上电默认 LD3 亮;

触动一次按键 SW12,LD3 灭 再按一次按键 SW12, LD3亮 再触动一次按键 SW12,LD3 灭 再按一次按键 SW12, LD3亮 。。。。。。

实现每触动一次按键, LED执行一次由亮到灭,或者由灭到亮,也就是实现一次状态反转。

电路连接说明:

LD3 设置为通用 GPIO 上拉输出 初始化后默认为输出 LD3 亮状态; LD3 控制 LED灯的负极,如下图;

SW12 设置为通用 GPIO 上拉输入 该引脚应用滤波功能,且仅在按键抬起时控制 LD3状态发生变化。

按键电路如上图, GPIO53须输出 0,当按键按下时,读取 GPIO50端口值,为 0,当按键未按下时, GPIO50因为上上拉作用,其端口值为 1。

程序设计说明:

按键的读取采用实时扫描的方式(非中断方式) ,功能要求在按键抬起后发

..

.

生 LED状态翻转;所以要记录上一次按键值,并且将当前值 ==1 时,做为按键抬起有效,控制 LED发生状态翻转。

主要程序如下:

==0&&上一次值

while (1) {

EALLOW;

last_Key_SW12 = new_Key_SW12; new_Key_SW12 = Key_SW12();

// 保存旧值 // 读取新值

if ( last_Key_SW12==0 && new_Key_SW12==1)

LD3_TOGGLE();

EDIS;

}

经实际测试, 上述程序可以实现 LD3的翻转,基本达到设计要求。 但是在测试过程中,时好时坏,有时能够看见 LED快速翻转,说明按键有抖动的情况,这里可以考虑 IO 口滤波,即在初始化时,设置 IO 采样周期以及量化串口,设置如下:采样周期设置为 200 时,不再出现抖动现象,按键稳定操作。

源程序如下:

#include #include

\"DSP2833x_Device.h\" \"DSP2833x_Examples.h\"

// DSP2833x Headerfile Include File // DSP2833x Examples Include File

#define #define #define

LD3_ON() LD3_OFF() LD3_TOGGLE()

GpioDataRegs.GPACLEAR.bit.GPIO0 GpioDataRegs.GPASET.bit.GPIO0 GpioDataRegs.GPATOGGLE.bit.GPIO0

= 1

= 1 = 1

#define #define #define

LD4_ON() LD4_OFF() Key_SW12()

GpioDataRegs.GPBCLEAR.bit.GPIO34 GpioDataRegs.GPBSET.bit.GPIO34 GpioDataRegs.GPBDAT.bit.GPIO50

= 1

= 1

..

.

/*

* main.c */ int

main ( void ) {

unsigned char last_Key_SW12=1; // 保留上一次扫描结果,上电默认为未按下状态 unsigned char new_Key_SW12=1; // 保留当前扫描结果,上电默认为未按下状态

InitSysCtrl(); DINT;

IER = 0x0000; IFR = 0x0000;

InitPieCtrl();

InitPieVectTable(); InitGpio();

EALLOW;

//GPIO0 LD3 GpioCtrlRegs. GpioCtrlRegs. GpioCtrlRegs. //GPIO34 LD4 GpioCtrlRegs. GpioCtrlRegs. GpioCtrlRegs. //GPIO50

控制 LED负极

GPAMUX1. bit . GPIO0 = 0; //0 gpio mode GPADIR. bit . GPIO0 GPAPUD. bit . GPIO0 控制 LED负极

= 1; = 0;

//1 output 0 input

//1 enable pullup 0 disable pullup

GPBMUX1. bit . GPIO34 = 0; //0 gpio mode

GPBDIR. bit . GPIO34 = 1; //1 output 0 input

GPBPUD. bit . GPIO34 = 0; //1 enable pullup 0 disable pullup

按键矩阵 SW12输入端

GpioCtrlRegs. GpioCtrlRegs. GpioCtrlRegs. GpioCtrlRegs. GpioCtrlRegs. //GPIO53

GPBMUX2. bit . GPIO50 GPBDIR. bit . GPIO50 GPBPUD. bit . GPIO50

= 0; //0 gpio mode = 0; //1 output 0 input

= 0; //1 enable pullup 0 disable pullup

GPBCTRL. bit . QUALPRD2= 200; // 采样周期 =2*Tsysclkout*200 GPBQSEL2. bit . GPIO50 = 2;

// 采样窗内 3次采样结构相同

按键矩阵负极输出 0

GpioCtrlRegs. GpioCtrlRegs. GpioCtrlRegs.

GPBMUX2. bit . GPIO53 GPBDIR. bit . GPIO53 GPBPUD. bit . GPIO53

= 0; //0 gpio mode = 1; //1 output 0 input

= 0; //1 enable pullup 0 disable pullup

GpioDataRegs. GPBCLEAR. bit . GPIO53 = 1;

LD3_ON(); // 默认输出亮状态 LD4_OFF();

..

.

EDIS; while (1) {

EALLOW;

last_Key_SW12 = new_Key_SW12; new_Key_SW12 = Key_SW12();

// 保存旧值 // 读取新值

if ( last_Key_SW12==0 && new_Key_SW12==1)

}

}

..

LD3_TOGGLE();EDIS;

因篇幅问题不能全部显示,请点此查看更多更全内容