基于51单片机交通信号灯设计(Proteus仿真+Keil源码+设计文档+原理图等)附下载链接!

提供对应的Proteus仿真电路图,Keil程序源码(C语言),设计文档、原理图,PCB、模块资料、元件清单、程序流程图等电子资料参考学习,附带项目全部资料下载链接。

1)项目完整资料获取链接:下载链接

2)Keil、Proteus各个版本安装包: 下载链接

01设计要求

设计一个基于51单片机交通信号灯系统:

功能1:东西南北双向各配双数码管倒计时,搭载红绿黄三色指示灯;

功能2:支持双向通行时长独立设定,自带黄灯缓冲,智能规避参数错误;

功能3:通行倒计时剩余五秒,自动触发黄灯预警提醒;

功能4:特殊模式:紧急模式(红灯常亮,禁行);夜间模式(黄灯常亮,提示前方注意安全)。

02系统模板

系统按键支持禁行、夜间模式、复位、东西 / 南北放行、时长加减、通道切换功能。

03Proteus仿真

04示例代码

#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int      //宏定义
​
void main()
{
    TMOD=0X11;    //定时器设置
    TH1=0X3C; TL1=0XB0;
    TH0=0X3C; TL0=0XB0;  //定时器0初值0.05S
    EA=1; ET0=1; ET1=1;  //开总中断、定时器0/1中断
    TR0=1; TR1=0;        //启动定时0,关闭定时1
    logo();              //开机初始化
    P2=0Xc3;             //默认:东西绿灯,南北黄灯
    sec_nb=sec_dx+5;     //南北通行时间比东西多5秒
    
    while(1)  //主循环
    {
        key();    //按键扫描
        display();//显示刷新
    }
}
​
//按键扫描子程序
void key(void)
{
    //K1:时间加
    if(k1!=1)
    {
        display();//延时消抖
        if(k1!=1)
        {
            TR0=0; shanruo=0; P2=0x00; TR1=0;
            if(set==0) set_timedx++;
            else set_timenb++;
            
            if(set_timenb==100) set_timenb=1;
            if(set_timedx==100) set_timedx=1;
            sec_nb=set_timenb; sec_dx=set_timedx;
            
            do{display();}while(k1!=1);//等待释放
        }
    }
​
    //K2:时间减
    if(k2!=1)
    {
        display();//延时消抖
        if(k2!=1)
        {
            TR0=0; shanruo=0; P2=0x00; TR1=0;
            if(set==0) set_timedx--;
            else set_timenb--;
            
            if(set_timenb==0) set_timenb=99;
            if(set_timedx==0) set_timedx=99;
            sec_nb=set_timenb; sec_dx=set_timedx;
            
            do{display();}while(k2!=1);//等待释放
        }
    }
​
    //K3:确认
    if(k3!=1)
    {
        display();//延时消抖
        if(k3!=1)
        {
            TR0=1; sec_nb=set_timenb; sec_dx=set_timedx; TR1=0;
            if(set==0)
            {
                P2=0X00; Green_dx=1; Red_nb=1;
                sec_nb=sec_dx+5;
            }
            else
            {
                P2=0x00; Green_nb=1; Red_dx=1;
                sec_dx=sec_nb+5;
            }
        }
    }
​
    //K4:切换
    if(k4!=1)
    {
        display();//延时消抖
        if(k4!=1)
        {
            TR0=0; set=!set; TR1=0; dx_nb=set;
            do{display();}while(k4!=1);//等待释放
        }
    }
​
    //K5:禁止(全红灯)
    if(k5!=1)
    {
        display();//延时消抖
        if(k5!=1)
        {
            TR0=0; P2=0x00; TR1=0;
            Red_dx=1; Red_nb=1;
            sec_dx=00; sec_nb=00;
            do{display();}while(k5!=1);//等待释放
        }
    }
​
    //K6:夜间模式
    if(k6!=1)
    {
        display();//延时消抖
        if(k6!=1)
        {
            TR0=0; P2=0x00; TR1=1;
            sec_dx=00; sec_nb=00;
            do{display();}while(k6!=1);//等待释放
        }
    }
}

05原理图

注:

  1. 源码使用Keil4或Keil5打开

  2. 仿真使用的是Proteus8.13及以上版本,版本过低可能会打不开。

06资料获取

1)项目完整资料获取链接:下载链接

2)Keil、Proteus各个版本安装包: 下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值