文档介绍:该【单片机控制交通灯应用设计说明 】是由【mama1】上传分享,文档一共【27】页,该文档可以免费在线阅读,需要了解更多关于【单片机控制交通灯应用设计说明 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
课程设计手册
课程名称:微控制器应用
主题:交通灯控制器
2021年6月11日
:.
目录
…………………………………………………………2
…………………………………………………………2
………………………………………………………………2
..............................2
………………………………………………2
………………………………………………………………5
………………………………………………………………5
………………………………………………………………5
……………………………………8
……………………………………………………8
……………………………………………………9
……………………………………………………11
………………………………………………………………12
3课程设计总结....................24
4参考文献..............................................25
:.
一、课程设计的目的
加强对单片机及其编程语言的理解,充分掌握和理解设计各部分的工作原理、设计过程、芯片
器件的选择、模块化编程等知识。使用单片机模拟具体应用的实现,让个人设计的东西可以实
际使用。理论知识与实践相结合,充分发挥个人能力,在实践中锻炼。提高利用所学知识分析
和解决问题的能力。提高实践能力。
设计红绿灯控制器,要求:(1)当A、B车道有车辆需要通过时,A、B车道依次放行。即
当通道A被释放时,通道B被禁止;(2)采用2个数码管显示秒,简化设计,显示不同时间
段的释放时间和禁止时间。(3)当有应急车辆请求通过时,系统必须能够禁止普通车辆通
行,A、B车道为红灯,应急车辆由K1开关模拟。(4)东、西和南北分别使用三个发光二
极管,分别为红、黄、绿。(5)开机时,默认红灯时间为10秒,绿灯时间为15秒。设置
5个按钮,分别是加1、减1、调节开关、紧急状态、启动运行。
拿到设计手册后,与同组同学讨论设计方案,观察食林大门前路口红绿灯原理,通过网上查
阅资料,使用altiumDesigner6初步设计原理图
画出示意图。绘制原理图时,由于altiumDesigner6中没有STC52AD的器件图,所以先画
出它的器件图,如下图:90C:.
根据MCU课程设计资料,设计最小系统及外围设备的连接图原理图和PCB:
示意图:
:.
印刷电路板:
:.
为了更快更好地获得设计成功,我们需要在硬件设计之前进行一些与实际相似的软件仿真。
这可以减少对设备的损坏。在电路板焊接之前,我们需要了解电路的原理和软件仿真实现的
功能。图片如下:
STC90C52AD
引脚功能
STC90C52单片机是一个40引脚的芯片,如图2-3所示。
①I/O口线:P0、P1、P2、P3,共四个八位P0口为三态双向口,俗称数据总线口,因为:.
只有这个口可以直接用于读写对外部存储器的操作。端口0也用于输出外部存储器的低8
位地址。由于是分时输出,需要外加一个锁存器来锁存地址数据,地址锁存信号为ALE。P1
口是用户专用I/O口,是准双向口。P2端口用于系统扩展时的高位8位地址线。在不扩展
外存的情况下,P口也可以作为用户I/O口,P2口也是准双向口。端口P3为双功能端口,该端
口的每一位可独立定义为第一I/O功能或第二I/O功能。用作第一个功能时,操作与P1端口
相同。
P3端口的第二个功能如表2-1所示。
图2-390C52脚示意图
②控制线:PSEN(片外访问控制)、ALE(地址锁存控制)、EA(片外存储
器选择)、RE2SET(复位控制);
③电源和时钟:CCC、VSS;XTAL1,XTAL2
表2-1引脚功能表:.
74LS245
双向总线发送器/接收器(3S)
简要说明:
245是八组三态输出的总线收发器。其主要电气特性的典型值如下(不同厂家
的具体值不同):
模型tPL酸PD
54LS245/74LS2458ns8ns275兆瓦_
引脚符号:
AA巴士总站
BB巴士总站
/G三态使能端(低电平
有效)DIR方向控制端
逻辑图:
:.
C1U1
1uFVCC10uF10uF113939JPS
U2MAX23222P10/T2/ADC0AD0/P003838
116C4C333P11/T2E/ADC1AD1/P0137371
C23C1+Vcc244P12/ADC2AD2/P0236362
4C1-Vs+655P13/ADC3AD3/P033535
5C2+Vs-1566P14/ADC4AD4/P043434
11C2-GND1477P15/ADC5AD5/P053333PSC17224
1uFT1inT1outP16/RxD/ADC6AD6/P06
1110T2inT2out7TXDGND88P17/TxD/ADC7AD7/P073232C16224
1213R4
10R2outR2inRXDP30/RxDA8/P20C15224
11112222
1212P31/TxDA9/P212323
VCC1313P32/INT0A10/P222424C14224
JDB1414P33/INT1A11/P232525
110uF1515P34/CT0A12/P242626C13224
DCDTP35/CT1A13/P25
6SRSR*16162727
DSR2RXDC01717P36/WRA14/P262828R9C847uF
RXD7P37/RDA15/P271M
RTS3TXD993131C747uF
TXDR0CRYRESETEA/P46
CTS819XT1ALE/P453030C647uF
4182929
DTR9XT2PSEN/P44
RI5R12040C547uF
GND200C11C12GNDVCCVCC
GNDGNDVCC
RS232-
GND
单片机基本配置板
VCCGND
Low低电平测试端高电平测试端High电路原理图
标识符设备名称规格数量标识符设备名称规格数量
STC陶瓷电容
U1单片机1C11C1222p或30p2
90C52AD器
RS232驱动独石电容
U2MAX2321C13-(224)5
器器
J1-J4,:.
LstsHsts器
电解电容
0_3C4C10uF/50V3
器
电解电容
哭晶体谐振器6MHz1C5-C847uF(22uF)4
器
高、低、PS引领φ33JPS终端电源用1
金属膜电阻
R1200Ω1RST按钮小(×)1
器
金属膜电阻
器
金属膜电阻
器
金属膜电阻
R91M1U2DIP插座DIP161
器
4个共阴极数码管
4个NPN晶体管
8个1K电阻
8550欧姆电阻
7330欧姆电阻
5个按钮
174LS245
3个绿色LED
3个红色LED
2个黄色LED
:.
晶振电路
复位电路
:.
显示电路
焊接老师给出的焊接小板的资料时按。按照自己设计的原理图焊接大板。焊接时要注意大板
的结构,利用好板上的接地和电源。焊接时要注意按照器件的引脚图进行焊接,而不是按照
原理图中的引脚进行焊接。焊接实物图如下::.
#include<>
#defineuchar无符号字符
#defineuint无符号整数
位我们0=P1^0;
位我们1=P1^1;
sbitwe2=P1^2;
sbitwe3=P1^3;
sbits0=P1^4;//时间调整模式切换
sbits1=P1^5;//加1个开关
sbits2=P1^6;//减1开关
sbits3=P1^7;//南北切换
sbitk1=P3^2;//应急车通过开关
ucharb,aa,ge,shi,ge1,shi1;
uintt1,t2,t3,i,red,green;
整数检查,黄色;
uchar码表[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
无效初始化();
无效检查显示();
无效延迟(uintz);
无效显示(ucharshi,ucharge,ucharshi1,ucharge1);
无效的主要():.
{
在里面();
而(1)
{
change:if(s0==0)//进入调时模式
{
延迟(5);
如果(s0==0)
{
我=1;
P0=0xbf;
TR0=0;
绿色=t1;
红色=t2;
而(!s0);
延迟(5);
而(!s0);
而(i==1)
{
如果(s0==0)
{
延迟(5);
如果(s0==0)
{
我=0;
}
}
如果(s1==0)
{
延迟(5);
如果(s1==0)
{
如果(t3%2!=1)
{
t1++;:.
绿色=t1;
}
如果(t3%2==1)
{
t2++;
红色=t2;
}
}
而(!s1);
延迟(5);
而(!s1);
}
如果(s2==0)
{
延迟(5);
如果(s2==0)
{
如果(t3%2!=1)
{
t1——;
绿色=t1;
}
如果(t3%2==1)
{
t2——;
红色=t2;
}
}
而(!s2);
延迟(5);
而(!s2);
}
如果(s3==0)
{
延迟(5);:.
如果(s3==0)
{
t3++;
如果(t3%2==1)
P0=0x7f;
别的
P0=0xbf;
}
而(!s3);
延迟(5);
而(!s3);
}
shi=绿色/10;
ge=绿色%10;
shi1=红色/10;
ge1=红色%10;
显示(shi,ge,shi1,ge1);
检查=t1-t2;
如果(检查<0)
{
检查=-检查;
}
if(check>=10)//检查黄灯时间是否超过10s
{
而(1)
{
检查显示();
}
}
}
TR0=1;
}
而(!s0);
延迟(5);:.
而(!s0);
}//至此,程序结束
shi=绿色/10;
ge=绿色%10;
shi1=红色/10;
ge1=红色%10;
显示(shi,ge,shi1,ge1);
P0=0xde;
如果(aa==10)
{
aa=0;
绿色-;
红色的-;
if(red==0||green==0)//红灯时间结束进入黄灯倒计时状态
{
黄色=t1-t2;
如果(黄色<0)
{
黄色=-黄色;
}
而(黄色!=0)
{
P0=0xdd;
如果(s0==0)
gotochange;//跳回调试模式
如果(红色==0)
{
P2=表[黄色];
我们3=0;
延迟(1);
我们3=1;
}
如果(绿色==0)
{
P2=表[黄色];:.
我们1=0;
延迟(1);
我们1=1;
}
如果(aa==10)
{
aa=0;
如果(红色==0)
{
黄色-;
绿色-;
}
如果(绿色==0&&黄色!=0)
{
黄色-;
红色的-;
}
}
P2=0xff;
shi=绿色/10;
ge=绿色%10;
shi1=红色/10;
ge1=红色%10;
显示(shi,ge,shi1,ge1);
}
}
shi=绿色/10;
ge=绿色%10;
shi1=红色/10;
ge1=红色%10;
显示(shi,ge,shi1,ge1);
if(green==0&&yellow==0)//东西方向日本南北方向
{
绿色=t1;
红色=t2;:.
如果(绿色==t1&&红色==t2)
{
而(绿色!=0&&红色!=0)
{
P0=0xf3;
如果(s0==0)
去改变;
石=红/10;
ge=红色%10;
shi1=绿色/10;
ge1=绿色%10;
显示(shi,ge,shi1,ge1);
如果(aa==10)
{
aa=0;
绿色-;
红色的-;
if(red==0||green==0)//红灯时间结束进入黄灯倒计时状
态
{
黄色=t1-t2;
如果(黄色<0)
{
黄色=-黄色;
}
而(黄色!=0)
{
P0=0xeb;
如果(s0==0)
去改变;
如果(红色==0)
{
P2=表[黄色];
我们1=0;
延迟(1);:.
我们1=1;
}
如果(绿色==0)
{
P2=表[黄色];
我们3=0;
延迟(1);
我们3=1;
}
如果(aa==10)
{
aa=0;
如果(红色==0)
{
黄色-;
绿色-;
}
如果(绿色==0&&黄色!=0)
{
黄色-;
红色的-;
}
}
P2=0xff;
石=红/10;
ge=红色%10;
shi1=绿色/10;
ge1=绿色%10;
显示(shi,ge,shi1,ge1);
}
}
shi=绿色/10;
ge=绿色%10;
shi1=红色/10;:.
ge1=红色%10;
显示(shi,ge,shi1,ge1);
}
}
红色=t2;
绿色=t1;
}
}
}
}
}
无效初始化()
{
t1=15;
t2=10;
t3=0;
红色=t2;
黄色=0;
绿色=t1;
P1=0xff;//可能会导致仿真错误
P3=0xff;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
EX0=1;
ET0=1;
TR0=1;
IT0=1;
}
voidcheckdisplay()//黄灯超时检查子程序
{
P2=0x40;
我们0=0;
延迟(1);:.
我们0=1;
P2=0xff;
P2=0x40;
we1=0;
delay(1);
we1=1;
P2=0xff;
P2=0x40;
we2=0;
delay(1);
we2=1;
P2=0xff;
P2=0x40;
we3=0;
delay(1);
we3=1;
P2=0xff;
}
voiddisplay(flyingshi,flyingge,flyingshi1,flyingge1)//数码管显示子
程序
{
if(shi!=0)
{
P2=table[shi];
we0=0;
delay(1);
we0=1;
}
else
我们0=1;
P2=0xff;
if(cut!=0||shi!=0)
{
P2=表[ge];
我们1=0;:.
延迟(1);
我们1=1;
}
别的
我们1=1;
P2=0xff;
如果(shi1!=0)
{
P2=表[shi1];
我们2=0;
延迟(1);
我们2=1;
}
别的
我们2=1;
P2=0xff;
如果(ge1!=0||shi1!=0)
{
P2=表[ge1];
我们3=0;
延迟(1);
我们3=1;
}
别的
我们3=1;
P2=0xff;
}
无效延迟(单位z)
{
单位x,y;
对于(x=z;x>0;x--)
for(y=55;y>0;y--);
}
无效timer0()中断1:.
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
voidexter0()interrupt0//紧急车辆通过中断程序
{
如果(k1==0)
{
延迟(5);
如果(k1==0)
{
b=1;
TR0=0;
而(!k1);
延迟(5);
而(!k1);
而(b)
{如果(k1==0)
b=0;
P0=0xf6;
我们0=1;
我们1=1;
我们2=1;
我们3=1;
}
}
而(!k1);
延迟(5);
而(!k1);
TR0=1;
}
}
:.
3课程设计总结
转眼间,为期两周的MCU课程设计就过去了。这两周的课程设计,让我们忙碌而充实。从当
时对MCU一无所知,到现在熟练使用,感觉受益匪浅。通过努力,我看到了他们在单片机项
目设计上取得小小的进展时脸上的兴奋和喜悦。同时,我也会和他们一起分享突破困难的喜
悦。
在这两周的设计中,我们不仅了解了自己的课程设计主题。同时,我们也从课程设计中的互
通互助中学到了很多关于单片机应用的其他知识。这些知识是在这个实践中一点一点积累
的。
至于我们的课程设计,我有更深入的体会。我组生产“交通灯控制器”。从最初的现场检查
到原理图设计,再到程序编程,再到最后的焊接调试,我什么都有。同组的参与和合作,从
这些生产过程中,我意识到要实现一个完整的系统并不容易。此外,它是一种小型交通信号
灯控制器设备。控制整个交通系统会是什么样子?毛呢布?结果,我不得不被人类的勤劳和
智慧所折服!好了,言归正传,我们先从原理图的初步设计说起。一开始我们只对交通知之
甚少,每天都能看到的东西,没想到关于红绿灯的东西有这么多,于是我们组了几个同学来
实地考察。我们在学校东门美食林旁边的十字路口看了半个小时的红绿灯变化。知识,比如
它的时间变化方式,黄灯的作用等等。之后,我们回到宿舍,开始了原理图的设计。根据我
们之前观察到的实际情况以及我们现有的电子元器件,在我们的仔细讨论下,最终设计出了
一个满意的方案,可以实现我们所有需要的原理图,然后我的主要任务就是“程序设计”。
在这一步中,我借鉴了很多人在这方面的经验设计,同时克服了很多其他人无法帮助我解决
的问题,例如:如何转换东西方向和南北方向红绿灯,中断程序的跳入跳出问题,按键定时
调整问题等等。克服了这些困难,和同一个团队一次次调试,终于完成了程序最关键的部分
在设计中。那时的解脱感真的是难以形容,是每个人心中的一块大石头。松手。在仿真没有
问题的情况下,我们开始了设计的最后一步,收到设备后就开始制作真正的系统!
我们这一步是带着松香和焊锡的味道度过的,由于准备和焊接的严谨性,我们没有遇到太多
问题,但也许这是我们唯一担心的事情,因为遗憾的是,我们在我们自己的步骤中没有学到
很多东西,但是在这一步中,我们通过积极帮助其他小组解决问题而学到了很多东西,并在
一天结束时看到了自己我很高兴一周的努力得到了回报!
最终,我们顺利完成了这个非常有意义的课程设计。最后,我想说的是,通过这次课程设计,
我们不仅学到了那些知识,也学到了很多同学间合作的重要性。同时,也加深了我们未来共
同解决问题的意识。
:.
4参考文献
[1](第3版)。:航空航天大学,2005
[2]马忠梅等。C语言单片机应用设计。:航空航天大学,2007
[3]。:科技大学,1999
[4]:航空航天大学,1994
[5],2003
:.
课程设计
注释
课程设计导师
分数(签名)年月日