今晚玩按键,用按键去控制流水灯的速度。
符晓老师的那本教材灰常不错,很详细地解释了F28335的各种内涵。
下面所有的代码,均在20楼的基础上进行修改。
位定义:
在20楼LED位定义的前提,增加按键位的定义,按键使用GPIOB的58-61管脚。
#define KEY0_DIR GpioCtrlRegs.GPBDIR.bit.GPIO58
#define KEY1_DIR GpioCtrlRegs.GPBDIR.bit.GPIO59
#define KEY2_DIR GpioCtrlRegs.GPBDIR.bit.GPIO60
#define KEY3_DIR GpioCtrlRegs.GPBDIR.bit.GPIO61
子函数与主函数:
GPIO初始化子函数添加
KEY0_DIR = IN;
KEY1_DIR = IN;
KEY2_DIR = IN;
KEY3_DIR = IN;
void LED_Blink(long double t) //LED Blink子函数
{LED0_ON;
LED1_ON;
LED2_ON;
LED3_ON;
LED4_ON;
LED5_ON;
LED6_ON;
LED7_ON;
DELAY_US(t);
LED0_OFF;
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;
LED5_OFF;
LED6_OFF;
LED7_OFF;
DELAY_US(t);
}
void LED_GO(long double t) // LED 流水灯子函数
{LED0_ON;
DELAY_US(t);
LED0_OFF;
LED1_ON;
DELAY_US(t);
LED1_OFF;
LED2_ON;
DELAY_US(t);
LED2_OFF;
LED3_ON;
DELAY_US(t);
LED3_OFF;
LED4_ON;
DELAY_US(t);
LED4_OFF;
LED5_ON;
DELAY_US(t);
LED5_OFF;
LED6_ON;
DELAY_US(t);
LED6_OFF;
LED7_ON;
DELAY_US(t);
LED7_OFF;
}
void main()
{ Uint32 KeyValue = 0;
InitSysCtrl(); //系统初始化
DINT;//关闭全局中断
InitPieCtrl();//初始化中断控制寄存器
IER = 0x0000;//关闭CPU中断
IFR = 0x0000;//清除CPU中断信号
InitPieVectTable();//初始化中断向量表
Gpio_init();
while(1)
{ KeyValue = GpioDataRegs.GPBDAT.all & 0x3C000000;
switch(KeyValue)
{case 0x3C000000:LED_Blink(200000);break;
case 0x1C000000:LED_GO(100000);break;
case 0x2C000000:LED_GO(200000);break;
case 0x34000000:LED_GO(400000);break;
case 0x38000000:LED_GO(800000);break;
}
}
}
视频伺候:
视频地址:http://player.youku.com/player.php/sid/XNjI3ODkzODUy/v.swf
一些情况及感想:
程序比较简单,没有防抖没有中断,调试过程很快。
如果时间ok的话,想把DSP所有的外设都系统地捣腾一遍,再捣腾捣腾浮点运算和graph。