设计一个适用于TMS320VC5509DSP板的程序。 要求如下: 有四盏LED灯L1,L2,L3,L4; 按照以下顺序,LED灯信号自动变换: (1)L3灯亮起,其他灯灭;(持续20秒) (2)L2灯闪烁,其他灯灭;(持续60秒) (3)L4灯亮,其他灯灭;(持续20秒) (4)返回(1)循环控制; 另外,程序可通过键盘中断进入以下状态:L1灯闪烁,其他灯灭;
时间: 2024-01-13 13:04:39 浏览: 128
首先,需要包含DSP板的头文件。然后,定义L1,L2,L3和L4的引脚。
```c
#include <dsp.h>
#define LED1 0x01
#define LED2 0x02
#define LED3 0x04
#define LED4 0x08
```
接下来,定义变量用于控制LED的状态和时间,以及键盘中断的标志。
```c
int led_state = 0;
int led_timer = 0;
int key_pressed = 0;
```
在主函数中,设置引脚为输出模式,并按照要求循环控制LED的状态。
```c
void main()
{
int led_mask = LED3;
int led_interval = 2000000;
DSK6713_LED_init();
DSK6713_DIP_init();
while(1)
{
if(key_pressed)
{
led_mask = LED1;
led_interval = 6000000;
led_state = 0;
led_timer = 0;
key_pressed = 0;
}
switch(led_state)
{
case 0:
DSK6713_LED_on(led_mask);
if(++led_timer > 2000000)
{
led_state = 1;
led_timer = 0;
}
break;
case 1:
DSK6713_LED_off(led_mask);
if(++led_timer > led_interval)
{
led_state = 2;
led_timer = 0;
}
break;
case 2:
DSK6713_LED_on(LED2);
if(++led_timer > 2000000)
{
led_state = 3;
led_timer = 0;
}
break;
case 3:
DSK6713_LED_off(LED2);
if(++led_timer > led_interval)
{
led_state = 4;
led_timer = 0;
}
break;
case 4:
DSK6713_LED_on(LED4);
if(++led_timer > 2000000)
{
led_state = 0;
led_timer = 0;
}
break;
default:
break;
}
}
}
```
在程序中,每个状态下的LED亮灭时间通过led_interval变量控制,可以根据实际需要进行调整。
最后,在中断服务函数中,设置key_pressed标志为1以响应键盘中断。
```c
interrupt void c_int11()
{
if(DSK6713_DIP_get(0) == 0)
{
key_pressed = 1;
}
}
```
阅读全文