📄 2808gpio_key.c
字号:
#include "DSP280x_device.h"
unsigned long int i=0;
void IOinit(void);
void LedOut(Uint32 led);
int KeyIn(void);
void main(void)
{
Uint32 keyNum; //= 0x0000; // 按键次数
keyNum = 0x00000002;
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;
// 将GPIO32~GPIO34配置为一般I/O端口输出,作138译码地址选择信号
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0; // GPIO34 = GPIO34
GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; // GPIO34 = output
GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0; // GPIO34 = GPIO34
GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1; // GPIO34 = output
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO34 = GPIO34
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34 = output
// 将GPIO12~GPIO19配置为一般I/O端口,D0~D7
GpioCtrlRegs.GPAMUX1.all=0x00000000;
GpioCtrlRegs.GPADIR.all=0xffffffff;
GpioDataRegs.GPADAT.all=0x00000000;
EDIS;
}
int KeyIn(void) // 查键子程序
{
Uint32 key;
EALLOW;
GpioCtrlRegs.GPADIR.all=0xfff00fff;// 将GPIO12~GPIO19配置为输入,D0~D7
EDIS;
GpioDataRegs.GPBDAT.all=0x00000001; // 选通键盘KEYC
for (i=0; i<100; i++){} // 延时// 判S1是否按下
key=GpioDataRegs.GPADAT.all|0xfff00fff;
if (key==0xffffefff)
{GpioDataRegs.GPADAT.all==GpioDataRegs.GPADAT.all|0xffffefff;
for (i=0; i<100;i++){} // 延时消抖动
key=GpioDataRegs.GPADAT.all|0xfff00fff;
if (key==0xffffefff)
{
while ((GpioDataRegs.GPADAT.all|0xffffffff)==0xffffefff) // 判S1是否送开
{
GpioDataRegs.GPADAT.bit.GPIO12 =!GpioDataRegs.GPADAT.bit.GPIO12;
for (i=0;i<1000;i++){}
}
return (1);
}
}
return (0);
}
void LedOut(Uint32 led)
{
EALLOW;
// 将GPIOB8~GPIOB15配置为输出,D0~D7
GpioCtrlRegs.GPADIR.bit.GPIO12 = 1; // GPIO34 = output
GpioCtrlRegs.GPADIR.bit.GPIO13 = 1; // GPIO34 = output
GpioCtrlRegs.GPADIR.bit.GPIO14 = 1; // GPIO34 = output
GpioCtrlRegs.GPADIR.bit.GPIO15 = 1; // GPIO34 = output
GpioCtrlRegs.GPADIR.bit.GPIO16 = 1; // GPIO34 = output
GpioCtrlRegs.GPADIR.bit.GPIO17 = 1; // GPIO34 = output
GpioCtrlRegs.GPADIR.bit.GPIO18 = 1; // GPIO34 = output
GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; // GPIO34 = output
EDIS;
GpioDataRegs.GPBDAT.all = 0x00000006; //12~19
GpioDataRegs.GPBDAT.all = 0x00000006; //
led=led<<12;
GpioDataRegs.GPADAT.all =-led;
for (i=0;i<100;i++){} // 延时
GpioDataRegs.GPBDAT.all = 0x00000001; // 锁存高8位
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -