交通灯设计实验报告(硬件原理图+程序)
- 格式:doc
- 大小:555.00 KB
- 文档页数:33
交通灯信号灯自动控制系统
交通灯原理图
一、系统的基本功能要求
(1)以秒为计时单位,两位数码管以十进制递减计数形式作定时显示,在递减计数回零瞬间完成换灯操作。
(2)通过键盘红黄绿三色信号灯所亮时间在0~99秒内任意设定。
(3)十字路口的通行起始状态可人工设定,运行中可通过人工干预使十字路口通行状态固定于任何一种工作模式。
硬件设计1.系统总体框图
2.电路设计
(1)显示模块
倒计时与时钟
说明:
⑴共阴极两位数码管用于倒计时;
段选端由锁存器控制,位选端用P3_0与P3_1控制⑵两个四位共阴极数码组成八位数码管用于时钟显示
段位选分别由两个锁存器控制
(2)红绿灯模块
说明:
⑴图为两方向的红绿黄灯,分别接在P0口上,由P0口控制
⑵51系列单片机的P0口内部没有集成上拉电阻,加上拉就是提高驱动能力,必须要通过上拉电阻接VCC。上拉电阻一般接1K的。
(3)键盘模块
说明
⑴P2键控制功能说明:
P2^6 key0绿灯位选择
P2^5 key1黄灯位选择
P2^4 key2 加1操作
P2^3 key3 减1操作
P2^2 key4 信号灯状态固定
P2^1 key5 信号灯状态切换
P2^0 key6时钟时分秒设置键
⑵键盘加上拉电阻为了提高驱动能力
3.复位电路:
4.时钟电路:
说明:用12M晶振时电容要选择30p
软件部分1、主程序流程图
2、时钟初值控制子程序
3、绿灯,黄灯初值设置子程序
4、时钟控制与倒计时控制
时钟,倒计时初值通过键盘输入。倒计时使用52单片机
内部定时器1实现计数,时钟控制部分是使用定时、计数器2
实现计时,以秒为基本单位在数码管中显示。时钟部分:当秒的
个位计时到了10,则秒个位清0,同时十位进一,以此类推;倒
计时部分显示是则递减显示。此过程通过判断语句实现。
5、.灯状态控制
灯的状态通过键盘扫描控制。状态固定键按下时,关闭定时器1;再次按下此键时,打开定时器。状态选择键按下时,程序跳至下一个状态的程序控制部分,从而实现状态改变。
基本功能:
(1)A B干道分别有两组红黄绿灯,各自的亮灯时间与状态由键盘控制。
(2)两位数码管用于倒计时,记录各个灯的亮灯时间,定时时间由键盘设定。
(3)十字路口通行状态可由键盘切换。
发挥部分功能:
(1) 由八位数码管显示,初试时间可由键盘设定,且在05:
00~23:00黄灯闪烁显示。
(2) 绿灯倒计时最后三秒和黄灯显示时闪烁显示(频率1HZ)。(3)人行道的红绿灯配合车辆的红绿灯同时工作。
(1) 共阴数码管10个:8个显示时间,2个显示倒计时时间
(2) 红黄绿发光二极管个4个:模拟十字路口信号灯。令各
加1个人行道上的红灯和绿灯
(3) 74HC573锁存器2个:段码和位选锁存各一个
(4) STC单片机一块按键8个 12M晶振一个排线排针
电阻电容若干
(1)问题:每次通电后都要在十八、十十九口触发一下才能正常工作。
分析:晶振电路与单片机距离过远,输入噪声很大
解决:把晶振电路改在紧挨单片机位置就可排除干扰。(2) 共阳数码管需要接三极管放大驱动电流,为节约成本选用
共阴数码管。
(3) 键盘扫描程序中加了按键前沿消抖延时,但按键不够灵敏
加了后延消抖后使得按键足够灵敏。
(4) 在段锁存器给各个数码管送段码时相互之间有影响,在显
示函数中加消影程序解决相互之间的影响。
(5) 在第一次焊接时一次性焊接完,调试时无法检查错误,而
在第二次焊接时采用边调试边焊接的方法,加快速度,提
高了准确度。
(6) 杜邦线数码管、锁存器等接线比较多,用单根导线焊接
容易相互连接且不易检查错误,用杜邦线便于检查和模块
化调试。
本次设计,我们花了不少时间和精力,但收获很大:
(1) 这次设计时间很长,期间,我们自学了单片机教程,
keil 2、proteus、protel 99se等软件,自学能力达
到很大的提高
(2)本次设计过程中,我们充分体会到了团体合作的重要性。通过我们三个人的合理分工,设计过程完成的比
较成功
(3)通过本次设计,我们学到了对复杂程序模块化的编程方法和对其进行检查与修改方法。
(4)本次设计过程中,我们的动手能力得到很大的提高,例如说焊接技术、对电路板的总体规划,等等。
<<单片机原理与应用及C51程序设计>>
清华大学大学出版社
附:软件C程序
//********************实验板上完整程序
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar aa,bb,cc,dd,ee,ff,a1,a3,con32,con31; uchar temp,ye,shi1,ge1,shi2,ge2,shi,ge,flag; int b,c=0,d=0,m=1,t;
uint n1,n2;
sbit p0_3=P0^3; //A干道黄灯
sbit p0_2=P0^2; //A干道红灯
sbit p0_4=P0^4; //A干道绿灯
sbit p0_6=P0^6; //B干道黄灯
sbit p0_7=P0^7; //B干道红灯
sbit p0_5=P0^5; //B干道绿灯
sbit wela=P3^0;