还剩6页未读,继续阅读
文本内容:
继续我的第二个实验;实现按键控制LED亮灭功能描述上电默认LD3亮;触动一次按键SW12LD3灭再按一次按键SW12LD3亮再触动一次按键SN12LD3灭再按一次按键SW12LD3亮OOOOOO实现每触动一次按键,LED执行一次由亮到灭,或者由灭到亮,也就是实现一次状态反转电路连接说明LD3设置为通用GPIO上拉输出初始化后默认为输出LD3亮状态;LD3控制LED灯的负极,如下图;SW12设置为通用GPIO上拉输入该引脚应用滤波功能,且仅在按键抬起时控制LD3状态发生变化a按键电路如上图,GPI053须输出0当按键按下时,读取GPI050端口值,为0当按键未按下时,GPI050因为上上拉作用,其端口值为1程序设计说明按键的读取采用实时扫描的方式非中断方式,功能要求在按键抬起后发生LED状态翻转;所以要记录上一次按键值,并且将当前值二0上一次值=1时,做为按键抬起有效,控制LED发生状态翻转主要程序如下whilelEALL0W;last_Key_SW12=new_Key_SW12;〃保存旧值new_Key_SW12=Key_SW12;〃读取新值iflast_Key_SW12==0new_Key_SW12==lLD3_T0GGLE;EDIS;经实际测试,上述程序可以实现LD3的翻转,基本达到设计要求但是在测试过程中,时好时坏,有时能够看见LED快速翻转,说明按键有抖动的情况,这里可以考虑10口滤波,即在初始化时,设置I采样周期以及量化串口,设置如下采样周期设置为200时,不再出现抖动现象,按键稳定操作源程序如下#includezzDSP2833xDeviceh^//DSP2833xHeeiderfileIncludeFile#include,zDSP2833x_Examples.h,z//DSP2833xExamplesIncludeFile-defineLD3_0NGpioDataRegs.GPACLEAR.bit.GPI00=1#defineLD3_0FFGpioDataRegs.GPASET.bit.GPIOO=1GpioDataRegs.GPATOGGLE.bit.GPIOO^defineLD4_0NGpioDataRegs.GPBCLEAR.bit.GP1034=1#defineLD40FFGpioDataRegs.GPBSET.bit.GP1O34=1#defineKey_SW12GpioDataRegs.GPBDAT.bit.GPI050/**mainc*/intmainvoid{unsignedcharlast_Kcy_SW12=l;〃保留上一次扫描结果,上电默认为未按下状态unsignedcharncw_Kcy_SW12=l;〃保留当前扫描结果,上电默认为未按下状态InitSysCtrl;DINT;IER=0x0000;IFR=0x0000;InitPieCtrl;InitPieVectTableO;InitGpioO;EALLOW;//GPIOOLD3控制LED负极GpioCtrlRegs.GPAMCXl.bit.GPIOOpullup//GPIO34LD4控制LED负极GpioCtrlRegs.GPBMLX
1.bit.GPTO34=0;//0gpiomodeGpioCtrlRegs.GPBD1R.bit.GP1034=1;//loutputpullup//GPI050按键矩阵SW12输入端GpioCtrlRegs.GPBMLX
2.bit.GPI050GpioCtrlRegs.GPBDTR.bit.GPT050=0;//loutputpullupGpioCtrlRegs.GPBCTRL.bit.QUALPRD2=200;〃采样周期二2*Tsysclkoul*200GpioCtr1Regs.GPBQSEL
2.bit.GPT050=2;〃采样窗内3次采样结构相同//GP1O53按键矩阵负极输出0GpioCtrlRegs.GPBMLX
2.bit.GPI053=0;//0gpiomodeGpioCtrlRegs.GPBDTR.bit.GPIO53=1;//loutput0inputGpioCtrlRegs.GPBPUD.bit.GPI053=0;//lenablepullup0disablepul1upGpioDataRegs.GPBCLEAR.bit.GPI053=1;LD
3.0N;〃默认输出亮状态LD4_0FF;EDIS;whilelEALLOW;last_Key_SW12=new_Key_SW12;〃保存旧值new_Key_SW12=Key_SW12;〃读取新值LD3_T0GGLE;EDIS;}。
个人认证
优秀文档
获得点赞 0