单片机proteus仿真设计交通灯汇编语言文档格式.docx

上传人:b****5 文档编号:20750893 上传时间:2023-01-25 格式:DOCX 页数:19 大小:260.86KB
下载 相关 举报
单片机proteus仿真设计交通灯汇编语言文档格式.docx_第1页
第1页 / 共19页
单片机proteus仿真设计交通灯汇编语言文档格式.docx_第2页
第2页 / 共19页
单片机proteus仿真设计交通灯汇编语言文档格式.docx_第3页
第3页 / 共19页
单片机proteus仿真设计交通灯汇编语言文档格式.docx_第4页
第4页 / 共19页
单片机proteus仿真设计交通灯汇编语言文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机proteus仿真设计交通灯汇编语言文档格式.docx

《单片机proteus仿真设计交通灯汇编语言文档格式.docx》由会员分享,可在线阅读,更多相关《单片机proteus仿真设计交通灯汇编语言文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

单片机proteus仿真设计交通灯汇编语言文档格式.docx

按照上述控制要求,用发光二极管代替交通灯,用PROTEUS绘制电路图,并仿真调试实现之。

2,发挥部分:

1.有倒计时时间显示。

2若交道口出现紧急情况,交警可将糸统设置成手动:

全路口车辆禁行、行人通行。

紧急情况结束后再转成自动状态。

3当有119、120等特种车辆通过时,糸统自动转为特种车放行,其它车辆禁止状态。

特种车辆通过15秒钟后,糸统自动恢复,用模型车演示。

4其它自选措施。

1.系统功能的确定

功能一:

可以实现红绿灯的转换以及控制路口的基本功能。

功能二:

有倒计时功能和最后十秒绿灯闪烁的功能。

功能三:

出现紧急情况时,可以警察手动控制特殊状态,并维持交通。

功能四:

119或120等特种车经过时,可转换成为特种车道行驶状态,并在情况消除后15秒,恢复原状。

2.方案论证

2.1方案一:

如下图所示,为proteus仿真图。

其中,P1,P0端口的8位分别来控制东西,南北方向的红绿灯。

且运用了4个74LS164的8位移位寄存器(串行输入,并行输出)来控制4个LED的数码显示,通过AT89C51单片机的P3.0,P3.1两个扩展端口来接4个并行连接的74LS164的DIN和CLK两个端口来显示倒计时的功能,这会产生乱码使得显示杂乱,而主程序以顺序执行为主,其中穿插着对P3.7的端口高低电平的测试和跳转语句来实现功能三,并且功能一、二在主程序中实现,没有功能四的的实现程序。

所以,该方案可行却不完善,故不选用。

2.2方案二:

其中,P0,P2端口的8位分别来控制东西,南北方向的红绿灯。

而P1端口的P1.0~P1.6来控制四个LED的码值显示,而P3.0~P3.3这四位用来片选这四个LED。

并且,依旧用P3.7高低电平来实现功能三的内容,并且考虑用P3.6的高低电平来实现功能四的内容。

程序依旧与方案一相似,却可以消除显示乱码,程序杂乱,不易读写。

所以,该方案可行却仍不完善,故不选用。

2.3方案三:

如下页所示仿真图。

其中,在方案二的基础上,将四个LED分开的显示器用两个一起的LED,并且运用动态扫描显示倒计时,而P0,P2端口的8位分别来控制东西,南北方向的红绿灯。

而P1端口的P1.0~P1.7来连接两个LED的数码管的A~F,DP这8个接口处。

P3.0,P3.1分别接每个LED的1,2接口处来控制数码管显示的高低位。

顺次执行的主程序采用中断程序来实现,用P3.2,P3.3的电位变化分别来实现功能三,四。

其中,这可以用跳变触发中断或电平触发中断来实现,主要是IT0,IT1置位就是跳变触发方式,置零就是电平触发方式。

这样,软硬件对于该实验所要求的功能的实现均较易实现,而且程序较易编写和读取。

所以,综上所述,最终选择方案三来进行实验。

3.系统硬件的设计

3.1主控制器的设计以及接口电路的设计(电路图及设计说明)

