交通灯.docx
- 文档编号:4963119
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:22
- 大小:442.81KB
交通灯.docx
《交通灯.docx》由会员分享,可在线阅读,更多相关《交通灯.docx(22页珍藏版)》请在冰豆网上搜索。
交通灯
重庆大学本科学生课程设计任务书
课程设计题目
十字路口交通灯控制器设计
学院
光电工程学院
专业
光电信息工程
年级
2011
设计要求:
利用单片机设计一个十字路口交通灯控制器,要求如下:
(1)用单片机定时器产生秒信号,控制十字路口的红、绿、黄灯交替亮灭,并利用LED数码管显示十字路口两个方向的剩余时间;
(2)能用按键设置两个方向的通行时间(绿、红灯点亮时间)和暂缓通行时间(黄灯点亮时间);(3)控制器的工作符合一般交通灯控制要求。
学生应完成的工作:
1、按照设计要求,完成芯片的选型与电路设计;
2、在ProteusISIS7中完成电路原理图绘制。
3、利用C语言或汇编语言编写相关软件。
4、利用ProteusISIS7进行仿真。
5、完成答辩与设计报告。
目前资料收集情况(含指定参考资料):
1、《Protues教程》(第2版),朱清惠等,清华大学出版社,2011。
2、《单片机应用及C51程序设计》,陈涛,机械工业出版社,2008。
3、《单片机原理与C51程序设计基础教程》,张欣等,清华大学出版社,2010。
4、《MSP430超低功耗单片机原理与应用》,沈建华等,清华大学出版社,2013。
4、选定芯片的数据手册(学生自行下载)。
课程设计的工作计划:
6月9日:
下达任务、准备资料;
6月10日~6月14日:
设计方案确定、芯片选择、原理图设计;
6月15日~6月17日:
软件设计与仿真;
6月18日~6月19日:
撰写课程设计报告、准备答辩;
6月20日:
分组进行课程设计答辩;
6月21日:
整改报告并提交。
任务下达日期2013年6月8日
完成日期2013年6月21日
指导教师杨利平(签名)
学生(签名)
1、方案实现
通过AT89C51并接数码管与发光二极管来实现,其中8个数码管用来显示秒值,东、西、南、北各两个。
12个发光二极管显示交通灯状态,东、西、南、北各三个,分为红、绿、黄三种颜色。
正常状态通过普通的I/O口功能实现,特殊状态用外部中断(P3.2和P3.3)来实现。
2、程序设计思路
首先东西方向绿灯亮,南北方向红灯亮,同时开始倒计时20s,在7段数码管上显示剩余时间(状态S1);20s倒计时结束后,开始3s倒计时,并且东西方向绿灯开始闪烁,南北方向红灯亮(状态S2);3s倒计时结束后再开始2s倒计时,并且东西方向黄灯闪烁,南北还是红灯亮(状态S3);当2s倒计时结束后,开始20s倒计时,此时南北方向绿灯亮,东西方向红灯亮(状态S4);接下来南北方向绿灯闪烁3s(状态S5);再南北方向黄灯闪烁2s,(状态S6)接着开始循环。
任何时候,按下按键就进入中断程序处理紧急情况,按下按键1,就能改变倒计时显示时间为30s,同时红绿灯状态保持不变,中断后自动返回原来状态;按下按键2,就能改变倒计时显示时间为10s,同时东西、南北红绿灯状态变为红色(禁止通行),不断开按键就一直在中断中循环,断开按键后自动返回初始状态S1。
3、硬件连线及原理图
P2.1~P2.6接LED发光二极管;P0、P1口各接七段数码管,分别显示倒计时的个位、十位;P3.2和P3.3分别接按键
图1硬件原理图
3.1复位电路
图2手动复位电路
图3自动复位电路
主要用于当程序运行出错或进入死循环时,复位清零。
当采用的晶体频率为12MHz时,C=10µF,R=8.2kΩ;当采用的晶体频率为6MHz时,C=22µF,R=1kΩ.
3.2时钟电路
图4内部时钟电路
内部时钟电路构成稳定的自激振荡器,外接石英晶体时,电容C1和C2的值常选择为30pf左右;外接陶瓷谐振器时,C1和C2的值为47pf。
接入电容C1和C2有利于振荡器起振,对频率有微调作用。
3.3八段LED数码管
LED灯的显示原理:
通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如dp,g,f,e,d,c,b,a全亮显示为8,本次设计采用共阳极连接驱动代码,代码表如下表5所示。
表5驱动代码表
显示数值
dp,g,f,e,d,c,b,a
驱动代码
0
11010000
C0H
1
11111001
F9H
2
10100100
A4H
3
10110000
B0H
4
10011001
99H
5
10010010
92H
6
10000010
82H
7
11111000
F8H
8
10000000
80H
9
10010000
90H
图5共阳极接法
相应在程序软件上,可以通过调用程序给定的秒值经过除法计算,算出需要显示的个位和十位,然后有DPTR调取LEDMAP的代码。
3.4定时器
(1)AT89C1晶振频率为12MHz,则机器周期T=1us,定时器选择不同的工作方式下最大定时时间分别为:
方式0:
Tmax=8.192ms
方式1:
Tmax=65.536ms
方式2、3:
Tmax=0.256ms
(2)定时器计数初值计算
选择定时器0,工作方式1,设定时器初值为50ms,则根据下式计算50000us=(65536-t)x1us
求得计数初值t=15536=0011110010110000B
其中高8位装入TH0,即TH0=3CH;低8位装入TL0,即TL0=0B0H。
4、软件程序设计
本次实验设计的程序主要包含:
主程序,两个中断程序,计时程序,显示程序,延时1s的程序。
具体见以下叙述。
4.1主程序中,是顺次执行,从状态S1顺次执行到S6,然后再次循环。
流程图如下:
图6主程序流程图
定义I/O口:
H_REDBITP2.1
H_GREENBITP2.2;南北交通灯
H_YELLOWBITP2.3
L_REDBITP2.4
L_GREENBITP2.5;东西交通灯
L_YELLOWBITP2.6
状态S1:
东西方向绿灯亮,南北方向红灯亮
STATE1:
SETBH_RED
CLRH_GREEN
CLRH_YELLOW
CLRL_RED
SETBL_GREEN
CLRL_YELLOW
状态S2:
东西方向黄灯亮,南北方向红灯亮
STATE2:
SETBH_RED
CLRH_GREEN
CLRH_YELLOW
CLRL_RED
CLRL_GREEN
SETBL_YELLOW
RET
4.2显示程序
图7显示程序流程图
该显示程序主要是为了实现倒计时的显示,先将存在SECOND内的数值通过除法运算取出个位与十位,然后通过查表指令在LEDMAP取出字形,并用两个7段SEG把高,低位显示出来。
DISPLAY:
MOVA,SECOND
MOVB,#10
DIVAB
MOVDPTR,#LEDMAP;取表首地址
MOVCA,@A+DPTR;查表
MOVP1,A;显示十位
MOVA,B
MOVCA,@A+DPTR;显示个位
MOVP0,A
RET
LEDMAP:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H,80H,90H
4.3计时程序
图8计时程序流程图
COUNT:
LCALLDISPLAY
WAIT1:
JNBTF0,WAIT1;定时器50ms未到,则等待
CLRTF0
MOVTH0,#3CH;定时器50ms到了,清定时器0溢出标志位
MOVTL0,#0B0H
LCALLDISPLAY
DJNZR2,WAIT1;是否到1s
MOVR2,#20
DECSECOND;到1s,则秒值减1
DJNZR3,WAIT1;20s是否倒计时减完,未完则返回
RET
4.4中断程序
两个中断程序分别靠双掷开关控制高低电位而实现,中断程序EXINT1和中断程序EXINT2及流程图如下:
图9中断程序流程图
中断初始设置
MOVIE,#10000101B;INTO、INT1中断允许
MOVIP,#00000100B;INT1中断优先
MOVTCON,#00000101B;INTO、INT1为边沿触发
MOVSP,#80H;设定堆栈指针
4.31s延时子程序
1s延时程序主要用于中断是进行调用其流程图及程序如下:
图10延时程序流程图
DELAY:
MOVTMOD,#01H;1s定时器延时子程序
MOVTH0,#3CH;置初值
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动定时器
MOVR5,#20
LLLL0:
JBTF0,LLLL1;查询计数溢出位TF0
AJMPLLLL0
LLLL1:
MOVTH0,#3CH;重新设置初值
MOVTL0,#0B0H
CLRTF0
DJNZR5,LLLL0
RET
也可以用软件方法实现1s延时:
DELAY:
MOVR5,#100
DD1:
MOVR6,#20
DD2:
MOVR7,#248
DJNZR7,$
DJNZR6,DD2
DJNZR5,DD1
RET
5、仿真效果图
附录:
SECONDEQU60H
H_REDBITP2.1
H_GREENBITP2.2
H_YELLOWBITP2.3
L_REDBITP2.4;定义IO端口
L_GREENBITP2.5
L_YELLOWBITP2.6
ORG0000H;CPU复位入口
LJMPMAIN
ORG0003H;INT0中断入口
AJMPEXINT1
ORG0013H;INT1中断入口
AJMPEXINT2
MAIN:
MOVIE,#10000101B;INTO、INT1中断允许
MOVIP,#00000100B;INT1中断优先
MOVTCON,#00000101B;INTO、INT1为边沿触发
MOVSP,#80H;设定堆栈指针
MOVTMOD,#01H;设置定时器0为方式1
MOVTH0,#3CH
MOVTL0,#0B0H;设置定时器的初始值,定时50ms
CLRTF0;清定时器0溢出标志
SETBTR0;启动定时器
START:
CLRA
MOVP1,A;首先关闭显示
MOVP0,A
;状态1,东西方向绿灯亮,南北方向红灯亮
MOVR2,#20
MOVR3,#21
MOVSECOND,#20;20s初值
LCALLSTATE1
LCALLCOUNT
;状态2,东西方向绿灯闪,南北方向红灯亮
MOVR0,#01H;标志位,东西方向绿灯闪
MOVR2,#2
MOVR3,#4
MOVR4,#10
MOVSECOND,#3;3s初值
LCALLDISPLAY
LCALLSTATE2
LCALLCOUNT1
;状态3,东西方向黄灯闪,南北方向红灯亮
MOVR0,#02H;标志位,东西方向黄灯闪
MOVR2,#2
MOVR3,#3
MOVR4,#10
MOVSECOND,#2;2s初值
LCALLSTATE3
LCALLCOUNT1
状态4,东西方向红灯亮,南北方向绿灯亮
MOVR2,#20
MOVR3,#21
MOVSECOND,#20;20s初值
LCALLSTATE4
LCALLCOUNT
状态5,东西方向红灯亮,南北方向绿灯闪
MOVR0,#03H;标志位,南北方向绿灯闪
MOVR2,#2
MOVR3,#4
MOVR4,#10
MOVSECOND,#3;3s初值
LCALLSTATE5
LCALLCOUNT1
状态6,东西方向红灯亮,南北方向黄灯闪
MOVR0,#04H;标志位,南北方向黄灯闪
MOVR2,#2
MOVR3,#3
MOVR4,#10
MOVSECOND,#2
LCALLSTATE6
LCALLCOUNT1
LJMPSTART
;***********************************************
;计时程序
;*************************************************
COUNT:
LCALLDISPLAY
WAIT1:
JNBTF0,WAIT1;定时器50ms未到,则等待
CLRTF0
MOVTH0,#3CH;定时器50ms到了,清定时器0溢出标志位
MOVTL0,#0B0H
LCALLDISPLAY
DJNZR2,WAIT1;是否到1s
MOVR2,#20
DECSECOND;到1s,则秒值减1
DJNZR3,WAIT1;20s是否倒计时减完,未完则返回
RET
COUNT1:
LCALLDISPLAY
WAIT2:
JNBTF0,WAIT2
CLRTF0
MOVTH0,#3CH
MOVTL0,#0B0H
LCALLDISPLAY
DJNZR4,WAIT2;是否到500ms,未到则返回
CJNER0,#01H,D1
CPLL_GREEN;到了500ms,则闪东西方向绿灯
D1:
CJNER0,#02H,D2
CPLL_YELLOW;闪东西方向黄灯灯
D2:
CJNER0,#03H,D3
CPLH_GREEN;闪南北方向绿灯
D3:
CJNER0,#04H,D4
CPLH_YELLOW;闪南北方向黄灯
D4:
MOVR4,#10
DJNZR2,WAIT2;是否到1s
MOVR2,#2
DECSECOND
DJNZR3,WAIT2
RET
;******************************************************
;LED显示状态
;******************************************************
STATE1:
SETBH_RED;东西方向绿灯亮,南北方向红灯亮
CLRH_GREEN
CLRH_YELLOW
CLRL_RED
SETBL_GREEN
CLRL_YELLOW
RET
STATE2:
SETBH_RED;东西方向绿灯闪,南北方向红灯亮
CLRH_GREEN
CLRH_YELLOW
CLRL_RED
CLRL_GREEN
CLRL_YELLOW
RET
STATE3:
SETBH_RED;东西方向黄灯闪,南北方向红灯亮
CLRH_GREEN
CLRH_YELLOW
CLRL_RED
CLRL_GREEN
SETBL_YELLOW
RET
STATE4:
CLRH_RED;东西方向红灯亮,南北方向绿灯亮
SETBH_GREEN
CLRH_YELLOW
SETBL_RED
CLRL_GREEN
CLRL_YELLOW
RET
STATE5:
CLRH_RED;东西方向红灯亮,南北方向绿灯闪
SETBH_GREEN
CLRH_YELLOW
SETBL_RED
CLRL_GREEN
CLRL_YELLOW
RET
STATE6:
CLRH_RED;东西方向红灯亮,南北方向黄灯闪
CLRH_GREEN
SETBH_YELLOW
SETBL_RED
CLRL_GREEN
CLRL_YELLOW
RET
;****************************************************************
;显示程序
;****************************************************************
DISPLAY:
MOVA,SECOND
MOVB,#10
DIVAB
MOVDPTR,#LEDMAP;取表首地址
MOVCA,@A+DPTR;查表
MOVP1,A;显示十位
MOVA,B
MOVCA,@A+DPTR;显示个位
MOVP0,A
RET
;****************************************************************
;中断程序
;****************************************************************
EXINT1:
PUSHACC
PUSHPSW;保护现场
SETBRS0;设定PSW工作寄存器组1,保护R0-R7寄存器内容
CLRRS1
MOVR0,#30;使灯亮30s
LOOP:
MOVA,R0
MOVB,#10
DIVAB
MOVDPTR,#LEDMAP;取表首地址
MOVCA,@A+DPTR;查表显示
MOVP1,A
MOVA,B
MOVCA,@A+DPTR
MOVP0,A
CALLDELAY;调用1s延时子程序
DJNZR0,LOOP;没到30s就继续
MOVP1,#0C0H;显示“00”
MOVP0,#0C0H
CALLDELAY;延迟1s
POPPSW;恢复现场
POPACC
RETI
EXINT2:
PUSHACC
PUSHPSW
SETBRS0
CLRRS1
MOVR1,#10;使灯亮10s
LOOP1:
PUSHP2
MOVP2,#12H;紧急状态,全部亮红灯
MOVA,R1
MOVB,#10
DIVAB
MOVDPTR,#LEDMAP
MOVCA,@A+DPTR
MOVP1,A
MOVA,B
MOVCA,@A+DPTR
MOVP0,A
CALLDELAY;调用1s延时子程序
DJNZR1,LOOP1;没到10s就继续
MOVP1,#0C0H;显示“00”
MOVP0,#0C0H
CALLDELAY;延迟1s
POPPSW
POPACC
POPP2
RETI
;*************************************************************
DELAY:
MOVTMOD,#01H;1s定时器延时子程序(硬件)
MOVTH0,#3CH;置初值
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动定时器
MOVR5,#20
LLLL0:
JBTF0,LLLL1;查询计数溢出位TF0
AJMPLLLL0
LLLL1:
MOVTH0,#3CH;重新设置初值
MOVTL0,#0B0H
CLRTF0
DJNZR5,LLLL0
RET
LEDMAP:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H,80H,90H
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