单片机的交通灯控制器设计Word格式.docx
- 文档编号:20733456
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:25
- 大小:432.40KB
单片机的交通灯控制器设计Word格式.docx
《单片机的交通灯控制器设计Word格式.docx》由会员分享,可在线阅读,更多相关《单片机的交通灯控制器设计Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
STC90C52单片机为40引脚芯片如图2-3所示。
I/O口线:
P0、P1、P2、P3共四个八位P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读ˆ写操作。
P0口也用以输出外部存储器的低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为三态输出的八组总线收发器,其主要电器特性的典型值如下(不同厂家具体值有差别):
型号
tPLH
tphl
PD
54LS245/74LS245
8ns
275mW
引出端符号:
AA总线端
BB总线端
/G三态允许端(低电平有效)DIR方向控制端
逻辑图:
2.2.2小系统板原理图和器件清单
标识符
器件名称
规格型号
数量
U1
单片机
STC90C52AD
1
C11C12
瓷片电容
22p或30p
2
U2
RS232驱动
MAX232
C13-C17
独石电容
0.22uF(224)
5
J1-J4,CRY
LstsHsts
接线插孔座
排母
86针
C1C2
电解电容
1.0uF/50V
C3C4C0
10uF/50V
3
CRY
晶体谐振器
6MHz
C5-C8
47uF(22uF)
4
High,Low,PS
发光二极管
φ3
JPS
接线端子
电源用
R1
金属膜电阻
200Ω
RST
按钮
小(0.2×
0.3)
R0
6.8K
JDB
DB9插座
DB9针形座
R2R3R4
3.3K
DIP插座
DIP40
R9
1M
DIP16
2.2.3大板器件清单
4个共阴极数码管
4个NPN三极管
8个1K电阻
8个550欧电阻
7个330欧电阻
5个按键
1个74LS245
3个绿色发光二极管
3个红色发光二极管
2个黄色发光二极管
2.2.4单元电路设计
晶振电路
复位电路
显示电路
2.2.5电路板焊接
焊接小板时按老师给的资料焊接,大板按自己设计的原理图焊接,焊接时应注意利用大板的结构,利用好板上的接地和电源。
焊接时注意按照器件引脚图焊接而不要按原理图的引脚焊接。
焊接好的实物图如下:
2.3软件程序设计
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitwe0=P1^0;
sbitwe1=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;
intcheck,yellow;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voidinit();
voidcheckdisplay();
voiddelay(uintz);
voiddisplay(ucharshi,ucharge,ucharshi1,ucharge1);
voidmain()
{
init();
while
(1)
{
change:
if(s0==0)//进入调时模式
{
delay(5);
if(s0==0)
{
i=1;
P0=0xbf;
TR0=0;
green=t1;
red=t2;
while(!
s0);
delay(5);
while(i==1)
{
if(s0==0)
{
delay(5);
if(s0==0)
{
i=0;
}
}
if(s1==0)
if(s1==0)
if(t3%2!
=1)
{
t1++;
green=t1;
}
if(t3%2==1)
t2++;
red=t2;
}
while(!
s1);
if(s2==0)
if(s2==0)
t1--;
t2--;
s2);
if(s3==0)
if(s3==0)
t3++;
if(t3%2==1)
P0=0x7f;
else
P0=0xbf;
s3);
shi=green/10;
ge=green%10;
shi1=red/10;
ge1=red%10;
display(shi,ge,shi1,ge1);
check=t1-t2;
if(check<
0)
check=-check;
if(check>
=10)//检查黄灯时间是否超出10s范围
while
(1)
checkdisplay();
}
}
TR0=1;
}
while(!
}//到此调时程序结束
shi=green/10;
ge=green%10;
shi1=red/10;
ge1=red%10;
display(shi,ge,shi1,ge1);
P0=0xde;
if(aa==10)
aa=0;
green--;
red--;
if(red==0||green==0)//红灯时间走完进入黄灯倒计时状态
yellow=t1-t2;
if(yellow<
yellow=-yellow;
while(yellow!
=0)
P0=0xdd;
gotochange;
//跳回调试模式
if(red==0)
P2=table[yellow];
we3=0;
delay
(1);
we3=1;
if(green==0)
we1=0;
we1=1;
if(aa==10)
aa=0;
if(red==0)
yellow--;
green--;
if(green==0&
&
yellow!
red--;
P2=0xff;
shi=green/10;
ge=green%10;
shi1=red/10;
ge1=red%10;
display(shi,ge,shi1,ge1);
if(green==0&
yellow==0)//东西方向和南北方向红绿灯换路
if(green==t1&
red==t2)
while(green!
=0&
red!
P0=0xf3;
gotochange;
shi=red/10;
ge=red%10;
shi1=green/10;
ge1=green%10;
display(shi,ge,shi1,ge1);
if(aa==10)
aa=0;
if(red==0||green==0)//红灯时间走完进入黄灯倒计时状态
yellow=t1-t2;
if(yellow<
{
yellow=-yellow;
}
while(yellow!
P0=0xeb;
if(s0==0)
gotochange;
if(red==0)
{
P2=table[yellow];
we1=0;
delay
(1);
we1=1;
}
if(green==0)
we3=0;
we3=1;
if(aa==10)
aa=0;
if(red==0)
{
yellow--;
green--;
}
if(green==0&
red--;
P2=0xff;
shi=red/10;
ge=red%10;
shi1=green/10;
ge1=green%10;
display(shi,ge,shi1,ge1);
shi=green/10;
ge=green%10;
shi1=red/10;
ge1=red%10;
display(shi,ge,shi1,ge1);
red=t2;
green=t1;
}
}
}
}
voidinit()
t1=15;
t2=10;
t3=0;
red=t2;
yellow=0;
green=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;
we0=0;
delay
(1);
we0=1;
P2=0xff;
we1=0;
we1=1;
we2=0;
we2=1;
we3=0;
we3=1;
voiddisplay(ucharshi,ucharge,ucharshi1,ucharge1)//数码管显示子程序
if(shi!
P2=table[shi];
we0=0;
delay
(1);
we0=1;
}
else
we0=1;
P2=0xff;
if(ge!
=0||shi!
P2=table[ge];
we1=0;
delay
(1);
we1=1;
if(shi1!
P2=table[shi1];
we2=0;
we2=1;
if(ge1!
=0||shi1!
P2=table[ge1];
we3=0;
we3=1;
voiddelay(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=55;
y>
y--);
voidtimer0()interrupt1
aa++;
voidexter0()interrupt0//紧急车辆通过中断程序
if(k1==0)
{
delay(5);
if(k1==0)
b=1;
TR0=0;
k1);
while(b)
{if(k1==0)
b=0;
P0=0xf6;
we0=1;
we1=1;
we2=1;
we3=1;
while(!
TR0=1;
}
3课程设计总结
为期两周的单片机课设结束了,在老师的指导和小组成员的共同努力下,终于完成了这次课程设计。
这次课程设计中我主要负责原理图的设计和pcb绘制,这次课设是我对altiumdesigner这个软件更加了解了,学会了单个原件的绘制和封装的添加,对pcb连线的规则也也有了进一步的了解。
这次课设还让我学到了很多动手实践的能力,在同伴们的共同努力下,通过软件仿真,在板子焊接好以后,稍作调试就实现了预期的效果,对于付出后的收获是很不一样的感觉。
转眼间又是一学年结束的时候,下学期就步入了大学的最后一学期,这次课设我学到了很多东西,它将会在新的一学期帮助我,更努力的学习这方面知识,为毕业后从事设计方面工作打下良好的基础,成为一名优秀的设计工作人员。
最后感谢老师们的辛勤工作和指导,谢谢!
4参考文献
[1]李朝青.单片机原理及接口技术(第3版).北京:
北京航空航天大学出版社,2005
[2]马忠梅等.单片机的C语言应用程序设计.北京:
北京航空航天大学出版社,2007
[3]赵新民.智能仪器设计基础.哈尔滨:
哈尔滨工业大学出版社,1999
[4]何立民.单片机应用技术大全.北京:
北京航空航天大学出版社,1994
课程设计
评语
成绩
指导教师
(签字)
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 交通灯 控制器 设计