《单片机控制红绿灯系统方案》由会员分享,可在线阅读,更多相关《单片机控制红绿灯系统方案(14页珍藏版)》请在金锄头文库上搜索。
1、 . . . 1、方案论证1.1 设计任务 设计基于单片机的智能交通红绿灯控制系统,要求能通过按键或遥控器设置系统参数,系统运行时,“倒计时等信息”能通过数码管或点阵发光管显示,设计时应考虑交通红绿灯控制的易操作性及智能性。以单片机的最小系统为基础设计硬件,用汇编语言、或C语言设计软件。通过本设计可以培养学生分析问题和解决问题的能力,掌握Mcs51单片机的硬件与软件设计方法,从而将学到的理论知识应用于实践中,为将来走向社会奠定良好的基础。东西(A)、南北(B)两干道交于一个十字路口,各干道有一组红、黄、绿三个指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行,黄灯亮时车辆及行人小心
2、通过。红灯的设计时间为45秒,绿灯为40秒,黄灯为5秒,黄灯亮时蜂鸣器响。1.2 方案介绍采用分模块设计的思想,程序设计实现的基本思想是一个计数器 , 选择一个单片机,其部为一个计数,是十六进制计数器,模块化后,通过设置或程序清除来实现状态的转换, 由于每一个模块的计数多不是相同, 这里的各模块是以预置数和计数器计数共同来实现的,所以要考虑增加一个置数模块,其主要功能细分为,对不同的状态输入要产生相应状态的下一个状态的预置数, 如图中A道和B道,分别为次干道的置数选择和主干道的置数选择。2、交通灯系统硬件设计 2.1 单片机概述单片机是由运算器、控制器、存储器、输入设备以及输出设备共五个基本部
3、分组成的。单片机是把包括运算器、控制器、少量的存储器、最基本的输入输出口电路、串行口电路、中断和定时电路等都集成在一个尺寸有限的芯片上。通常,单片机由单个集成电路芯片构成,部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。2.2 系统构成电路板一块,AT89S51单片机一片,7448芯片2片,七段数码管八个。发光二极管6个(2个绿的,2个红的,2个黄的),100欧姆电阻20个,2个按键,2个开关,51K欧姆电阻2个,5V稳定电源1个,3个电容。系统结构框图: 图1 系统结构框图 系统工作流程:(1)程
4、序初始,通过两个传感器来判断南北与东西方向车辆通行情况。 (2) 情况判定后由AT89S51单片机p2口输出二进制信号控制红绿黄灯亮的情况。 (3) 确定那些灯亮后,由对应的七段数码管来进行到计时显示。由p1口输出来控制七段数码管的显示。(5)LED采用5V的直流电来驱动,低电平。3芯片介绍及部分电路说明3.1 AT89S51芯片选用的AT89S51与同系列的AT89C51在功能上有明显的提高,最突出是的可以实现在线的编程。用于实现系统的总的控制。其主要功能列举如下:1) 为一般控制应用的 8 位单片机2) 晶片部具有时钟振荡器(传统最高工作频率可至 33MHz) 3) 部程式存储器(ROM)
5、为 4KB4) 部数据存储器(RAM)为 128B5) 外部程序存储器可扩充至 64KB6) 外部数据存储器可扩充至 64KB 7) 32条双向输入输出线,且每条均可以单独做 I/O 的控制8) 6 个中断向量源9) 2 组独立的 16 位定时器10) 1 个全双工串行通信端口11) 8751 及 8752 单芯片具有数据的功能12) 单芯片提供位逻辑运算指令 图2 AT89C52芯片3.2 数码管显示部分电路 七段显示译码器输出低电平有效,用以驱动共阳极显示器。该集成显示译码器设有多个辅助控制端,以增强器件的功能,可将单片机输出的四位二进制数转换成10进制数与七段数码管显示对应,用于显示09
6、的数字。 图3 数码管显示电路其中LT 为测试输入。3.3 红绿LED信号显示灯LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点亮。如下图: 图4 红绿LED信号显示3.4 蜂鸣器电路 这个电路主要用于黄灯亮时蜂鸣器响五秒。 图5 蜂鸣器电路4 交通灯软件设计4.1 程序设计流程图程序设计框图 图6 程序设计框图4.2 源程序代码程序代码分为几个模块:中断模块,循环模块,延时模块。#include #define uint unsigned int#define uchar unsigned charsbit W0=P03;sbit W1=P00;sbit W2=P01
7、;sbit W3=P02;sbit Buzzer=P04;/*路口1*/sbit RED1=P20;sbit YELLOW1=P21;sbit BULLE1=P22;/*路口2*/sbit RED2=P27;sbit YELLOW2=P26;sbit BULLE2=P25;/*设置红绿灯标志位*/uchar Flage0,Flage1,Flage2,Flage3;uint n1,n2,n3,n4;uchar code Table=0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e;
8、void Delay_us(uint us);void Display(uchar Num1,uchar Num2,uchar Num3,uchar Num4);void Init_Chip(void);int main() Init_Chip(); while(1) if(Flage2=0) Display(n3/100,n3%100/10,n4/100,n4%100/10); RED1=0;YELLOW1=1;BULLE1=1; RED2=1;YELLOW2=1;BULLE2=0; if(Flage1=1)RED1=0;YELLOW1=1;BULLE1=1; RED2=1;YELLOW2=
9、0;BULLE2=1;Buzzer=0;Display(0,n2/10,n4/100,n4%100/10);Buzzer=1; if(Flage2!=0) Display(n4/100,n4%100/10,n3/100,n3%100/10); RED1=1;YELLOW1=1;BULLE1=0; RED2=0;YELLOW2=1;BULLE2=1; if(Flage1=1) RED1=1;YELLOW1=0;BULLE1=1; RED2=0;YELLOW2=1;BULLE2=1; Buzzer=0; Display(n4/100,n4%100/10,0,n2/10); Buzzer=1; re
10、turn 0;/*初始化*/void Init_Chip(void) TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; RED1=0;YELLOW1=1;BULLE1=1; RED2=1;YELLOW2=1;BULLE2=0; n2=50;n3=450;n4=500;/*显示*/void Display(uchar Num1,uchar Num2,uchar Num3,uchar Num4) W0=0; Delay_us(5); P1=TableNum1; W0=1; W1=0; Delay_us(5); P1=
11、TableNum2; W1=1; W2=0; Delay_us(5); P1=TableNum3; W2=1; W3=0; Delay_us(5); P1=TableNum4; W3=1; /*延时*/void Delay_us(uint us) uint x,y; for(x=us;x0;x-)for(y=110;y0;y-); /*中断服务程序*/void timer0() interrupt 1 TH0=(65535-50000)/256; TL0=(65535-50000)%256;/=50ms初 n1+; if(n1%50=0) Buzzer=Buzzer; if(n1=15) n1=0; n2-; n3-; n4-; if(n2=0) n2=0;Flage0=1;Flage1=0; if(n3=0) n2=50;n3=450;Flage0=0;Flage1=1; if(n4=0) n2=50;n3=450;n4=500;Flage0=0;Flage1=0;Flage2=Flage2; 5、 改进意见6、 心得体会7、 参考文献参 考 文 献1胡汉