proteus单片机带优先让行功能的交通灯控制实验Word文档格式.docx
- 文档编号:19177743
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:17
- 大小:217.13KB
proteus单片机带优先让行功能的交通灯控制实验Word文档格式.docx
《proteus单片机带优先让行功能的交通灯控制实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《proteus单片机带优先让行功能的交通灯控制实验Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
五、实验框图
总框架图:
扫描时分秒框架图(举例说明扫描;
这里举例的是秒的个位框架图,时分秒其他的各个位,同这个图相似,要改的地方见标注图内说明)
倒计时框图(东西倒计时和南北倒计时框架图类似,这里只
描述东西倒计时)
时钟工作框架图
调时分秒钟调整程序
六、实验代码
根据实验设计思路,结合实验框图,由于代码比较长其中部分模块可以用实验框图来说明。
例如时钟工作模块、调时分秒钟调整程序模块、交通灯工作模块、倒计时模块等,用实验框架图来说明更加直观(参照第五步实验框图)。
这里是部分模块的一些实验代码。
1.时钟扫描显示
结合时分秒框架图,显示时,依次将各位笔段码送P2口,位扫描码送P1口,即可分时显示所有位。
就微观来说,任一时刻只有一只数码管工作,利用人眼视觉惰性特征,只要刷新频率不小于25HZ,宏观上就可以看到所有位同时显示,且没有闪烁感。
部分代码如下:
START1:
MOVDPTR,#LEDTABLE
MOVP1,#11111110B
MOVA,MIAO
ANLA,#0FH;
扫秒个位
MOVCA,@A+DPTR
MOVP2,A
LCALLDELAY
MOVP1,#11111101B
MOVA,MIAO
SWAPA
扫秒十位
MOVP2,A
LCALLDELAY
MOVP1,#11111011B
MOVA,FEN
扫分个位
MOVP1,#11110111B
MOVA,FEN
扫分十位
……
……
2、扫描延时。
利用人眼视觉惰性特征,只要刷新频率不小于25HZ,宏观上就可以看到所有位同时显示,且没有闪烁感。
DELAY:
MOVR6,#255
DJNZR6,$
RET
3、交通灯工作模块。
用查表法来进行对交通灯显示的控制。
状态和倒计时就用查表法来做,然后再将表循环就可以得到要求的效果。
先将指针指向表的第一个位置,取第一个数值(用于灯的状态显示)赋给A,将A值从Po口送出去,然后指针再指向下一个数值(用于灯的倒计时显示)赋给A,再将A值从Po口送出去。
查表第三个数,重复上面的操作……
部分代码:
MOVA,DENG
MOVCA,@A+DPTR
MOVP0,A;
灯的赋值
INCDENG
MOVR1,A
INCDENG;
判断是否到结束位
CJNEA,#00H,JID
MOVDENG,#00H
4、外部中断服务程序
中断程序里面判断P3.2引脚的电平,采用下降沿触发方式。
开始状态交通灯正常工作,当系统产生第一次中断时(下降沿触发),系统执行交通灯全红状态,当再来一次中断时(下一次下降沿触发),交通灯全红状态停止,然后执行继续之前的交通灯状态。
(说明交通灯控制程序和交通灯全红状态程序都是在主程序中,用到R4转换标志来转换2种状态)
程序代码:
INT:
PUSHPSW
PUSHACC
MOVA,R4
CPLA
MOVR4,A;
R4判断是否为紧急状0FFH代表为紧急状态
CJNEA,#00H,X3
SETBZHUAN;
由FF-00,ZHUAN为1
X3:
POPACC
POPPSW
RETI。
5、紧急状态交通灯全红。
通灯控制程序和交通灯全红状态程序都是在主程序中,用到R4转换标志来转换2种状态
R4判断是否为紧急状态
/*****紧急状态交通灯全红*****/
CJNER4,#0FFH,START2;
0FFH代表为紧急状态
MOVA,P0
CJNEA,#84H,QB
LJMPSTART1
QB:
MOV2AH,A
MOVP0,#84H;
交通灯全红
6.、定时器0中断服务程序设计:
T0定时计数器来进行中断延时。
设定每次中断为50mS,再利用判断循环语句来进行延时。
要延时3S则执行60次中断,即3S=60*50mS。
R4转换标志来转换2种状态(交通灯正常工作和全红状态)。
在中断中调用时钟工作程序。
见第五实验框架图中的时钟工作框架图。
(1)中断程序源代码:
TIME0:
LCALLLOOP
LCALLQUANHUANG
PUSHACC
MOVTH0,#3CH
MOVTL0,#0B0H
CJNER4,#00H,ZAN1;
紧急状态时,暂停交通灯减计时
DECR1;
交通灯减计时
INCR7
CJNER7,#20,ZAN1
MOVR7,#00H;
紧急状态时,暂停倒计时
DECDAODX;
东西倒计时自减1
DECDAONB
ZAN1:
INCR0
CJNER0,#20,X2;
等待1S的到来
MOVR0,#00H;
南北倒计时自减1
X1:
LCALLCLOCK
X2:
POPPSW
RETI
7、调时分秒钟调整程序
参照第五实验框图中的调时分秒钟调整程序框架图。
(这里代码是减分调节功能)
LOOP:
JBP3.4,JJJ
D3:
CJNEA,#00H,D2
MOVA,#5aH
D2:
deca
MOVFEN,A
cjnea,#4fh,kk
mova,#4ah
deca
movfen,a
kk:
cjnea,#3fh,kk1
mova,#3ah
kk1:
cjnea,#2fh,kk2
mova,#2ah
movfen,a
kk2:
cjnea,#1fh,kk3
mova,#1ah
kk3:
cjnea,#0fh,kk4
mova,#0ah
…………
8、宏定义变量和系统初始化
实验需要宏定义一些变量:
MIAOEQU20H;
时分秒
FENEQU21H
SHIEQU22H
DENGEQU26H;
交通灯状态计数
DAODXEQU27H;
东西倒计时
DAONBEQU28H;
南北倒计时
ZHUANBIT29H.0
加上上面几个模块基本分析完实验要求的基本功能,已经达到了实验的要求。
再上系统初始化代码,然后把各个部分结合起来,通过一些修改,能够实现一个简单的带优先让行功能的交通灯控制实验。
系统初始化代码:
ORG0000H
LJMPSTART
ORG0003H
LJMPINT
ORG000BH
LJMPTIME0
ORG0040H
START:
MOVMIAO,#00
MOVFEN,#00
MOVSHI,#12H
MOVSP,#50H
SETBIT0;
设置外中断0
SETBEX0
MOVTMOD,#001H;
设置定时器0
MOVTH0,#3CH;
50ms
MOVTL0,#0B0H;
设优先级
ORLIP,#001H
SETBET0
SETBTR0
SETBIT1
SETBEA
七、实验数据
实验中要实现灯的状态显示,所以要对交通灯定时计算;
用到T0定时计数器来进行中断延时延时,要设定定时计数器初值。
1、实验仿真数码管和交通灯开始画面。
2、首先要设定定时计数器初值:
实验选用了定时计数器T0、用工作方式1,设定每次中断为50MS,然后再利用判断循环语句来进行延时。
初值计算:
=65536-50000=15536=3CB0H
则定时计数器初值为TH0为3CH,TL0为0B0H。
用了查表法来进行对交通灯定时显示的控制。
把它们放在TABLE中,
下面表中的10进制表示的数据是用于定时控制的
TABLE:
DB81H,60;
东西红亮,南北绿亮,延时3S
DB80H,10,81H,10,80H,10,81H,10;
绿灯闪两次,每次0.5S延时2S
DB82H,40;
东西红,南北黄延时2S
DB24H,60;
东西绿亮,南北红亮,延时3S
DB04H,10,24H,10,04H,10,24H,10;
DB44H,40;
东西黄,南北红延时2S
DB00H;
结束位
每次中断为50mS,利用判断循环语句来进行延时。
延时3S则执行60次中断,即3S=60*50mS。
3、交通灯赋值计算:
因为我设置的交通灯赋值高电平所对应的灯就亮,低电平就灭。
单片机(89C51)P0的引脚1~引脚8与交通灯单元的接线端子对应关系如下:
交通灯正常工作时的赋值用查表法。
表中的16进制表示的数据就是所要查的值。
紧急状态时,交通灯全红是用语句MOVP0,#84H;
实现。
全黄状态时:
全黄灯段设计为12:
02;
00—12:
02:
59,若时间到达全黄灯时间段时,灯均显示黄色。
用MOVA,#01000010B
MOVP0,A;
4、一开始要显示当前“时分秒”(缺省时间从12:
所以一开始就要设定时钟的开始值;
MOVMIAO,#00;
秒00
MOVFEN,#00;
分00
MOVSHI,#12H;
时12
满足实验要求的缺省时间从12:
00开始。
5、共阴笔段码
实验用的proteus中数码管7SEG-MPX8-CC是八个共阴二极管显示器12345678是阴公共端,所以要用到共阴笔段码
LEDTABLE:
DB3FH,06H,5BH,4FH,66H;
0,1,2,3,4
DB6DH,7DH,07H,7FH,6FH;
5,6,7,8,9
DB00H;
00H是结束位
八、实验小结
实验完成能够开始显示12:
00;
能够完成交通灯的倒计时。
使用K1表示紧急状态,引发中断,允许特种车辆通行。
交通灯灯全红,倒计时暂停,当前“时分秒”照常变化。
能够对时钟的可调控制。
能够做到全黄时间段。
虽然能够满足实验要求,对MCS51指令系统和汇编语言有了更深的理解,但是还是有很多东西要继续学习,才能更加理解汇编语言的应用和单片机的设计。
实验过程中还是遇到了很多问题,因为个人对单片机和汇编掌握的不够好。
刚开始做时钟扫描时,碰到时分秒不同时显示,而且还一闪一闪的,于是加了一个扫描延时,能看到时分秒同时显示;
在做时分秒调整子程序时,我做了2种功能(加功能和减功能),加功能做的好,但在做减功能,数码管显示器上出现乱码,从59减到40时,中间还有一段时间不显示数字。
发现减功能比加功能要复杂。
减功能时还要判断是否超出了0—9外其他的字符,这个问题让我郁闷了很久,最后通过查资料,解决了这个问题。
例如从5AH减到40H,当减到等于4FH时,要把4FH切换到4AH,再继续减,数码管才正确显示59减到40。
这周的综合实验还是学到了很多东西,对汇编的编程能力加强了不少。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- proteus 单片机 优先 功能 交通灯 控制 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)