求plc路口交通灯程序时序图和定时器时序图

东西红灯点亮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;
        }
    }
}