基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx

上传人:b****5 文档编号:18832572 上传时间:2023-01-01 格式:DOCX 页数:14 大小:651.87KB
下载 相关 举报
基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx_第1页
第1页 / 共14页
基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx_第2页
第2页 / 共14页
基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx_第3页
第3页 / 共14页
基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx_第4页
第4页 / 共14页
基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx

《基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

基于单片机的交通灯的设计报告程序为汇编语言Word下载.docx

 

图1

单片机的复位及初始化如图2:

图2

3.2、74LS47芯片简介

74LS47的端子功能图如下图3:

图3

74LS47的主要功能端如下:

BI为熄灭输入端,低电平有效,当BI=0时,无论其他输入端状态如何,译码器输出七段同时熄灭;

BI=1时,不影响译码器正常译码。

LT为测试输入端,低电平有效,用于检查数码管的七段是否正常发光。

当LT=0,同时BI=1时,不管输入的BCD码是什么状态,都可使驱动数码管的七段同时点亮。

译码器要正常译码,必须LT输入无效电平。

RBI为灭零输入端,低电平有效。

设置灭零输入端的目的是为了能将不希望显示的0熄灭,例如一个四位数码显示电路,整数部分两位,小数部分两位,在显示6.4时,将出现06.40的字样,如果将前、后多余的0熄灭,显示的结果更醒目一些。

灭零输入端只能对显示的0进行熄灭,而对其他数字没有影响。

在原理图中,译码器与数码管的连接如图4:

图4

四、系统硬件设计

4.1、交通管理的方案论证

AB、CD两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。

红灯亮禁止通行,绿灯亮允许通行。

黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为AB、CD两干道的公共停车时间。

设AB道比CD道的车流量大,指示灯燃亮的方案如表1:

车道\时间

60s

3s

2s

35s

AB道

绿灯

黄灯

红灯

CD道

表1

表1说明:

(1)当AB道为绿灯,此道车辆通过,行人禁止通行。

时间为60秒;

CD方向为红灯,此道车辆禁止通行,CD道行人可通过。

(2)当AB方向为黄灯闪烁3秒,警示车辆和行人红、绿灯的状态即将切换;

(3)当AB方向为红灯,此道车辆禁止通行,AB道行人可通过;

当CD方向为红灯,此道车辆禁止通行,CD道行人可通过。

(4)当AB方向为红灯,此道车辆禁止通行,AB道行人可通过;

AB道为绿灯,此道车辆通过,行人禁止通行。

时间为35秒。

(5)当AB方向为红灯,此道车辆禁止通行,AB道行人可通过;

CD方向为黄灯闪烁3秒,警示车辆和行人红、绿灯的状态即将切换。

(6)此表可根据车流量动态设定红绿灯初始值。

4.2、系统硬件设计

选用设备:

AT89C51弹片机一片,74LS47芯片二片,电阻排RESPACK-7三个,共阴极的七段数码管7SEG-MPX2-CA两个,红、黄、绿交通灯各四个,开关键盘、连线、电阻、电容若干。

4.2.1、系统总框图如下:

4.2.2、交通灯硬件线路图:

见附录Ⅰ

4.2.3、系统工作原理

(1)开关键盘a、改变数码管显示的时间;

b、开关控制十字路口十个方向的灯同时显示红灯且数码管显示00。

(2)由AT89C51单片机每秒钟通过P0、P2口向74LS47的数据口送信息,由P1口显示红、绿、黄灯的燃亮情况;

由7SEG-MPX2-CA显示每个灯的燃亮时间。

(3)AT89C51P3.3为低电平时,P1口对应的红灯即四个方向的红灯亮,数码显示为00.

(4AT89C51P3.2有下降沿触发时,时间暂停,进入时间显示状态,当P3.6为低电平时,时间显示以240ms的速度进行加1;

当P3.7为低电平时,时间显示以240ms的速度进行减1;

当P1.0为低电平时,时间暂停消除,恢复正常。

(5)初始状态AB方向绿灯60秒CD方向红灯65秒。

(6)当AB方向绿灯60秒倒计时完了。

进入下一阶段,AB方向黄灯3秒,且黄灯以40ms的速度闪烁;

CD方向红灯5秒。

(7)当AB方向黄灯3秒倒计时完。

进入第三阶段,AB方向红灯40秒;

CD方向红灯2秒。

(8)当CD方向红灯2秒倒计时完。

进入第四阶段,AB方向红灯38秒;

CD方向绿灯35秒。

(9)当CD方向绿灯35秒倒计时完。

进入第五阶段,AB方向红灯3秒;

CD方向黄灯3秒,且黄灯以40ms的速度闪烁。

(10)AB方向红灯和CD方向黄灯3秒同时倒计时完毕,重新循环。

五、软件设计

5.1、每秒钟的设定

延时方法可以有两种一中是利用AT89C51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。

5.2、1秒的方法

我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。

在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。

为零表示1秒已到可以返回到输出时间显示程序.

5.3、相应程序代码

(1)主程序 

   定时器需定时10毫秒,故T0工作于方式1。

 初值:

    T0初值=216-fose/12Xt=216-(12X106X0.01)/12=55536D=D8F0H

ORG0000H

MAIN:

MOVTMOD,#01H

MOVTL0,#0F0H

MOVTH0,#0D8H

SETBEA

SETBET0

SETBTR0

SETBEX0

SETBEX1

SETBIT0

CLRIT1

SETBPT0

(2)中断服务子程序

ORG000BH

   ZHD2:

MOVTL0,#0F0H;

重先赋值

CLRP3.4

RETI

5.4、键盘显示流程图

5.5、软件延时

MCS-51的工作频率为2-12MHZ,我们选用的AT89C51单片机的工作频率为12MHZ。

机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12M)=1us。

