还剩7页未读,继续阅读
文本内容:
继续我的第二个实验;实现按键控制LED亮灭功能描述上电默认LD3亮;触动一次按键SW12,LD3灭再按一次按键SW12,LD3亮再触动一次按键SN12,LD3灭再按一次按键SW12,LD3亮O O O OOO实现每触动一次按键,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;〃读取新值if last_Key_SW12==0new_Key_SW12==lLD3_T0GGLE;EDIS;经实际测试,上述程序可以实现LD3的翻转,基本达到设计要求但是在测试过程中,时好时坏,有时能够看见LED快速翻转,说明按键有抖动的情况,这里可以考虑10口滤波,即在初始化时,设置I采样周期以及量化串口,设置如下采样周期设置为200时,不再出现抖动现象,按键稳定操作源程序如下#includezzDSP2833x Device,h^//DSP2833x HeeiderfileInclude File#include,zDSP2833x_Examples.h,z//DSP2833x ExamplesInclude File-defineLD3_0NGpioDataRegs.GPACLEAR.bit.GPI00=1#defineLD3_0FFGpioDataRegs.GPASET.bit.GPIOO=1#define LD3_T0GGLE GpioDataRegs.GPATOGGLE.bit.GPIOO^defineLD4_0NGpioDataRegs.GPBCLEAR.bit.GP1034=1#defineLD40FFGpioDataRegs.GPBSET.bit.GP1O34=1#define Key_SW12GpioDataRegs.GPBDAT.bit.GPI050/**main,c*/intmainvoid{unsignedchar last_Kcy_SW12=l;〃保留上一次扫描结果,上电默认为未按下状态unsignedcharncw_Kcy_SW12=l;〃保留当前扫描结果,上电默认为未按下状态InitSysCtrl;DINT;IER=0x0000;IFR=0x0000;InitPieCtrl;InitPieVectTableO;InitGpioO;EALLOW;=0;//0gpio modeGpioCtrlRegs.GPAD1R.bit.GPIOO//GPIOO LD3控制LED负极GpioCtrlRegs.GPAD1R.bit.GPIOO=1;//l output0inputGpioCtrlRegs.GPAPUD.bit.GPIOOGpioCtrlRegs.GPAMCXl.bit.GPIOOGpioCtrlRegs.GPAPUD.bit.GPIOO=0;//l enablepullup0disablepullup//GPIO34LD4控制LED负极0inputGpioCtrlRegs.GPBPUD.bit.GPI034GpioCtrlRegs.GPBMLX
1.bit.GPTO34=0;//0gpio modeGpioCtrlRegs.GPBPUD.bit.GPI034=0;//l enablepullup0disableGpioCtrlRegs.GPBD1R.bit.GP1034=1;//l outputpullup//GPI050按键矩阵SW12输入端GpioCtrlRegs.GPBMLX
2.bit.GPI050=0;//0gpio modeGpioCtrlRegs.GPBDTR.bi t.GPT050=0;//l outputpullup0inputGpioCtrlRegs.GPBCTRL.bit.QUALPRD2=200;〃采样周期二2*Tsysclkoul*200GpioCtr1Regs.GPBQSEL
2.bi t.GPT050=2;〃采样窗内3次采样结构相同//GP1O53按键矩阵负极输出0GpioCtrlRegs.GPBMLX
2.bit.GPI053=0;//0gpio modeGpioCtrlRegs.GPBDTR.bit.GPIO53=1;//l output0inputGpioCtrlRegs.GPBPUD.bit.GPI053=0;//l enablepullup0disablepul1upGpioDataRegs.GPBCLEAR.bit.GPI053=1;LD
3.0N;〃默认输出亮状态LD4_0FF;EDIS;whilel EALLOW;last_Key_SW12=new_Key_SW12;〃保存旧值new_Key_SW12=Key_SW12;〃读取新值LD3_T0GGLE;EDIS;}。
个人认证
优秀文档
获得点赞 0