该电路图的proteus仿真图即和方案三的一致,正常运行时如下所示:

主要运用到的硬件是:

一块AT89C51单片机,两个两段共阴LED显示器,SW1,SW2两个双掷开关以及32个发光二极管。

其中,16个红色,16个绿色发光二极管,每两个为一组。

若P0端口得电压输出电流不足以驱动LED,就利用上拉电阻使LED能正常工作,但不需电阻亦可。

单片机晶振选用12MHz。

4.系统软件的设计

4.1程序的编写思想:

本次实验设计的程序主要包含:

主程序,两个中断程序,显示程序(显示程序里含延时1ms的程序)。

具体见以下叙述。

4.2主程序的设计

主程序中,是顺次执行,从SETBP3.7开始运行南北方向为主的两个60秒,接着CLRP3.7再运行东西方向为主的两个60秒,接着P3.7重新置位,再次循环。

流程图如下:

4.3两个中断程序的设计

两个中断程序分别靠双掷开关SW1和SW2控制高低电位而实现,中断程序START0和中断程序START1为了实现功能三和四。

4.4显示程序的设计

流程图如下所示:

该显示程序主要是为了实现倒计时的显示,先将存在SECOND内的数值从十六进制数转化为十进制,并存在DBUF,DBUF+1(即50H,51H)单元中,然后通过LEDMAP取出字形,并选通每个两段共阴LED的显示管的高,低位显示出来。

5.系统调试

5.1硬件调试

设计小程序让发光二极管导通,点亮二极管,并向两段共阴LED显示管赋值,观察是否显示,调试到所有硬件设备均可正常即可。

5.2软件调试

主要是编程,以下是实现本次实验功能的程序:

SECONDEQU30H

DBUFEQU50H

ORG0000H

LJMPSTART

ORG0003H

LJMPSTART0

ORG0013H

LJMPSTART1

START:

MOVR7,#5

MOVSP,#60H

SETBEA

SETBEX0

SETBEX1

SETBIT0

SETBIT1

MOVTCON,#00H

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

CLRTF0

SETBTR0

MOVA,#0FFH

MOVP2,A

MOVP0,A

(以上程序主要是一些赋值程序,和定时器,中断等的开启,以及初始化红绿灯等)

;

************************************

LOOPM:

SETBP3.7

LJMPLOOP

LOOPK:

CLRP3.7

LOOP:

MOVR2,#20

MOVR3,#10

MOVSECOND,#60

JNBP3.7,LP1

LCALLSTATE1

LJMPZ1

LP1:

LCALLSTATE4

Z1:

LCALLDISPLAY

JNBTF0,Z1

DJNZR2,Z1

MOVR2,#20

DECSECOND

LCALLDISPLAY

DJNZR3,Z1

(以上程序主要是通过对P3.7电位的高低来选择红绿灯的状态,状态一和四的选择)

MOVR3,#40

MOVSECOND,#50

JNBP3.7,LP2

LCALLSTATE2

LJMPZ2

LP2:

LCALLSTATE5

Z2:

JNBTF0,Z2

DJNZR2,Z2

DECSECOND

DJNZR3,Z2

(以上程序主要是控制状态二和五的选择)

MOVR4,#1

MOVSECOND,#10

Z3:

JNBP3.7,LP3

LCALLSTATE2

LJMPMM1

LP3:

LCALLSTATE5

MM1:

NBTF0,Z3

JNBP3.7,SS1

MOVP2,#0BFH

LJMPSS2

SS1:

MOVP0,#0BFH

SS2:

DJNZR4,Z3

MOVR4,#1

DJNZR2,Z3

DJNZR3,Z3

(以上程序主要是控制状态二和五的转换选择,且绿灯闪烁)

MOVR3,#50

Z4:

JNBP3.7,LP4

LCALLSTATE3

LJMPMM2

LP4:

LCALLSTATE6

MM2:

JNBTF0,Z4

DJNZR2,Z4

DJNZR3,Z4

(以上程序主要是控制状态三和六的选择)

Z5:

JNBP3.7,LP5

