




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、交通灯信号灯自动控制系统 交通灯原理图一、 系统的基本功能要求(1) 以秒为计时单位,两位数码管以十进制递减计数形式作定时显示,在递减计数回零瞬间完成换灯操作。(2) 通过键盘红黄绿三色信号灯所亮时间在秒内任意设定。(3) 十字路口的通行起始状态可人工设定,运行中可通过人工干预使十字路口通行状态固定于任何一种工作模式。二、设计思路及总体框图,方案比较u 硬件设计1.系统总体框图STC89C52 单片机锁存器(位选端)倒计时显示数码管键盘锁存器(段选端)时间显示数码管码管码管LED红绿灯复位电路时钟电路P2P1P12.电路设计(1) 显示模块倒计时 与 时钟说明:共阴极两位数码管用于倒计时 ;段
2、选端由锁存器控制,位选端用P3_0与P3_1控制两个四位共阴极数码组成八位数码管 用于时钟显示段位选分别由两个锁存器控制(2)红绿灯模块说明: 图为两方向的红绿黄灯 ,分别接在P0口上,由P0口控制 51系列单片机的P0口内部没有集成上拉电阻,加上拉就是提高驱动能力,必须要通过上拉电阻接VCC。上拉电阻一般接1K的。(3) 键盘模块说明 P2键控制功能说明: P26 key0绿灯位选择 P25 key1黄灯位选择P24 key2 加1操作 P23 key3 减1操作 P22 key4 信号灯状态固定P21 key5 信号灯状态切换P20 key6时钟时分秒设置键 键盘加上拉电阻为了提高驱动能力
3、3.复位电路:4.时钟电路:说明 :用12M晶振时 电容要选择30pu 软件部分1、 主程序流程图开始时钟初值设置子程序绿灯初值设置子程序黄灯初值设置子程序开时钟2开时钟1,倒计时状态固定状态选择2、时钟初值控制子程序Y是否有键盘按下Y是否按下时钟键时钟键盘扫描扫描加一,减一键盘各个位的加一,减一NNN3、绿灯,黄灯初值设置子程序NNYY扫描绿灯键盘控制键是否键盘按下扫描加一,减一键键盘是否按下相应位加一或减一4、时钟控制与倒计时控制时钟,倒计时初值通过键盘输入。倒计时使用52单片机内部定时器1实现计数,时钟控制部分是使用定时、计数器2实现计时,以秒为基本单位在数码管中显示。时钟部分:当秒的个
4、位计时到了10,则秒个位清0,同时十位进一,以此类推;倒计时部分显示是则递减显示。此过程通过判断语句实现。5、.灯状态控制灯的状态通过键盘扫描控制。状态固定键按下时,关闭定时器1;再次按下此键时,打开定时器。状态选择键按下时,程序跳至下一个状态的程序控制部分,从而实现状态改变。三、 实现功能说明基本功能:(1)A B干道分别有两组红黄绿灯,各自的亮灯时间与状态由键盘控制。(2)两位数码管用于倒计时,记录各个灯的亮灯时间,定时时间由键盘设定。(3)十字路口通行状态可由键盘切换。发挥部分功能:(1) 由八位数码管显示,初试时间可由键盘设定,且在05:0023:00黄灯闪烁显示。(2) 绿灯倒计时最
5、后三秒和黄灯显示时闪烁显示(频率1HZ)。(3)人行道的红绿灯配合车辆的红绿灯同时工作。四、 所用器件与功能(1) 共阴数码管10个:8个显示时间,2个显示倒计时时间(2) 红黄绿发光二极管个4个:模拟十字路口信号灯。令各加1个人行道上的红灯和绿灯(3) 74HC573锁存器2个:段码和位选锁存各一个(4) STC单片机一块 按键8个 12M晶振一个 排线 排针 电阻 电容若干五、 故障及问题分析(1)问题:每次通电后都要在十八、十十九口触发一下才能正常工作。分析:晶振电路与单片机距离过远,输入噪声很大解决:把晶振电路改在紧挨单片机位置就可排除干扰。(2) 共阳数码管需要接三极管放大驱动电流,
6、为节约成本选用共阴数码管。(3) 键盘扫描程序中加了按键前沿消抖延时,但按键不够灵敏加了后延消抖后使得按键足够灵敏。(4) 在段锁存器给各个数码管送段码时相互之间有影响,在显示函数中加消影程序解决相互之间的影响。(5) 在第一次焊接时一次性焊接完,调试时无法检查错误,而在第二次焊接时采用边调试边焊接的方法,加快速度,提高了准确度。(6)杜邦线 数码管、锁存器等接线比较多,用单根导线焊接容易相互连接且不易检查错误,用杜邦线便于检查和模块化调试。六、 心得体会本次设计,我们花了不少时间和精力,但收获很大:(1) 这次设计时间很长,期间,我们自学了单片机教程,keil 2、proteus、prote
7、l 99se等软件,自学能力达到很大的提高(2)本次设计过程中,我们充分体会到了团体合作的重要性。通过我们三个人的合理分工,设计过程完成的比较成功(3) 通过本次设计,我们学到了对复杂程序模块化的编程方法和对其进行检查与修改方法。(4)本次设计过程中,我们的动手能力得到很大的提高,例如说焊接技术、对电路板的总体规划,等等。七、 参考资料<<单片机原理与应用及C51程序设计>> 清华大学大学出版社附:软件C程序/*实验板上完整程序#include"reg52.h"#define uint unsigned int#define uchar unsign
8、ed charuchar 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=P03; /A干道黄灯sbit p0_2=P02; /A干道红灯sbit p0_4=P04; /A干道绿灯sbit p0_6=P06; /B干道黄灯sbit p0_7=P07; /B干道红灯sbit p0_5=P05; /B干道绿灯sbit wela=P30;sbit dula=P31;sbit p3_2=P32;sbit p3
9、_3=P33;uchar data timedate13=0x00,0x00,0x00;/显示缓冲区两位数字uchar data timedate23=0x00,0x00,0x00;/显示缓冲区两位数字uchar data timedate37=0x00,0x00,0x00,0x00,0x00,0x00,0x00;/显示缓冲区两位数字char code wei8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/位扫描sbit key0=P26;/绿灯控制键sbit key1=P25;/黄灯控制键sbit key2=P24;/加一键sbit key3=P23;
10、/减一键sbit key4=P22; /保存状态sbit key5=P21;/状态改变sbit key6=P20; /时钟控制键uchar data con3=0x00;uchar data con=0x00;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;void display(uchar shi,uchar ge);void display3(uchar aa,uchar bb,uchar cc,uchar dd,uchar ee,uchar ff);void delay(uint z);vo
11、id init();keyscan1() ;keyscan2() ;keyscan3() ;void main()init();/初始化子程序while(1)/*键盘扫描控制程序 if(con=0&&ye=0) keyscan3();display3(aa,bb,cc,dd,ee,ff);if(con3=0&&ye=0)/调用键盘扫描程序 keyscan1(); shi1=n1/10;ge1=n1%10;display(shi1,ge1);if(con=0&&con3=0)keyscan2();shi2=n2/10;ge2=n2%10;displ
12、ay(shi2,ge2);if(con>=3&&ye=0)|(ye>=3&&con=0)display(0,0);P0=0xff;delay(1);/*保存当前状态if(key4=0) delay(12); while(key4=0) ; delay(12); d+;if(d%2)TR0=0;/关闭计数器,下面else if语句不执行,直接到delay()显示语句 else TR0=1;/*状态改变,进入下一个状态if(key5=0)delay(12); while(key5=0) ; delay(12);m+;c+;if(c%2) temp=n2;
13、else temp=n1;/*状态选择if(t<5|t>=23)if(a1/10=0)p0_3=0;p0_6=0;else p0_3=1;p0_6=1;delay(1);elseif(m%4=1) p0_6=1;p0_2=1;if(temp>3)p0_4=0;else if(a1/10=0)p0_4=0;else p0_4=1; /A绿灯p0_7=0; /B红灯delay(1); else if(m%4=2) p0_4=1;if(a1/10=0)p0_3=0; else p0_3=1;/A黄灯p0_7=0; /B红灯delay(1); else if(m%4=3) p0_3=
14、1;p0_7=1;p0_2=0; /A红灯if(temp>3)p0_5=0; elseif(a1/10=0)p0_5=0;else p0_5=1; /B绿灯delay(1); else if(m%4=0) p0_5=1;p0_2=0; /A红灯if(a1/10=0)p0_6=0; else p0_6=1; /B黄灯delay(1); /*倒计时if(con>=3&&ye>=3) TR0=1; if (b!=0) temp=n1; /只有当扫描到有输入时temp才等于n,否则为自减后的值 shi=temp/10; ge=temp%10; if(a1=20) a1
15、=0;temp-;if(temp=-1)c+; /进入下一个状态,赋倒计时起始值m+; /进入下一个状态,赋灯的状态if(c%2) temp=n2;else temp=n1; display(shi,ge);b=0; void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-); void display(uchar shi,uchar ge)P1=0x00;wela=0;p3_2=1; dula=1; P1=tableshi;dula=0; p3_3=0; delay(1);p3_3=1;dula=1;P1=tablege
16、;dula=0;p3_2=0;delay(1);p3_2=1;void display3(uchar aa,uchar bb,uchar cc,uchar dd,uchar ee,uchar ff)p3_2=1;p3_3=1;P1=0xff; wela=1; P1=wei7;wela=0;P1=0x00;dula=1;P1=tableaa;dula=0; delay(1);dula=1;P1=tablebb;dula=0;P1= 0xff;wela=1;P1=wei6;wela=0;delay(1);dula=1; P1=table10;dula=0;P1=0xff;wela=1;P1= we
17、i5;wela=0; delay(1);dula=1; P1=tablecc;dula=0;P1=0xff;wela=1;P1= wei4;wela=0; delay(1);dula=1;P1=tabledd;dula=0;P1= 0xff;wela=1;P1=wei3;wela=0;delay(1);dula=1; P1=table10;dula=0;P1=0xff;wela=1;P1= wei2;wela=0; delay(1);dula=1; P1=tableee;dula=0;P1=0xff;wela=1;P1= wei1;wela=0; delay(1);dula=1;P1=tabl
18、eff;dula=0;P1= 0xff;wela=1;P1=wei0;wela=0;delay(1);void init() wela=0;dula=0;TH1=(65536-50000)/256;TL1=(65536-50000)%256;TMOD=0x11;EA=1;ET1=1;TR1=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;TR0=0; /*绿灯键盘扫描程序keyscan1() if(key0=0) /b=0; delay(12); while(key0=0) ; delay(12); con+; /b+; if(con!=
19、0) /con=1|2时的加一运算 if(key2=0)delay(12); while(key2=0) ; delay(12);timedate1con+;if(timedate1con>9)timedate1con=0; shi1=timedate11; ge1=timedate12; display(shi1,ge1); n1=10*shi1+ge1; if(con!=0) /con=1|2时的减一运算if(key3=0)delay(12); while(key3=0) ; delay(12);timedate1con-;if(timedate1con=255)timedate1c
20、on=9;shi1=timedate11; ge1=timedate12; display(shi1,ge1); n1=10*shi1+ge1;/*黄灯控制键扫描keyscan2() if(key1=0) b=0; delay(12); while(key1=0) ; delay(12); ye+; b+; if(ye!=0) /con=1|2时的加一运算if(key2=0)delay(12); while(key2=0) ; delay(12);timedate2ye+;if(timedate2ye>9)timedate2ye=0; shi2=timedate21; ge2=timed
21、ate22; display(shi2,ge2) ;n2=10*shi2+ge2;if(ye!=0) /con=1|2时的减一运算if(key3=0)delay(12); while(key3=0) ; delay(12);timedate2ye-;if(timedate2ye=255)timedate2ye=9;shi2=timedate21; ge2=timedate22; display(shi2,ge2); n2=10*shi2+ge2;void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;a1+;/*
22、时钟控制键扫描程序 keyscan3() if(key6=0) delay(12); while(key6=0) ; delay(12); con3+; TR1=0;if(con3=5)TR0=1;con3=0; if(con3!=0) /con=1|2时的加一运算if(key2=0)delay(12); while(key2=0) ; delay(12);timedate3con3+;if(con3=1)con31=2;else if(con3=2)con31=9;else if(con3=3)con31=5;else if(con3=4)con31=9;if(timedate3con3>con31)timedate3con3=0;if(timedate31=2&&timedate32=4)timedate32=0;timedate31=0;if(con3!=0)if(key3=0)delay(12); while(key3=0) ; delay(12);timedate3con3-;if(con3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 降低留置针堵管发生率:PDCA质量持续改进
- 3-1组合逻辑电路的分析
- 福建省厦门市2023~2024学年高一数学下学期第二次月考试卷
- 四川省甘孜藏族自治州稻城县2025年小升初数学高频考点模拟卷含解析
- 山东省青岛市胶州实验2024-2025学年3月初三模拟考试语文试题含解析
- 上海电子信息职业技术学院《英语:写作》2023-2024学年第二学期期末试卷
- 烟台南山学院《工程法律实务》2023-2024学年第二学期期末试卷
- 山东省潍坊市诸城市2025年初三二诊模拟物理试题试卷含解析
- 武汉海事职业学院《基础医学概论Ⅱ3(病理学)》2023-2024学年第一学期期末试卷
- 西安健康工程职业学院《跨文化交际理论导论俄》2023-2024学年第二学期期末试卷
- 2025年高考英语二轮复习专题01 阅读理解之细节理解题(课件)(新高考)
- GB/T 27030-2025合格评定第三方符合性标志的通用要求
- 国家卫计委-医院感染管理质量控制指标2024年版
- 超星尔雅学习通《军事理论(中北大学)》2025章节测试附答案
- 2025年郑州澍青医学高等专科学校单招职业适应性测试题库新版
- 预制菜烹饪知识培训课件
- 教学设计-3.7函数图形的描绘
- 《数字资源利用》课件
- 《马达保护器培训》课件
- 消防安全重点单位管理
- 2025年度花岗岩墓碑石材采购合同范本
评论
0/150
提交评论