单片机课程设计 交通灯设计070310135.docx
《单片机课程设计 交通灯设计070310135.docx》由会员分享,可在线阅读,更多相关《单片机课程设计 交通灯设计070310135.docx(26页珍藏版)》请在冰豆网上搜索。
单片机课程设计交通灯设计070310135
信息与电气工程学院
课程设计说明书
(2009/2010学年第二学期)
课程名称:
单片机课程设计
题目:
交通信号灯控制器的设计
专业班级:
通信工程0701班
学生姓名:
XXX
学号:
070310135
指导教师:
吴开兴贾少锐李晓东刘会军马永强
设计周数:
2周
设计成绩:
年月日
目录
1.设计目的2
2.交通管理方案论述2
2.1设计任务2
2.2设计要求2
2.3设计方案介绍2
2.3.1定时方案2
2.3.2显示方案2
2.3.3按键控制方案2
2.3.4交通信号灯控制方案3
3.交通灯系统硬件设计3
3.1单片机概述3
3.2单元电路设计4
3.2.1单片机芯片AT89S51单元4
3.2.2LED数码管显示单元7
3.2.3交通信号灯显示单元8
3.2.4按键控制单元9
3.3交通灯硬件电路图10
4.交通灯软件设计10
4.1程序设计流程图10
4.2按键扫描12
4.3定时器初始化13
4.4定时器中断服务程序14
5.系统调试16
6.课程设计心得16
7.参考文献16
1.设计目的
使用集成集成译码器、计数器、定时器、脉冲发生器和必要的门电路等或者使用单片机系统构建交通信号灯控制器。
2.交通管理方案论述
2.1设计任务
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三个指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
两干道通行时间一致,时间减到还剩4s时,禁止方向红灯不变,通行方向的黄灯、绿灯交替闪烁。
可以通过按键处置紧急状况,改变倒计时的初始显示数据,复位、启动系统倒计时。
本人在小组中主要负责软件仿真模块,包括画原理图,程序的调试,电路的调试和仿真。
要用到的软件:
preteus7.5,Keil7.12,protel99。
2.2设计要求
1.利用单片机既发光管、LED等器件设计交通信号灯
2.至少实现一组十字路口的交通的模拟控制情况
3.LED数码管直接显示
4.时间长短可以通过按键设置
2.3设计方案介绍
2.3.1定时方案
利用MCS-51内部的定时器/计数器进行定时,配合软件延时实现倒计时。
采用T0定时/计数器,设置每50ms产生定时中断,执行20次定时中断为1s,每1s显示数值减1当倒计时减为0时,再从设置的初始值重新开始倒计时。
2.3.2显示方案
显示分为静态显示和动态显示,静态显示由于占用较多的接口,在单片机设计中常采用串行扩展来完成。
该方案占用接口资源多,实用于并行接口资源较少以及对显示没有要求的场合。
LED动态显示硬件连接简单,但动态扫描的显示方式需占用CPU较多的时间,在该系统中由于单片机除了扫描89S51芯片外没有太多的实时测控任务。
本课程设计采用静态显示,并设计程序。
采用共阳极LED数码管,由P0口控制十位LED数码管引脚,P2口控制个位LED数码管引脚。
2.3.3按键控制方案
设定三个按键:
(1)按键1(P3.0):
当系统处于定时执行状态时,按下按键1,系统复位为设置的初始值状态,并停止倒计时;当系统处于定时停止状态时,按下按键1,系统从设定的初始值开始倒计时。
(2)按键2(外部中断0):
当交通出现紧急状况时,按下按键2,东西南北方向均变为红灯,停止倒计时;再次按下按键2,系统恢复为之前的状态,继续倒计时。
(3)按键3(P3.4):
按下按键3,为系统设定显示的初始值,显示范围为0~99,即显示数据超过99时,显示数据清0。
2.3.4交通信号灯控制方案
由P1口控制交通信号灯:
南北红灯:
P1.0;南北黄灯:
P1.2;南北绿灯:
P1.4;东西红灯:
P1.1;东西黄灯:
P1.3;
东西绿灯:
P1.5;
设定初始状态为南北绿灯,东西红灯。
当显示数据减为4s,直到显示数据减为0,禁止方向红灯不变,通行方向黄灯、绿灯交替闪烁,显示状态如表1(a)、表1(b)所示。
显示数据减为0,交通信号灯状转换。
交通信号灯状态
南北干道显示
东西干道显示
南北黄灯,东西红灯
4s
4s
南北绿灯,东西红灯
3s
3s
南北黄灯,东西红灯
2s
2s
南北绿灯,东西红灯
1s
1s
南北黄灯,东西红灯
0
0
表1(a)南北通行,东西禁止
交通信号灯状态
南北干道显示
东西干道显示
南北红灯,东西黄灯
4s
4s
南北红灯,东西绿灯
3s
3s
南北红灯,东西黄灯
2s
2s
南北红灯,东西绿灯
1s
1s
南北红灯,东西黄灯
0
0
表1(b)南北禁止,东西通行
相关程序:
DIS_S:
LCALLD40MS;;;按键去抖
JNBP3.4,DIS_SN
AJMPDIS_R
DIS_SN:
MOVA,GEWEI
CJNEA,#9,ADD_GEWEI;;;按键按下,先判断个位是否为9,不是9跳转
MOVGEWEI,#0;;;个位是9,清0
MOVR3,GEWEI
MOVA,SHIWEI
CJNEA,#9,ADD_SHIWEI;;;个位清0后,判断十位是否为9
MOVSHIWEI,#0;;;十位是9,清0
MOVR4,SHIWEI
LCALLXIANSHI;;;显示数据
AJMPDIS_R;;;十位、个位都为0,返回
ADD_GEWEI:
INCGEWEI;;;个位不是9,数值加1
LCALLXIANSHI
MOVR3,GEWEI;;;将个位数值存入R3
AJMPDIS_R;;;返回
ADD_SHIWEI:
INCSHIWEI;;;个位进一位清0,十位不是9,则十位加1
MOVR4,SHIWEI
LCALLXIANSHI;;;显示
DIS_R:
RET
3.交通等系统硬件设计
3.1单片机概述
3.2.单元电路设计
3.2.1单片机芯片AT89S51单元
3.2.2LED数码管显示单元
本课程设计采用共阳极LED数码管如图2所示,数码管显示码如表2所示:
图2共阳极LED数码管
显示数值
abcdefgh
驱动代码(16进制)
0
00000011
0C0H
1
10011111
0F9H
2
00100101
0A4H
3
00001101
0B0H
4
10011001
99H
5
01001001
92H
6
01000001
82H
7
00011111
0F8H
8
00000001
80H
9
00001001
90H
表2共阳极数码管显示码
交通灯硬件设计电路中,LED数码管显示单元如图3所示:
P0口引脚控制十位数码管,即P0.0-P0.7分别控制a-h;P2口引脚控制个位数码管,即P2.0-P2.7分别控制a-h。
图3LED数码管显示单元
显示子程序:
;;;查表显示数据
XIANSHI:
MOVA,GEWEI
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP2,A;;;个位查询并显示
MOVA,SHIWEI
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP0,A;;;十位查询并显示
RET
;////////////查表指令0,1,2,3,4,5,6,7,8,9
TAB1:
DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H
3.2.3交通信号灯显示单元
六只交通信号灯设置:
南北红灯:
P1.0;
南北黄灯:
P1.2;
南北绿灯:
P1.4;
东西红灯:
P1.1
东西黄灯:
P1.3
东西绿灯:
P1.5;
单元电路如图4所示
图4交通信号灯显示单元
初始化时给定一个时间,当时间倒数到4S的时候,如果南北方向为绿灯,则绿灯和黄灯交替闪烁,直到0,南北方向变为红灯,东西方向变为绿灯。
相关程序:
;;;判断黄灯闪烁
MOVA,SHIWEI
CJNEA,#0,M1;;;十位不为0,跳转到M1
MOVA,GEWEI
SUBBA,#6
JCS1
AJMPM1
S1:
JNBSNF,S2
CPLP1.2
CPLP1.4;;;南北方向通行,显示还剩4s时,东西方向的黄灯、绿灯交替闪亮
AJMPM1
S2:
CPLP1.3
CPLP1.5;;;东西方向通行,显示还剩4s时,南北方向的黄灯、绿灯交替闪亮
M1:
MOVA,#00H
MOVA,GEWEI;;;判断个位是否为0
CJNEA,#0,JIAN_GEWEI;;;不是0,跳转
MOVA,SHIWEI;;;个位是0,检测十位是否为0
CJNEA,#0,JIAN_SHIWEI;;;十位不是0,跳转
AJMPL1;;;十位是0,个位也是0,则显示数据,交通灯状态取反
JIAN_GEWEI:
DECGEWEI;;;个位不是0,直接减1
LCALLXIANSHI
AJMPL2;;;返回,继续倒计数
JIAN_SHIWEI:
DECSHIWEI
MOVGEWEI,#9;;;个位减为0,十位不为0,则十位减1,个位置9
LCALLXIANSHI
AJMPL2;;;返回,继续倒计数
L1:
MOVGEWEI,R3
MOVSHIWEI,R4;;;十位、个位均减为0,将设定的显示初值重新赋值给个位、十位
LCALLXIANSHI
JNBSNF,M2
CLRP1.3;;;下一次变为东西通行,将东西黄灯清0
CPLP1.0
CPLP1.4;;;南北红、绿灯取反
CPLP1.1
CPLP1.5;;;东西红、绿灯取反
JMPM3
M2:
CLRP1.2;;;下一次变为南北通行,将南北黄灯清0
CPLP1.0
CPLP1.4
CPLP1.1
CPLP1.5
M3:
CPLSNF
L2:
SETBTR0
POPPSW
POPACC
RETI
、
3.2.4按键控制单元
K1键:
P3.0系统复位和启动定时;
K2键:
P3.2紧急中断;
K3键:
P3.4显示数据加1
按键控制单元电路图如图5所示:
图5按键控制单元
3.3交通灯硬件电路图
图6交通灯硬件电路图
4.交通灯系统软件设计
4.1程序设计流程图
程序设计流程图如图7所示:
图7程序流程图
4.2按键扫描
为了确保一次按键动作只确认一次按键,必须消除机械开关的抖动影响。
消除按键的抖动,通常有硬件、软件两种消除方法。
一般采用软件的方法消除抖动。
即在第一次检测到有按键被按下时,执行一段延时子程序,本系统使用40ms延时子程序后,再确认该键电平是否仍保持为闭合状态电平,如果保持为闭合状态电平就可以确认真正有键按下,从而消除抖动的影响。
按键循环扫描(包括去抖,延时)程序如下:
LOOP:
LCALLANJIAN;;;调用扫描按键子程序
AJMPLOOP;;;循环
ANJIAN:
JNBP3.0,DIS_RES;;;查询设置重启按键是否按下
JNBP3.4,DIS_S;;;查询设置南北显示按键是否按下
AJMPDIS_R;;;没有键按下则返回,继续扫描
;;;复位启动按键
DIS_RES:
LCALLD40MS;;;按键去抖
JNBP3.0,DIS_RES1
AJMPDIS_R;;;没有按下,继续扫描
DIS_RES1:
CPLTR0
MOVGEWEI,R3;;;将设定的初值赋给个位
MOVSHIWEI,R4;;;将设定的初值赋给十位
LCALLXIANSHI;;;调用显示程序
MOVP1,#11101101b;;;恢复交通灯初始状态
;;;设置显示数据
DIS_S:
LCALLD40MS;;;按键去抖
JNBP3.4,DIS_SN
AJMPDIS_R
DIS_SN:
MOVA,GEWEI
CJNEA,#9,ADD_GEWEI;;;按键按下,先判断个位是否为9,不是9跳转
MOVGEWEI,#0;;;个位是9,清0
MOVR3,GEWEI
MOVA,SHIWEI
CJNEA,#9,ADD_SHIWEI;;;个位清0后,判断十位是否为9
MOVSHIWEI,#0;;;十位是9,清0
MOVR4,SHIWEI
LCALLXIANSHI;;;显示数据
AJMPDIS_R;;;十位、个位都为0,返回
ADD_GEWEI:
INCGEWEI;;;个位不是9,数值加1
LCALLXIANSHI
MOVR3,GEWEI;;;将个位数值存入R3
AJMPDIS_R;;;返回
ADD_SHIWEI:
INCSHIWEI;;;个位进一位清0,十位不是9,则十位加1
MOVR4,SHIWEI
LCALLXIANSHI;;;显示
DIS_R:
RET
;//////////延时40ms与1ms
D40MS:
MOVR7,#200
MOVR6,#200
L3:
DJNZR6,$
DJNZR7,L3
RET
4.3定时器初始化
AT89S51内有两个可编程的定时/计数器T0,T1,本系统使用T0。
定时/计数器有四种工作方式,本系统采用工作方式1,即16位定时/计数器。
在方式1下,最大的计数值为M=65536,而晶振为12MHz的机器周期为1μs,所以最大定时时间Tmax=65536μs=65.536ms。
我们要求交通灯显示数据每秒减1,而晶振为12MHz的机器周期为1μs,最大定时时间Tmax=65536μs=65.536ms,所以不满足1s的要求。
那么我们设定T0的定时时间为50ms,中断20次T0可以定时1s。
设T0的定时时间为50ms,则初始值X为:
X=65536-50000=15536=3CB0H,则:
(TL0)=0B0H,(TH0)=3CH
定时器初始化程序如下:
MOVR2,#20;;;定时器中断20次为1s
MOVTMOD,#01H;;;初始化定时器
MOVTL0,#0B0H
MOVTH0,#3CH
SETBEA;;;开定时中断与紧急中断
SETBET0
4.4定时器中断服务程序
定时器中断服务程序如下:
;///////定时中断处理程序
DS_C:
LJMPL2;;;接力跳转
DSZD:
PUSHACC;;;保护现场
PUSHPSW
;CLRTR0;;;关定时器及中断标志位并重新赋值
CLRTF0
MOVTL0,#0B0H
MOVTH0,#3CH
DJNZR2,DS_C;;;判断1s时间是否到达
MOVR2,#20;;;到达1s后重新赋值
;;;判断黄灯闪烁
MOVA,SHIWEI
CJNEA,#0,M1;;;十位不为0,跳转到M1
MOVA,GEWEI
SUBBA,#6
JCS1
AJMPM1
S1:
JNBSNF,S2
CPLP1.2
CPLP1.4;;;南北方向通行,显示还剩4s时,东西方向的黄灯、绿灯交替闪亮
MOV32H,P1
AJMPM1
S2:
CPLP1.3
CPLP1.5;;;东西方向通行,显示还剩4s时,南北方向的黄灯、绿灯交替闪亮
MOV32H,P1
M1:
MOVA,#00H
MOVA,GEWEI;;;判断个位是否为0
CJNEA,#0,JIAN_GEWEI;;;不是0,跳转
MOVA,SHIWEI;;;个位是0,检测十位是否为0
CJNEA,#0,JIAN_SHIWEI;;;十位不是0,跳转
AJMPL1;;;十位是0,个位也是0,则显示数据,交通灯状态取反
JIAN_GEWEI:
DECGEWEI;;;个位不是0,直接减1
LCALLXIANSHI
AJMPL2;;;返回,继续倒计数
JIAN_SHIWEI:
DECSHIWEI
MOVGEWEI,#9;;;个位减为0,十位不为0,则十位减1,个位置9
LCALLXIANSHI
AJMPL2;;;返回,继续倒计数
L1:
MOVGEWEI,R3
MOVSHIWEI,R4;;;十位、个位均减为0,将设定的显示初值重新赋值给个位、十位
LCALLXIANSHI
JNBSNF,M2
SETBP1.3;;;下一次变为东西通行,将东西黄灯清0
CPLP1.0
CPLP1.4;;;南北红、绿灯取反
CPLP1.1
CPLP1.5;;;东西红、绿灯取反
JMPM3
M2:
SETBP1.2;;;下一次变为南北通行,将南北黄灯清0
CPLP1.0
CPLP1.4
CPLP1.1
CPLP1.5
M3:
CPLSNF
MOV32H,P1
L2:
SETBTR0
POPPSW
POPACC;;;恢复现场
RETI
5.系统调试
(1)软件调试:
通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正。
还有软件调试要和硬件调试结合起来,硬件调试才会成功,比如说硬件显示管的编码可能会和仿真软件上的编码顺序是不一样的,必须要把顺序搞清楚了再调试硬件。
(2)硬件调试:
6.课程设计总结
当得到设计要求后,大家积极的从图书馆和网上找寻资料,开始课程设计后,大家将资料进行整合,确定设计方案。
由于单片机课程很紧,大家对于书上内容并没有真正的掌握,经常不得要领,无从下手,或者是编写的程序出现很多的语法错误,给课程设计带来不少的困难。
但随着设计的进行,大家慢慢的学习,对这些内容慢慢的掌握。
对单片机的学习有非常大的帮助。
通过本次课程设计,更加熟悉单片机的使用,学习如何使用开发板,对系统进行调试。
掌握好的方法对以后的各种课程设计有很大的帮助。
我是负责软件调试那一个模块,主要参与程序的汇编和调试,画仿真电路图,在这过程中遇到了不少问题,而且有些问题让自己完全摸不着头脑,不知道哪出错了,特别是在参与编写程序的过程中,让我深深地知道语言规范的重要性,还有在画图过程中,原器件不能直接放在一起,那样的话它们不会连接起来的,还有当软件调试成功了,给单片机载入程序的时候,发现显示管出现乱码,而且数码管也不是软件调试中的那样工作,后来才知道问题出在硬件上的那个显示管编码顺序是不一样的,要自己测量然后记录下来,再按照那个顺序去编写程序,还有硬件上的数码管是低电平有效,载入编写程序时要先取反,再让它显示,还有很多的细节问题都让自己受益匪浅。
总之这回的单片机程序设计更让我重视理论和实际的结合,在处理问题时要在细节上做好,遇到问题时不急不燥,通过同学和老师的帮助下好好的分析原因,然后解决问题。
7.参考文献
[1]胡汉才单片机原理及其接口技术[M]清华大学出版,1996
[2]蔡美琴MCS-51系列单片机系统及其应用高等教育出版社2004.2
[3]李华MCS-51系列单片机实用接口技术[M]北京航空航天大学出版社,1993
[4]周航慈单片机应用程序设计技术[M]北京航空航天大学出版社,1991.
[5]张志良等单片机原理与控制技术[M]机械工业出版社,2001年7月第1版
[6]王守中51单片机开发入门与典型事例人民邮电出版社,2007年8月
附录一:
交通信号灯控制器原理图
图8交通信号灯控制器原理图
附录二:
交通信号灯控制器仿真图
图9交通信号灯控制器仿真图
附录三:
程序代码:
;定时计数单元定义
GEWEIEQU30H
SHIWEIEQU31H
;按键输入引脚定义
K1EQUP3.0;;;设置重启按键
K2EQUP3.2;;;紧急中断按键
K3EQUP3.4;;;设置显示数据按键
;主程序
SNFBIT01H
URFEQU02H;;;紧急事件标志位
ORG0000H
LJMPMAIN;;;上电转主程序
ORG0003H;;;紧急中断入口
LJMPURZD
ORG000BH;;;定时中断入口
LJMPDSZD
ORG0030H
MAIN:
LCALLINIT;;;调用初始化子程序
LOOP:
LCALLANJIAN;;;调用扫描按键子程序
AJMPLOOP;;;循环
;///////////初始化程序
INIT:
SETBSNF
SETBURF
MOVR2,#20;;;定时器中断20次为1s
MOVTMOD,#01H;;;初始化定时器
MOVTL0,#0B0H
MOVTH0,#3CH
SETBEA;;;开定时中断与紧急中断
SETBET0
CLRTR0
SETBEX0
SETBIT0;;;设置中断程控方式
MOVGEWEI,#0
MOVSHIWEI,#0
MOVP0,#0C0H;;;十位置0
MOVP2,#03H;;;个位置0
MOVP1,#11101101b;;;设置交通灯初始状态(南北通,东西禁)
MOV32H,#11101101b;;;保存交通灯状态
RET
;;;按键扫描
ANJIAN:
JNBP3.0,DIS_RES;;;查询设置重启按键是否按下
JNBP3.4,DIS_S;;;查询设置南北显示按键是否按下
AJMPDIS_R;;;没有键按下则返回,继续扫描
;;;复位启动按键
DIS_RES:
LCALLD40MS;;;按键去抖
JNBP3.0,DIS_RES1
AJMPDIS_R;;;没有按下,继续扫描
DIS_RES1:
CPLTR0
MOVGEWEI,R3;;;将设定的初值赋给个位
MOVSHIWEI,R4;;;将设定的初值赋给十位
LCALL