智能交通灯

  • 基于51单片机智能交通灯电路方案设计
    • 基本功能:
    • 仿真图
    • 原理图
    • PCB图
    • 程序
    • 器件清单
    • 资料清单

基于51单片机智能交通灯电路方案设计

仿真:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

编号J001

基本功能:

1、交通信号灯分布于东南西北,每个路口均有三个。

2、南北方向绿灯和东西方向的绿灯不能同时亮;如果同时亮,则应自动立即关闭信号灯系统,并立即发出报警信号。

3、系统工作后,首先南北红灯亮并维持30s;与此同时,东西绿灯亮,并维持25s时间,到25s时,东西绿灯熄灭。在东西绿灯熄灭时,东西黄灯亮并维持5s,然后东西黄灯熄灭,东西红灯亮,同时南北红灯熄灭,南北绿灯亮;东西红灯亮并维持30s;与此同时,南北绿灯亮并维持15s;然后,南北绿灯熄灭南北绿灯熄灭时,南北黄灯亮维持5s后熄灭;同时南北红灯亮,东西绿灯亮。至此,结束一个工作循环,如下交通信号灯变化表。

4、在交通信号灯亮和闪烁的同时,路口设有两位七段码的显示器倒数计时,让车辆行人能够清楚地知道再过多久信号灯就会发生变化。以便于司机和行人能够在有限的时间内准确的通行。

仿真图

原理图

PCB图

程序

代码

