基于51单片机智能交通灯电路方案设计
智能交通灯
- 基于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单片机智能交通灯电路方案设计相关推荐
- 基于51单片机十字路口交通灯_5s黄灯闪烁
基于51单片机十字路口交通灯_5s黄灯闪烁 目录标题 基于51单片机十字路口交通灯_5s黄灯闪烁 功能要求 仿真图 程序 主要程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 倒计时显示处理 资料清 ...
- 基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s
基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s (程序+仿真+参考报告) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号J011 目录标题 基于5 ...
- 【019】基于51单片机的交通灯Proteus仿真设计
一.资料内容 (1).基于51单片机的交通灯proteus仿真设计一份: (2).基于51单片机的交通灯proteus仿真设计keli源代码一份: (3).基于51单片机的交通灯proteus仿真设计 ...
- 基于51单片机的交通灯控制系统课程设计(含proteus仿真图及代码)
一.设计要求: 1,十字路口的交通控制系统指挥着人和各种车辆的安全运行,对交叉口实行科学的管理与控制是交通控制工程的重要研究课题,是保障交叉口的交通安全和充分发挥交叉口的通行能力的重要措施,是解决城市 ...
- 基于51单片机的交通灯(资源链接见末尾)
1.控制要求 (1) 东西南北双向红绿灯显示,红灯30s,绿灯27s,黄灯闪烁3s. (2)夜间模式:黄灯闪烁 (3)禁行模式:一侧红灯,一侧绿灯 (4)时间调节:改变红绿灯时间 2.仿真 (1) ...
- 51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总
51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总 浏览必读: 使用关键词搜索可以达到事半功倍的效果. 电脑浏览器CTRL+F可以使用搜索查找 设计编号J000 功能说明: 1.四路交通 ...
- 基于51单片机智能有毒气体检测仪设计(煤气、酒精、co)(转发分享)
本设计由STC89C52单片机电路+LCD1602液晶显示电路+MQ-2甲烷传感器模块电路+MQ-3酒精传感器模块电路+MQ-9 CO传感器电路+A/D采样PCF8591电路+蜂鸣器报警电路+LED指 ...
- 声控灯程序C语言,基于51单片机的声控灯设计设计-包含完整设计与指导文件.doc...
基于51单片机的声控灯设计设计-包含完整设计与指导文件 工 学 院 毕 业 设 计(论文) 题 目:基于单片机的智能光控路灯的设计 专 业: 机电技术教育 班 级: *** 姓 名: *** 学 号: ...
- 基于51单片机远近光灯切换电路设计方案
STC89C52单片机设计, 自动模式:通过光敏电阻检测光照强度,正常情况下,白天灯不亮,晚上的时候开启远光灯,通过超声波检测距离,如果距离小于30cm,那么远光灯转化为近光灯,超过30cm,近光灯转 ...
- 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)
基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J013 目录标题 基于51单片机十字路口 ...
最新文章
- java urlrewriter_java url重写技术(UrlReWriter)
- java 国际化 properties_java处理国际化和读取properties文件代码片段
- ORB-SLAM2地图存储加载系统
- 【Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )
- 架构师速成7.2-为什么要学习协议、规范
- AutoLISP将多段线各个端点坐标写入外部文件
- Jmeter-获取响应结果中参数出现的次数
- [RabbitMQ]消息应答概念_消息手动应答代码
- mongoDb 给表添加+ 删除字段
- linux更换输入法_一日一Linux之一:CentOS 8.1 王者荣耀
- BugKidz专版NBSI
- 对目录的操作(opendir)
- vb/vb.net开发技巧荟萃(九)
- 国内外部分源软件镜像站和部分软件官方网站
- 国际电离层参考模型程序说明
- 11.25作业(ZLY)
- 适当的资本运作能有效提高运营商对产业链的掌控力
- 网易微专业 UI设计师
- 详解变频器、逆变器工作原理
- GD32450i-EVAL学习笔记 12 - EXMCNandFlash