我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。

具体的延时程序分析:

DEL:

MOVR7,#40;

;

延时10ms

DEL1:

MOVR6,#123

NOP

DEL2:

DJNZR6,DEL2

DJNZR7,DEL1

RET

5.6、软件流程图:

见附录Ⅱ

5.7、源程序代码

ORG0000H;

伪指令、程序开始、中断入口地址

LJMPMAIN

ORG0003H

LJMPZHD1

LJMPZHD2

ORG0013H

LJMPZHD3

ORG1000H

;

主程序

MAIN:

MOVTMOD,#01H;

设工作方式

MOVTL0,#0F0H;

设初值,单片机晶振12M,定时10ms

SETBEA;

开放总中断

SETBET0;

开放T0中断

SETBTR0;

启动T0定时

SETBEX0;

开放外中断0

SETBEX1;

开放外中断1

SETBIT0;

设外中断0为边沿触发

CLRIT1;

设外中断1为低电平有效

CYCLE:

MOVR0,#60;

AB方向绿灯显示时间

MOVR1,#65;

CD方向红灯显示时间

MOVR2,#25;

为延时1秒而用

CD红灯AB绿灯

LOOP1:

SETBP3.4

MOVP1,#01H

SETBP1.7;

点亮红灯

SETBP1.4;

点亮绿灯

LCALLDISPLAY;

调用显示程序

DJNZR2,LOOP1

MOVR2,#25

DECR1

DJNZR0,LOOP1

MOVR0,#3;

AB方向黄灯显示时间

CD红灯AB黄灯

LOOP2:

MOVP1,#01H

SETBP1.3;

点亮黄灯

LLJ:

CPLP1.3

DJNZR2,LLJ

DJNZR0,LOOP2

MOVR0,#40;

AB方向红灯显示时间

CD红灯AB红灯

LOOP3:

SETBP1.2;

DJNZR2,LOOP3

DECR0

DJNZR1,LOOP3

MOVR1,#35;

CD方向绿灯显示时间

CD绿灯AB红灯

LOOP4:

SETBP1.5;

DJNZR2,LOOP4

DJNZR1,LOOP4

MOVR1,#3;

CD方向黄灯显示时间

CD黄灯AB红灯

LOOP5:

SETBP1.6;

LLJ1:

CPLP1.6

DJNZR2,LLJ1

DJNZR1,LOOP5

LJMPCYCLE

键盘中断程序

ZHD1:

LCALLDISPLAY

JBP3.6,Q2

INCR1

INCR0

CJNER1,#99,TIAO2

MOVR1,#00H

TIAO2:

CJNER0,#99,TIAO3

MOVR0,#00H

TIAO3:

LCALLDISPLAY

JNBP1.0,Z2

Q2:

JBP3.7,WAIT1

CJNER1,#00H,TIAO

MOVR1,#99

TIAO:

CJNER0,#00H,TIAO1

MOVR0,#99

TIAO1:

LCALLDISPLAY

WAIT1:

JNBP1.0,Z2

WAIT:

Z2:

RETI

时间中断程序

ZHD2:

应急通道中断程序

ZHD3:

MOVP1,#85H

MOVP0,#30H

MOVP2,#30H

JNBP3.3,ZHD3

数显显示

DISPLAY:

MOVA,R0;

AB方向时间的显示

MOVB,#10

DIVAB;

把要显示的数的十位存放在A中,个位存放在B中

ADDA,#10H;

位选通十位

MOVP0,A;

显示十位数字

TI0:

JNBP3.4,TT

SJMPTI0

TT:

SETBP3.4

MOVA,B

ADDA,#20H;

位选通个位

显示个位数字

TI1:

JNBP3.4,TT1

SJMPTI1

TT1:

CD方向的显示

MOVA,R1;

CD方向时间的显示

DIVAB

MOVP2,A;

TI2:

JNBP3.4,TT2

SJMPTI2

TT2:

TI3:

JNBP3.4,TT3

SJMPTI3

TT3:

RET

参考文献:

1、《单片微机原理与接口技术》主编:

曾一红副主编:

刘虹、李寿强

2、《数字电子技术》蒋正萍、刘虹、张松、李小平编著

3、

后记:

在做本实验期间遇到了诸多的问题:

1、从P1口连接出来的那一个数码管无法显示数字,解决:

通过询问老师,了解到P1口内部不存在上拉电阻,输出的电流较小,无法驱动数码管显示。

2、在对数码管的显示时间做设置时,进入设置状态后,二个数码管只有一个数显亮了,经过对软硬件的多方调试,最终发现在进入设置状态时,没有对二个数码管进行循环显示。

3、黄灯无法闪烁,解决问题:

首先我对软件的显示程序进行不同的设置,对显示部分每循环一次就对黄色对应单片机口求反,而此时出现了黄灯显示后一直无法熄灭。

而最终我把显示部分的程序改为只循环一次,而增加了主程序中的循环次数。

4、这是最重要的一步,也就是首先提出在做此实验时要完成的目标四。

到目前为此,我就还无法找出如何用PC机去控制单片机。

附录

附录Ⅰ:

交通灯硬件线路图

附录Ⅱ:

软件流程图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1