#include <reg52.h>          //调用单片机头文件
#define uchar unsigned char   //宏定义"uchar"代替"unsigned char"。
#define uint  unsigned int    //宏定义"uint"用来定义无符号整型数。//数码管段选定义 0     1    2    3     4    5    6    7    8    9
uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//                     A    B    C    D    E   F    不显示0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};  //断码   uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
uchar smg_i = 4;    //显示数码管的个位数//数码管位选定义
sbit smg_we1 = P2^0;       //数码管位选定义
sbit smg_we2 = P2^1;
sbit smg_we3 = P3^6;
sbit smg_we4 = P3^7;char dx_s = 0;    //东西  南北 倒计时变量
sbit dx_red    = P2^4;     //东西红灯
sbit dx_green  = P2^3;     //东西绿灯
sbit dx_yellow = P2^2;     //东西黄灯sbit nb_red    = P2^7;       //南北红灯
sbit nb_green  = P2^6;     //南北绿灯
sbit nb_yellow = P2^5;     //南北黄灯  uchar flag_jtd_mode;  //交通灯的模式 根据时间
bit flag_1s = 0;
bit flag_500ms;
bit flag_dx_nb;      //东西南北模式
uchar flag_5m_value;
uchar i;
uchar flag_alarm;   //模式
uchar dx_time = 30,nb_time = 20;   //东西、南北绿灯的时间
uchar flag_jdgz ;     //交通管制/***********************数码位选函数*****************************/
void smg_we_switch(uchar i)
{switch(i){case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;}
}/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_1ms(uint q)
{uint i,j;for(i=0;i<q;i++)for(j=0;j<110;j++);
}/********************************************************************
* 名称 : display()
* 功能 : 数码管显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void display()
{uchar i;for(i=0;i<smg_i;i++){        P0 = 0xff;           //消隐 smg_we_switch(i);      //位选P0 = dis_smg[i];   //段选    delay_1ms(3);}
}/*********************定时器0、定时器1初始化******************/
void time0_init()
{EA  = 1;        //开总中断TMOD = 0X11;     //定时器0、定时器1工作方式1ET0 = 1;       //开定时器0中断 TR0 = 1;         //允许定时器0定时
//  ET1 = 1;         //开定时器1中断
//  TR1 = 1;         //允许定时器1定时
}/*********************交通灯处理函数*********************************/
void jiaotongdeng_dis()
{if(flag_1s == 1){flag_1s = 0;if(dx_s == 0){if(flag_dx_nb == 1)dx_s = nb_time;    //南北时间else dx_s = dx_time;     //东西时间flag_dx_nb = ~flag_dx_nb;}dx_s --;}dis_smg[0] = smg_du[dx_s % 10] ;dis_smg[1] = smg_du[dx_s / 10] ;dis_smg[2] = smg_du[dx_s % 10] ;dis_smg[3] = smg_du[dx_s / 10] ;/***********************南北时间*********************************/if(flag_dx_nb == 0)  {if(dx_s > 5){dx_red    = 1;  //灭 dx_green  = 0;  //亮dx_yellow = 1;  //灭nb_red    = 0;  //亮 nb_green  =    1;  //灭nb_yellow = 1;  //灭flag_5m_value = 0;  }else if(dx_s <= 5)      //当小于5秒时  黄灯要闪了{dx_red    = 1;    //灭dx_green  = 1;    //灭nb_red    = 0;    //亮nb_green  = 1;    //灭nb_yellow = 1;      //灭if(flag_500ms == 0){dx_yellow = 0;//亮   }else {dx_yellow = 1;//灭   }}}
/***********************东西时间*********************************/if(flag_dx_nb == 1)  {if(dx_s > 5){dx_red    = 0;     //亮dx_green  =   1;     //灭dx_yellow = 1;      //灭nb_red    = 1;     //灭nb_green  =   0;     //亮nb_yellow = 1;      //灭flag_5m_value = 0;   }else if(dx_s <= 5)      //当小于5秒时  黄灯要闪了{dx_red    = 0;     //灭dx_green  =    1;     //灭dx_yellow = 1;      //灭nb_red    = 1;     //灭nb_green  =   1;     //灭if(flag_500ms == 0)    //黄灯闪烁{nb_yellow = 0;   //亮 }else {nb_yellow = 1;  //灭 }}}
}/********************独立按键程序*****************/
uchar key_can;   //按键值void key()     //独立按键程序
{static uchar key_new;key_can = 20;                   //按键值还原P1 |= 0x1f;if((P1 & 0x1f) != 0x1f)      //按键按下{delay_1ms(1);            //按键消抖动if(((P1 & 0x1f) != 0x1f) && (key_new == 1)){                      //确认是按键按下key_new = 0;switch(P1 & 0x1f){case 0x1e:  key_can = 1;  break;    //得到按键值case 0x1d:  key_can = 2;  break;    //得到按键值case 0x1b:  key_can = 3;  break;    //得到按键值case 0x17:  key_can = 4;  break;    //得到按键值}}          }else key_new = 1;
}uchar menu_1,flag_s;/********************设置函数*****************/
void key_with()
{if(key_can == 4)   //交通管制按键{flag_jdgz ++;if(flag_jdgz > 5)flag_jdgz = 0;   if(flag_jdgz == 1)     //  全部亮红灯 {dx_red    = 0;  //亮 dx_green  =   1;  //灭dx_yellow = 1;  //灭nb_red    = 0;  //亮 nb_green  =    1;  //灭nb_yellow = 1;  //灭         }if(flag_jdgz == 2)    //  东西红灯  南北绿灯{dx_red    = 0;  //亮 dx_green  =   1;  //灭dx_yellow = 1;  //灭nb_red    = 1;  //灭 nb_green  =    0;  //亮nb_yellow = 1;  //灭         }if(flag_jdgz == 3)    //  南北红灯  东西绿灯{dx_red    = 1;  //灭 dx_green  =   0;  //亮dx_yellow = 1;  //灭nb_red    = 0;  //亮 nb_green  =    1;  //灭nb_yellow = 1;  //灭         }if(flag_jdgz == 4)    //  南北绿灯  东西绿灯{dx_red    = 1;  //灭 dx_green  =   0;  //亮dx_yellow = 1;  //灭nb_red    = 1;  //灭 nb_green  =    0;  //亮nb_yellow = 1;  //灭         }if(flag_jdgz == 5)    //  南北黄灯  东西黄灯{dx_red    = 1;  //灭 dx_green  =   1;  //灭dx_yellow = 0;  //亮nb_red    = 1;  //灭 nb_green  =    1;  //灭nb_yellow = 0;  //亮         }}if(key_can == 1)      //设置键{menu_1 ++;if(menu_1 >= 3){menu_1  = 0;}}if(menu_1 == 1)       //设置东西的时间{if(key_can == 2){dx_time ++ ;      //加1if(dx_time > 99)dx_time = 99;}if(key_can == 3){dx_time -- ;       //减1if(dx_time <= 10)dx_time = 10;}dis_smg[0] = smg_du[10] ;  //显示为Adis_smg[1] = smg_du[10] ;    //显示为Adis_smg[2] = smg_du[dx_time % 10] ;      //显示东西设置的时候dis_smg[3] = smg_du[dx_time / 10] ; }   if(menu_1 == 2)      //设置南北的时间{if(key_can == 2){nb_time ++ ;      //加1if(nb_time > 99)nb_time = 99;}if(key_can == 3){nb_time -- ;       //减1if(nb_time <= 10)nb_time = 10;}dis_smg[0] = smg_du[11] ;  //显示为Bdis_smg[1] = smg_du[11] ;    //显示为Bdis_smg[2] = smg_du[nb_time % 10] ;      //显示东西设置的时候dis_smg[3] = smg_du[nb_time / 10] ; }
}/********************************************************************
* 名称 : main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{time0_init();dx_s = nb_time;    //东西时间while(1){key();if(key_can < 20)key_with();
//      menu_dis();if((menu_1 == 0) && (flag_jdgz == 0))jiaotongdeng_dis();display();   }
}

器件清单

资料清单

资料下载

基于51单片机智能交通灯电路方案设计相关推荐

  1. 基于51单片机十字路口交通灯_5s黄灯闪烁

    基于51单片机十字路口交通灯_5s黄灯闪烁 目录标题 基于51单片机十字路口交通灯_5s黄灯闪烁 功能要求 仿真图 程序 主要程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 倒计时显示处理 资料清 ...

  2. 基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s

    基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s (程序+仿真+参考报告) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号J011 目录标题 基于5 ...

  3. 【019】基于51单片机的交通灯Proteus仿真设计

    一.资料内容 (1).基于51单片机的交通灯proteus仿真设计一份: (2).基于51单片机的交通灯proteus仿真设计keli源代码一份: (3).基于51单片机的交通灯proteus仿真设计 ...

  4. 基于51单片机的交通灯控制系统课程设计(含proteus仿真图及代码)

    一.设计要求: 1,十字路口的交通控制系统指挥着人和各种车辆的安全运行,对交叉口实行科学的管理与控制是交通控制工程的重要研究课题,是保障交叉口的交通安全和充分发挥交叉口的通行能力的重要措施,是解决城市 ...

  5. 基于51单片机的交通灯(资源链接见末尾)

    1.控制要求   (1) 东西南北双向红绿灯显示,红灯30s,绿灯27s,黄灯闪烁3s. (2)夜间模式:黄灯闪烁 (3)禁行模式:一侧红灯,一侧绿灯 (4)时间调节:改变红绿灯时间 2.仿真 (1) ...

  6. 51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总

    51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总 浏览必读: 使用关键词搜索可以达到事半功倍的效果. 电脑浏览器CTRL+F可以使用搜索查找 设计编号J000 功能说明: 1.四路交通 ...

  7. 基于51单片机智能有毒气体检测仪设计(煤气、酒精、co)(转发分享)

    本设计由STC89C52单片机电路+LCD1602液晶显示电路+MQ-2甲烷传感器模块电路+MQ-3酒精传感器模块电路+MQ-9 CO传感器电路+A/D采样PCF8591电路+蜂鸣器报警电路+LED指 ...

  8. 声控灯程序C语言,基于51单片机的声控灯设计设计-包含完整设计与指导文件.doc...

    基于51单片机的声控灯设计设计-包含完整设计与指导文件 工 学 院 毕 业 设 计(论文) 题 目:基于单片机的智能光控路灯的设计 专 业: 机电技术教育 班 级: *** 姓 名: *** 学 号: ...

  9. 基于51单片机远近光灯切换电路设计方案

    STC89C52单片机设计, 自动模式:通过光敏电阻检测光照强度,正常情况下,白天灯不亮,晚上的时候开启远光灯,通过超声波检测距离,如果距离小于30cm,那么远光灯转化为近光灯,超过30cm,近光灯转 ...

  10. 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)

    基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J013 目录标题 基于51单片机十字路口 ...

最新文章

  1. java urlrewriter_java url重写技术(UrlReWriter)
  2. java 国际化 properties_java处理国际化和读取properties文件代码片段
  3. ORB-SLAM2地图存储加载系统
  4. 【Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )
  5. 架构师速成7.2-为什么要学习协议、规范
  6. AutoLISP将多段线各个端点坐标写入外部文件
  7. Jmeter-获取响应结果中参数出现的次数
  8. [RabbitMQ]消息应答概念_消息手动应答代码
  9. mongoDb 给表添加+ 删除字段
  10. linux更换输入法_一日一Linux之一:CentOS 8.1 王者荣耀
  11. BugKidz专版NBSI
  12. 对目录的操作(opendir)
  13. vb/vb.net开发技巧荟萃(九)
  14. 国内外部分源软件镜像站和部分软件官方网站
  15. 国际电离层参考模型程序说明
  16. 11.25作业(ZLY)
  17. 适当的资本运作能有效提高运营商对产业链的掌控力
  18. 网易微专业 UI设计师
  19. 详解变频器、逆变器工作原理
  20. GD32450i-EVAL学习笔记 12 - EXMCNandFlash

热门文章

  1. 一些关于H.264的术语
  2. 微电子专业要学c语言吗,微电子技术专业学什么?
  3. UIControl IOS控件编程—IOS开发
  4. CronTrigger 示例 1
  5. TLSF 内存分配算法详解
  6. vue-elementui制作表格(二)
  7. 新中大连接服务器文件,新中大服务器数据库未能连接
  8. eclipse svn同步代码缓慢、未响应
  9. Eclipse SVN 项目后转换成Maven项目
  10. 用SecurAble检测cpu是否支持Intel VT虚拟化技术的LOCKED ON,LOCKED OFF,YES,NO使用说明