找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1790|回复: 3
收起左侧

单片机模拟交通灯

[复制链接]
ID:437971 发表于 2018-12-6 11:00 | 显示全部楼层 |阅读模式
//学习单片机技术  模拟交通灯  


/*
*模拟交通灯*
*/
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;

void delay(uint16 x)
{
    uint16 i,j;
    for(i = x; i > 0; i --)
        for(j = 114; j > 0; j --);        
}

#define    RED_EW_ON()    P0 &= ~0x01            //东西方向指示灯开
#define YELLOW_EW_ON()    P0 &= ~0x02
#define  GREEN_EW_ON()    P0 &= ~0x04

#define    RED_EW_OFF()    P0 |=  0x01            //东西方向指示灯关
#define YELLOW_EW_OFF()    P0 |=  0x02
#define  GREEN_EW_OFF()    P0 |=  0x04

#define  RED_SN_ON()    P0 &= ~0x08            //南北方向指示灯开  0000100 1111011
#define YELLOW_SN_ON()    P0 &= ~0x10
#define GREEN_SN_ON()    P0 &= ~0x20

#define  RED_SN_OFF()    P0 |=  0x08            //南北方向指示灯关
#define YELLOW_SN_OFF()    P0 |=  0x10
#define GREEN_SN_OFF()    P0 |=  0x20        

#define YELLOW_EW_BLINK() P0 ^= 0x02            //东西方向黄灯闪烁
#define YELLOW_SN_BLINK() P0 ^= 0x10            //南北方向黄灯闪烁

uint8 Flash_Count = 0, Operation_Type = 1;            //闪烁次数,操作类型变量

void Traffic_Light()                                //交通灯切换子程序
{
    switch (Operation_Type)
    {
        case 1://东西方向绿灯与南北方向红灯亮
                RED_EW_OFF(); YELLOW_EW_OFF(); GREEN_EW_ON();
                RED_SN_ON(); YELLOW_SN_OFF(); GREEN_SN_OFF();
                delay(2000);                                //延时
                Operation_Type = 2;                            //下一个操作
                break;

        case 2://东西方向黄灯开始闪烁,绿灯关闭
                delay(120);
                YELLOW_EW_BLINK();
                GREEN_EW_OFF();
                //闪烁5次
                if( ++Flash_Count != 10) return;
                Flash_Count = 0;
                Operation_Type = 3;                            //下一个操作
                break;

        case 3://东西方向红灯与南北方向绿灯亮
                RED_EW_ON();  YELLOW_EW_OFF(); GREEN_EW_OFF();
                RED_SN_OFF(); YELLOW_SN_OFF(); GREEN_SN_ON();
               //南北方向绿灯亮若干秒后切换
               delay(2000);
               Operation_Type = 4;                            //下一个操作
               break;

        case 4://南北方向红灯开始闪烁
               delay(120);
               YELLOW_SN_BLINK();
               GREEN_SN_OFF();
               //闪烁5次
               if( ++ Flash_Count != 10) return;
               Flash_Count = 0;
               Operation_Type = 1;                            //回到第一种操作
    }           
}

//主程序
int main()
{
    while(1) Traffic_Light();
}

模拟交通信号灯原理图

模拟交通信号灯原理图

模拟交通灯.zip

72.68 KB, 下载次数: 12, 下载积分: 黑币 -5

模拟交通灯文件

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:403231 发表于 2018-12-6 16:04 | 显示全部楼层
信号灯红、黄、绿的电压不一样,都用220欧电阻吗
回复

使用道具 举报

ID:437971 发表于 2018-12-11 21:04 | 显示全部楼层
是的 不行的话 我再看看
回复

使用道具 举报

ID:444855 发表于 2018-12-12 14:39 | 显示全部楼层

是的 不行的话 我再看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表