东西红灯点亮20秒,南北绿灯点亮20秒;东西红灯点亮3秒,南北绿灯闪烁3秒;东西红灯点亮2秒,南北黄灯点亮2秒;东西绿灯点亮20秒,南北红灯点亮20秒;东西绿灯闪烁3秒,南北红灯闪烁3秒;东西黄灯点亮2秒,南北红灯点亮2秒,依次循环。要求用sd控制
#include "msp430g2553.h"
#include "ff.h"
FATFS fs;
FIL file;
UINT readbytes;
char* mode = "r";
char line[100];
int state = 0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1DIR = 0x0F; // P1.0 ~ P1.3输出
P1OUT = 0; // 输出低电平
int res = f_mount(&fs, "", 1); // 初始化SD卡
if (res != FR_OK) {
return -1;
}
res = f_open(&file, "signals.txt", FA_READ | FA_OPEN_EXISTING);
if (res != FR_OK) {
return -1;
}
while (1) {
res = f_gets(line, sizeof(line), &file); // 读取文件
if (res != FR_OK || line[0] == '\0') {
f_lseek(&file, 0);
continue;
}
switch (state) {
case 0:
P1OUT = 0x01; // 东西红灯点亮20秒
__delay_cycles(20000000);
state = 1;
break;
case 1:
P1OUT = 0x0C; // 南北绿灯点亮20秒
__delay_cycles(20000000);
state = 2;
break;
case 2:
P1OUT = 0x01; // 东西红灯点亮3秒
__delay_cycles(3000000);
state = 3;
break;
case 3:
P1OUT = 0x0C; // 南北绿灯闪烁3秒
__delay_cycles(3000000);
P1OUT = 0; // 南北红灯闪烁3秒
__delay_cycles(3000000);
state = 4;
break;
case 4:
P1OUT = 0x02; // 东西黄灯点亮2秒
__delay_cycles(2000000);
state = 5;
break;
case 5:
P1OUT = 0x0C; // 南北红灯点亮20秒
__delay_cycles(20000000);
state = 6;
break;
case 6:
P1OUT = 0x02; // 东西绿灯闪烁3秒
__delay_cycles(3000000);
P1OUT = 0; // 南北红灯闪烁3秒
__delay_cycles(3000000);
state = 0;
break;
}
}
}