LJMPMM3

LP5:

MM3:

JNBTF0,Z5

DJNZR4,Z5

MOVP1,#75H

JNBP3.7,SS3

MOVP2,#0EEH

MOVP0,#0AEH

LJMPSS4

SS3:

MOVP2,#0AEH

MOVP0,#0EEH

SS4:

DJNZR2,Z5

DJNZR3,Z5

JBP3.7,KK

LJMPLOOPM

KK:

LJMPLOOPK

(以上程序主要是控制状态三和六的选择,且绿灯闪烁,并长跳回去再循环开始)

START0:

ACALLDISPLAY

ACALLDISPLAY

JBP3.2,K0

PUSHACC

MOVA,P0

MOVA,P2

MOVP2,#0A9H

MOVP0,#0A9H

A0:

JBP3.2,A1

ACALLDISPLAY

LJMPA0

A1:

JNBP3.2,A0

POPACC

K0:

RETI

START1:

JBP3.3,K1

MOVA,R2

MOVA,R3

MOVA,SECOND

MOVP2,#56H

MOVP0,#56H

A2:

JBP3.3,A3

LJMPA2

A3:

JNBP3.3,A2

MOVR3,#15

MOVSECOND,#15

A4:

JNBTF0,A4

DJNZR2,A4

DJNZR3,A4

MOVSECOND,A

MOVR3,A

MOVR2,A

K1:

RETI

(以上两段程序主要实现了中断IT0和IT1)

STATE1:

MOVP2,#99H

MOVP0,#0AAH

RET

STATE2:

MOVP2,#95H

STATE3:

MOVP2,#66H

MOVP0,#0A6H

STATE4:

MOVP0,#99H

MOVP2,#0AAH

STATE5:

MOVP0,#95H

STATE6:

MOVP0,#66H

MOVP2,#0A6H

************************************

DISPLAY:

(以下是显示程序及结束)

MOVB,#10

DIVAB

MOVDBUF,A

MOVA,B

MOVDBUF+1,A

MOVR0,#DBUF

MOVR1,#DBUF+1

MOVDPTR,#LEDMAP

DP:

MOVA,@R0

MOVCA,@A+DPTR

MOVP1,A

CLRP3.0

ACALLDELAY

SETBP3.0

MOVA,@R1

CLRP3.1

SETBP3.1

DJNZR7,DP

RET

DELAY:

MOVR6,#01H

AA1:

MOVR5,#0FFH

AA:

DJNZR5,AA

DJNZR6,AA1

LEDMAP:

DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FH,77H,7CHDB58H,5EH,7BH,71H,00H,40HEND

(以上是状态一至六的赋值程序)

5.3综合调试

将程序在MedWen上运行以后,将产生的hex格式的文件加载到proteus仿真图上的AT89C51单片机上进行仿真实验。

具体情况如下:

5.3.1正常运行的状态:

5.3.2实现功能三的状态:

5.3.3实现功能四的状态:

6.指标测试

通过5的调试和仿真以后,可以知道程序运行成功,效果不错。

7.总结成果

经过两三个星期的努力,翻阅大量的资料和编程调试,最终得到了自我比较满意的运行结果,可能程序和仿真还有些许瑕疵,但是得到了所要求的功能以及良好的显示效果,所以,实验是比较成功的。

这次的大工作量和编程的经历给了我很多的启示,有编程失败的沮丧和调试成功一霎那的欣喜若狂,在这次汗水和欣喜的夹杂背后,是我对单片机的另一个认识,编程是很重要的一方面,而仿真可以将自己的程序验证出来,并开始和逐步掌握了proteus这一仿真软件,收获颇丰。

8.参考文献

1.《MCS-51系列单片机系统及其应用(第二版)》蔡美琴,张为民等主编,2009.1

2.《单片机原理及应用实验指导书》浙江海洋学院机电工程学院,2008.12

3.《数字电子技术基础》清华大学电子学教研室编,阎石主编,2008.5

4.Baidu搜索“74LS164”寄存器的功能

5.中断程序设计

6.Baidu搜索“proteus”的使用以及仿真过程等

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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