用51控制简易红绿灯


问题


利用单片机设计一个十字路口交通灯控制器。
用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通灯控制情况。东西向通行时间为80S,
南北向通行时间为60S,缓冲时间为3S。
要求:东西和南北方向均用红绿黄模拟交通灯
东西和南北方向均用数码管显示剩余时间
使用中断定时。
代码:

#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char 
uchar seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar stateFlag;//当前工作模式的标志 为1时80s 为0 时 60s
uchar flag;//统计一秒钟的标志
uchar num1=0;//数码管1显示的数
uchar num2=0;//数码管2显示的数
sbit Led1_G = P1^0;
sbit Led1_Y = P1^1;
sbit Led1_R = P1^2;
sbit Led2_G = P1^3;
sbit Led2_Y = P1^4;
sbit Led2_R = P1^5;
void delay(int a);
void showNum();
void main(){
    Led1_R = 0;
    Led1_G = 0;
    Led1_Y = 0;
    Led2_R = 0;
    Led2_G = 0;
    Led2_Y = 0; 
    stateFlag = 0;
    flag = 0;
    TMOD=0x10;
    TH1= 55536/256;
    TL1=55536%256;
    num1=60;
    num2=63;
    Led1_R = 0;
    Led1_G = 1;
    Led1_Y = 0;
    Led2_R = 1;
    Led2_G = 0;
    Led2_Y = 0; 
    EA=1;
    ET1=1;
    TR1=1;
    while(1){
        showNum();
    }
} 
void int_T1(void) interrupt 3 {
    flag++;
    if(flag==100){
        num1--;
        num2--;
        flag=0;
    }
    if(stateFlag==0){
        if(num1==0){
            Led1_R = 0;
            Led1_G = 0;
            Led1_Y = 1;
            Led2_R = 1;
            Led2_G = 0;
            Led2_Y = 0; 
            num1=3;
        }
        if(num2==0){
            num1=83;
            num2=80;
            Led1_R = 1;
            Led1_G = 0;
            Led1_Y = 0;
            Led2_R = 0;
            Led2_G = 1;
            Led2_Y = 0; 
            stateFlag=1;
        }
    }
    else{
        if(num2==0){
            Led1_R = 1;
            Led1_G = 0;
            Led1_Y = 0;
            Led2_R = 0;
            Led2_G = 0;
            Led2_Y = 1; 
            num2=3;
        }
        if(num1==0){
            num1=60;
            num2=63;
            Led1_R = 0;
            Led1_G = 1;
            Led1_Y = 0;
            Led2_R = 1;
            Led2_G = 0;
            Led2_Y = 0; 
            stateFlag=0;
        }
    }
    TH1= 55536/256;
    TL1=55536%256;
}
void delay(int a){
    uchar b;
    for(;a>0;a--){
        for(b=0;b<255;b++);
    }
}
void  showNum(){
       P2=0x0a;
       P0=seg[num1/10];
       P3=seg[num2/10];
       delay(10);
       P2=0x05;
       P0=seg[num1%10];
       P3=seg[num2%10];
       delay(10);
}

电路图地址:
1.https://download.csdn.net/download/qq_38313674/10495840
2.https://pan.baidu.com/s/1XR4NOPL25qx7hdqSDoWsJw

电路图:
这里写图片描述

观察十字路口红绿灯工作流程,设计交通灯。 1、初始时:南北向、东西向直行左转均为红灯 2、南北向直行: ①南北向直行绿灯亮,延时若干秒 ②启动南北向左转数码管显示:倒计时6秒;同时南北向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后南北向直行绿灯灭,南北向直行黄灯亮,延时3秒 ③南北向左转数码管倒计时显示结束,关闭;同时南北向直行黄灯灭,南北向直行红灯亮 3、南北向左转: ①南北向左转绿灯亮,延时若干秒 ②启动东西向直行数码管显示:倒计时6秒;同时南北向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后南北向左转绿灯灭,南北向左转黄灯亮,延时3秒 ③东西向直行数码管倒计时显示结束,关闭;同时南北向左转黄灯灭,南北向左转红灯亮 4、东西向直行: ①东西向直行绿灯亮,延时若干秒 ②启动东西向左转数码管显示:倒计时6秒;同时东西向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后东西向直行绿灯灭,东西向直行黄灯亮,延时3秒 ③东西向左转数码管倒计时显示结束,关闭;同时东西向直行黄灯灭,东西向直行红灯亮 5、东西向左转: ①东西向左转绿灯亮,延时若干秒 ②启动南北向直行数码管显示:倒计时6秒;同时东西向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后东西向左转绿灯灭,东西向左转黄灯亮,延时3秒 ③南北向直行数码管倒计时显示结束,关闭;同时东西向左转黄灯灭,东西向左转红灯亮
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独木春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值