单片机控制十字路口交通灯
更新时间:2023-06-10 04:08:01 阅读量: 实用文档 文档下载
- 单片机控制十字路口红绿灯推荐度:
- 相关推荐
设计题目:十字路口交通灯控制2
一、 要求
1、通过LED控制四个路口的红黄绿灯的变化。 2、绿灯表示通行,红灯表示停止,黄灯表示等待。
3、每次绿灯变红灯时黄灯先亮五秒,此时另外干道上的红灯不变。 4、每次变化时绿灯闪烁五次。 二、 分析
课程设计采用实验室的单片机作为主控来实现十字路口交通灯的变化规律,十字路口的红绿灯交替变化,用双色发光二级管来模拟交通灯变化,使用定时器/计数器0作为定时器,从P1和P3口输出。
三、 设计
1、硬件设计(包括设计方案及说明、完整的硬件连接图等)
(1)因为本实验是交通灯控制实验,所以要先了解交通灯的变化规律。假设一个十字路口为东西和南北方向,初始状态是状态0(各个路口都是红灯);首先是状态1(东路口通车,其他路口红灯);过一段时间装入状态2(东路口绿灯闪几次转黄灯亮,延时几秒,其他路口仍然红灯);再转入状态3(南路口绿灯亮,其他路口红灯亮);过一段时间转入状态4(南路口绿灯闪几次转黄灯亮,延时几秒,其他路口仍然红灯);再转入状态5(西路口绿灯亮,其他路口红灯亮);过一段时间转入状态6(西路口绿灯闪几次转黄灯亮,延时几秒,其他路口仍然红灯);再转入状态7(北路口绿灯亮,其他路口红灯亮);过一段时间转入状态8(北路口绿灯闪几次转黄灯亮,延时几秒,其他路口仍然红灯);最后循环至状态1。
(2)各用一组红黄绿色LED分别表示东南西北方向。 (3)由定时器来产生通车延时时间,时间间隔为5s。 (4)用软件延时方法产生“闪”延时时间。
说明:用CPU的P1口和P3口输出控制信号,控制12个LED灯(红、黄、绿),模拟交通灯的管理。各个输出口对应的IO
P1.0·····LED00
P1.1·····LED01 P1.2·····LED02 P1.3·····LED03 P1.4·····LED04 P1.5·····LED05 P1.6·····LED06 P1.7·····LED07 P3.2·····LED08 P3.3·····LED09 P3.4·····LED10 P3.5·····LED11
2、软件编程(包括流程图、完整的汇编源程序及其注释) 程序流程图如图1所示:
程序如下:
#include<reg52.h>
sfr light_address_1=0x90; sfr light_address_2=0xB0;
sbit red_e=P1^0; sbit yellow_e=P1^1; sbit green_e=P1^2;
sbit red_s=P1^3; sbit yellow_s=P1^4; sbit green_s=P1^5;
sbit red_w=P1^6; sbit yellow_w=P1^7; sbit green_w=P3^2;
sbit red_n=P3^3; sbit yellow_n=P3^4; sbit green_n=P3^5;
bit light_up=0; bit light_down=1;
unsigned char light_down_all=0xff; unsigned char count=0;
void delay_MS(unsigned char data0); void Init_timer0(void); void light_state1(); void light_state2(); void light_state3(); void light_state4(); void light_state5(); void light_state6(); void light_state7(); void light_state8();
void main() {
Init_timer0(); while(1)
{light_address_1=light_down_all; light_address_2=light_down_all; light_state1();
light_address_1=light_down_all;
light_address_2=light_down_all; light_state2();
light_address_1=light_down_all; light_address_2=light_down_all; light_state3();
light_address_1=light_down_all; light_address_2=light_down_all; light_state4();
light_address_1=light_down_all; light_address_2=light_down_all; light_state5();
light_address_1=light_down_all; light_address_2=light_down_all; light_state6();
light_address_1=light_down_all; light_address_2=light_down_all; light_state7();
light_address_1=light_down_all; light_address_2=light_down_all; light_state8(); } }
void light_state1() //东路
口绿灯亮,其他路口红灯亮
{ red_s=light_up; red_w=light_up; red_n=light_up; green_e=light_up; count=0;
while(count<100) { } }
void light_state2() //东路
口绿灯闪几次转黄灯亮,延时几秒,其他路口红灯任然亮
{
unsigned char j; red_s=light_up; red_w=light_up; red_n=light_up; for(j=0;j<5;j++) {
green_e=light_up; delay_MS(500);
green_e=light_down; delay_MS(500); }
yellow_e=light_up; count=0;
while(count<20) { } }
void light_state3() //南路
口绿灯亮,其他路口红灯亮
{
green_s=light_up; red_e=light_up; red_w=light_up; red_n=light_up; count=0;
while(count<100) { } }
void light_state4() //南
路口绿灯闪几次转黄灯亮,延时几秒,其他路口红灯亮
{
unsigned char j; red_e=light_up; red_w=light_up; red_n=light_up; for(j=0;j<5;j++) {
green_s=light_up; delay_MS(500);
green_s=light_down; delay_MS(500); }
yellow_s=light_up; count=0;
while(count<20) { } }
void light_state5() //西
路口绿灯亮,其他路口红灯亮 {
red_e=light_up; red_s=light_up; red_n=light_up; green_w=light_up; count=0;
while(count<100) { } }
void light_state6() //{
unsigned char j; red_e=light_up; red_s=light_up; red_n=light_up; for(j=0;j<5;j++) {
green_w=light_up; delay_MS(500);
green_w=light_down; delay_MS(500); }
yellow_w=light_up; count=0;
while(count<20) { } } void light_state7() //{
red_e=light_up; red_s=light_up; red_w=light_up; green_n=light_up; count=0;
while(count<100) { } }
void light_state8() //
西
路口绿灯闪几次转黄灯亮,其他路口红灯北路口绿灯亮,其他路
口红灯亮北路口绿灯闪几次转
{
unsigned char j; red_e=light_up; red_s=light_up; red_w=light_up; for(j=0;j<5;j++) {
green_n=light_up; delay_MS(500);
green_n=light_down; delay_MS(500); }
yellow_n=light_up; count=0;
while(count<20) { } }
void delay_MS(unsigned char data0) {
unsigned char i,j; for(i=0;i<data0;i++) for(j=0;j<120;j++); }
void Init_timer0(void) {
TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; TR0=1; }
void Timer0_int() interrupt 1 {
count++; TH0=0x3c; TL0=0xb0; }
黄灯亮,其他路口红灯亮
3、调试说明
在实验室将程序输入电脑进行编译,连接好试验箱上的P1口和P3口与各个LED灯的连线后,将程序通过STC下载软件下载到单片机中,然后上电运行,观察各个LED灯的变化,通过调试,能够达到实验要求,各个LED灯交替闪烁变化,实现交通灯的控制。 下图是用keil软件编译的情况:
下图是STC下载软件:
4、设计结果及错误分析
在软硬件都调试完毕之后,在把所烧写的程序烧入单片机之后,我们开始进行性能的测试,在按下电源按钮后,能够进入交通灯模拟状态,该设计呢鞥够改变红绿灯亮的时间,使交通运行时间更具优化,也更具人性化,在保证交通畅通的情况下减少等待时间。
写好程序后进行了程序的调试和分析,经过调试,只是少了路口左转的功能,具有直行和左转一体的功能,也有黄灯闪烁等待的过程。通过多次的调试分析和论证,最终将程序完整化,完善化。
四、 总结
本系统的硬件控制电路图简单,用汇编语言编程时,位操作指令用的较多,但遇到了很多困难,最后还是采用C语言编写。本软、硬件系统在单片机开发装置上调试运行取得较好的效果,对灵活有效地利用交通灯控制行车安全,车辆分流有一定的实际意义。
从本交通信号灯自动控制系统的设计与实验中可以看出,涉及到数据输出程序的设计方法;模拟交通灯控制的方法;信号灯的使用.在此基础上我们可对其进行改进,加入中断的要求,从而涉及外部中断技术的基本使用方法和编程方
法.8051内部定时/计数器的使用和编程方法;而且还可以在外部中断中增加用继电器的开合模拟急救车通过的声音等要求.
在整个设计与制作过程中,从一开始拿到题目,经过查阅有关方面的书籍,到分析与设计,以P1和P3口作为输出来控制LED灯的亮灭和闪烁,用C语言和Keil软件来编写程序,来实现对硬件电路的控制。对于程序的调试,通过多次调试,得到完整正确的程序。继而,将程序烧录到单片机芯片中,LED显示正常达到本次设计的目的。完成了适当的硬件电路的设计和软件的编程与调试、控制。
正在阅读:
单片机控制十字路口交通灯06-10
幼儿园中秋节活动主持词_003-26
2019年好听的新生儿名字大全12-24
《政治学》读书报告 - 分权学说演化及其进步性和局限性02-29
《纱线产品设计》参考资料 - 图文04-19
(苏教版)四年级数学下册第二单元测试卷11-06
2012年系统强化阶段刑法总则配套测试题(M)答案解析05-11
2018年华中科技大学教育科学研究院312心理学专业基础综合之当代教育心理学考研仿真模拟五套题05-18
描写桂花的作文精选06-13
良性前列腺增生症的微创治疗进展08-13
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 交通灯
- 单片机
- 十字路口
- 控制
- 51CTO下载-Photoshop_CS4基础自学教程
- 企业所得税各项扣除标准
- 蜂胶超临界CO2萃取物的体外抑瘤
- 智慧防务RFID无源仓库智能管理系统一
- 关于员工培训管理的规定
- 板块四 第二篇 常用文体二 第二讲 以例服人,以理服人——议论文论据的使用
- 四川宜宾县双龙镇初级中学校高中历史《专题一第一课 中国早期政治制度的特点》导学案 人民版必修1
- 调幅接收设计实验报告
- 韦伯定律在日常生活中的应用
- 怎样将两个pdf合并成一个的
- 主力吸筹的K线特征
- 新PEP小学英语五年级下册堂堂清unit4训练题
- 《技术方法》模拟试题
- 2012考研考场事项考试结束后
- 土力学与地基基础复习资料
- 昆明旅游攻略-昆明旅游景点有哪些
- 高职院校改革发展方向及人才培养模式研究
- 地铁与轻轨结课论文
- 编制和实施全国水利信息化发展_十二五_规划的思考
- 严复教育救国思想简述