📄 7.2 led&key.c
字号:
/***************************************************************************
** 功能描述: 按键记数程序,对S1的按键次数记数,以二进制显示在16个LED上**
***************************************************************************/
#include "DSP28_Device.h"
unsigned long int i = 0;
void IOinit(void);
void LedOut(Uint16 led);
int KeyIn(void);
void main(void)
{
Uint16 keyNum = 0x0000; // 按键次数
InitSysCtrl(); // 系统初始化程序,该子程序存放在DSP28_sysctrl.c中
DINT; // 关闭总中断
IER = 0x0000; // 关闭外设中断
IFR = 0x0000; // 清中断标志
IOinit(); // I/O初始化子程序
LedOut(keyNum); // 16个LED都熄灭
while (1)
{
if (KeyIn()==1) // 调用查键子程序
{
keyNum = keyNum + 1;
LedOut(keyNum);
}
}
}
void IOinit(void)
{
EALLOW;
// 将GPIOE0~GPIOE2配置为一般I/O端口输出,作138译码地址选择信号
GpioMuxRegs.GPEMUX.all = GpioMuxRegs.GPEMUX.all&0xfff8;
GpioMuxRegs.GPEDIR.all = GpioMuxRegs.GPEDIR.all|0x0007;
// 将GPIOB8~GPIOB15配置为一般I/O端口,D0~D7
GpioMuxRegs.GPBMUX.all = GpioMuxRegs.GPBMUX.all&0x00ff;
EDIS;
}
int KeyIn(void) // 查键子程序
{
EALLOW;
// 将GPIOB8~GPIOB15配置为输入,D0~D7
GpioMuxRegs.GPBDIR.all = GpioMuxRegs.GPBDIR.all&0x00ff;
EDIS;
GpioDataRegs.GPEDAT.all = 0xfff8; // 选通键盘低8位
for (i=0; i<100; i++){} // 延时
// 判S1是否按下
if ((GpioDataRegs.GPBDAT.all|0x00ff)==0xfeff)
{
for (i=0; i<100000;i++){} // 延时消抖动
if ((GpioDataRegs.GPBDAT.all|0x00ff)==0xfeff)
{
while ((GpioDataRegs.GPBDAT.all|0x00ff)==0xfeff) // 判S1是否送开
{
GpioDataRegs.GPDDAT.bit.GPIOD1 = !GpioDataRegs.GPDDAT.bit.GPIOD1;
for (i=0;i<1000;i++){}
}
return (1);
}
}
return (0);
}
void LedOut(Uint16 led)
{
EALLOW;
// 将GPIOB8~GPIOB15配置为输出,D0~D7
GpioMuxRegs.GPBDIR.all = GpioMuxRegs.GPBDIR.all|0xff00;
EDIS;
GpioDataRegs.GPEDAT.all = 0xfffb; // LEDB清零
GpioDataRegs.GPBDAT.all =-led;
for (i=0;i<100;i++){} // 延时
GpioDataRegs.GPEDAT.all = 0xffff; // 锁存高8位
GpioDataRegs.GPEDAT.all = 0xfffa; // LEDA清零
GpioDataRegs.GPBDAT.all =- (led<<8);
for (i=0; i<100; i++){}
GpioDataRegs.GPEDAT.all = 0xffff; // 锁存低8位
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -