为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

汇编单片机交通灯

2020-03-08 30页 doc 65KB 5阅读

用户头像

is_196623

暂无简介

举报
汇编单片机交通灯信息与电气工程学院 1403计算机(CDIO) 基于单片机交通灯设计 项目报告 (2015 /2016 学年第 二 学期) 软件总体设计 姓名:          ......            学号:        ………….          成绩:                            2016年6月 目录 1 课程设计目的    1 2 设计任务与要求    1 3 软件总体设计    2 3.1系统软件设计的分析    2 3.2 软件设计    3 3.3 程序流程图    4 3.4 ...
汇编单片机交通灯
信息与电气工程学院 1403计算机(CDIO) 基于单片机交通灯设计 项目 (2015 /2016 学年第 二 学期) 软件总体设计 姓名:          ......            学号:        ………….          成绩:                            2016年6月 目录 1 课程设计目的    1 2 设计任务与要求    1 3 软件总体设计    2 3.1系统软件设计的分析    2 3.2 软件设计    3 3.3 程序流程图    4 3.4 程序清单    5 4 项目设计心得与体会    7 参考文献    7 附录(源代码):    8 1 项目设计目的  目的1:加深对单片机课程的全面认识和掌握,对单片机课程的应用做进一步的了解。 目的2:掌握串口进行数据传输的应用。 目的3:通过此次项目设计将单片机软硬件结合起来对程序进行编辑,校验,锻炼实践能力和理论联系实际的能力。  目的4:锻炼团队分工合作与协调能力,通过自学和探讨的方式解决实际问题的能力。  2 项目设计任务与要求  任务:设计一个能够控制十二盏交通信号灯的模拟系统。包括:硬件电路及控制软件。 要求: (1)系统工作受开关控制,开关ON,则系统工作;开关OFF,则系统停止工作。 (2)控制对象: 东西方向红灯两个,南北方向红灯两个; 东西方向黄灯两个,南北方向黄灯两个; 东西方向绿灯两个,南北方向绿灯两个。 由控制对象组成视图如下图1-1 图1-1 控制对象组成视图 要求:十字路口东西方向和南北方向各装有直行(包括右拐弯)控制红、黄、绿交通信号灯。还有时间显示器,显示器用于显示相应方向直行控制当前点亮信号灯还要持续的时间(即剩余时间)。系统中有两个按钮-启动和停止,启动按钮按下后信号灯系统开始工作,并周而复始地循环;停止按钮按下,所有信号灯都熄灭。信号灯的控制规律如表1-1所示。即系统启动后,东西方向先绿灯亮25s,然后绿灯闪烁3s,最后黄灯亮2s,与此同时南北方向红灯亮30s。南北方向红灯亮30s后转为先绿灯亮25s,然后绿灯闪烁3s,最后黄灯亮2s,东西向红灯亮30s。由此周而复始地循环。要求采用单片机实现交通灯的控制规律。       3 软件总体设计  3.1系统软件设计的分析  主程序采用查询方式定时,调用0.5S延时子程序的次数,从而获取交通灯的各种时间。子程序采用定时器1方式1查询式定时,定时器定时100ms,确定100ms循环10次,从而获得1S的延时时间。  有车车道的放行的中断服务程序首先要保护现场,因而需用到延时子程序,子程序采用定时器0方式1查询式定时,定时器定时100ms,确定100ms循环10次,从而获得1S的延时时间,保护现场时还需关中断,以防止高优先级中断(紧急车辆通过所产生的中断)出现导致程序混乱。  开中断,由软件查询外中断1,判别哪一道有车,再根据查询情况执行相应的服务。待交通灯信号出现后,保持10S的延时,然后,关中断,恢复现场,再开中断返回主程序。  3.2 软件设计  表1-1 信号灯的控制规律 东西方向 信号 绿灯亮 绿灯闪烁 黄灯亮 红灯亮 时间 25s 3s 2s 30s 南北方向 信号 红灯亮 绿灯亮 绿灯闪烁 黄灯亮 时间 30s 25s 3s 2s                 3.3 程序流程图 图1-2 程序流程图 3.4 程序清单 (1)倒计时程序:倒计时程序采用的是两个循环嵌套,大循环控制十位显示,小循环控制个位显示。当倒计时完成为零时,程序继续返回初始化并执行。具体代码如下: ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV P0,#00H SETB P2.6 ;P2.6高电平 SETB P2.7 ;P2.7高电平 MOV R0,#09H ;存放个位 MOV R1,#05H ;存放十位 MOV R2,#888 MOV R3,#0AH ;初始个位控制字,最大可以到几,此处设为10-1。 MOV R4,#06H ;十位控制字,最大可以到几,此处设为10-1。 MOV DPTR,#TABLE L0: MOV A,R0  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P2,#040H ;p2.7(个位)高电平,其他低; MOV P0,A  ;将a中的数组送至p0口显示 ACALL DELAY MOV A,R1  ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P2,#80H ;P2.6(十位)高电位,其他低; MOV P0,A  ;A中的数据送至P0口显示 ACALL DELAY DJNZ R2,L0  ;R2-1不为零时跳转到L0,否则继续执行。 DEC R0 ;R0减一 MOV R2,#888 DJNZ R3,L0 ;R3-1不为零时跳转到L0,否则继续执行。 MOV R0,#09H ;将个位重置为9; MOV R3,#0AH DEC R1 ;R1减一 DJNZ R4,L0 ;R4-1不为零时跳转到L0,否则继续执行。 AJMP MAIN DELAY:  ;误差 -0.868055555556us MOV R6,#0FBH DL0: MOV R5,#04H DJNZ R5,$ DJNZ R6,DL0 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END (2)按键程序:当按键按下时对应的口为低电位,程序判断对应的端口是不是低电位,如果是低电位的话,就执行相应的程序模块。代码如下: KEY1: JNB P2.0,DIS_S1 JNB P2.1, DIS_S2  JNB P2.2, DIS_S3  ;;;查询是否第一个按键按下 AJMP  DIS_R1          ;;;没有键按下则返回 DIS_S1:LCALL D5MS1          ;;;按键去抖 JNB  P2.0,DIS_SN1 AJMP  DIS_R1  DIS_SN1: ACALL MAIN AJMP  DIS_R1 RET D5MS1:  MOV    R7,#5 DIS_R1: RET 4 项目设计心得与体会 (1)、在编写软件中,在此过程中我更为熟练得掌握汇编语言各种指令的使用方法,掌握了keil软件的使用。  (2)、在程序的编写和开发过程中,让我认识到了底层硬件的复杂。让我对计算机产生了一种敬意。调试程序过程中遇到了很多很多的问题,比如端口不对应,低电平和高电平弄反了等等一些错误。其中也有一些儿难题,但是在我们组的共同努力下,解决了难题,这说明了团队协作的重要性。 (3)、通过这次项目设计,我们掌握了用单片机设计交通灯的基体方法,增强了我们寻找问题,解决问题的能力。培养了我们的设计思维,此次项目设计的成功不仅帮助我们更好地掌握本知识,尤其重要的是培养了我们独立思考的能力。 总之,这次的项目设计让我受益匪浅。深刻的明白了在项目设计中如何能够不断的发现问题并改善问题,如何能够更好的提高团队与自身的工作效率,如何能够更好地完善现有的工作流程、工作方式及配合协调各成员的工作,这些都是我在今后的工作中需要加倍努力及奋斗的目标!这次的课程设计让我受益匪浅。深深认识到,要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,经历失败,从失败中经验,然后再不断的尝试,才能获得成功,。 最后还要感谢我们小组成员,感谢我们的吴老师,在我们的团结协作,共同努力,在老师的精心指导下,我们才能顺利完成本次课设。 参考文献  [1]张毅刚,彭喜元,彭宇.单片机原理及应用,高等教育出版社,2010。 [2]康华光.电子技术基础 模拟部分(第五版),高等教育出版社,2009。 附录(源代码): ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV P0,#00H SETB P3.2 SETB P3.3 MOV p3,#0FFH MOV R0,#00H ;存放个位 MOV R1,#03H ;存放十位 MOV R2,#1220 MOV R3,#01H ;初始个位控制字,最大可以到几,此处设为10-1。 MOV R4,#04H ;十位控制字,最大可以到几,此处设为3-1。 ;MOV R8,#00H MOV DPTR,#TABLE ACALL STAGE RET ;30秒倒计时; STAGE: MOV P2,#0FFH SETB P3.6 SETB P3.7 L0:        CLR P2.4 CLR P2.7 MOV A,R0  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#0D7H ;p3.3/3.5(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,R1    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0EBH ;P3.2/3.4(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) ACALL DELAY DJNZ R2,L0    ;R2-1不为零时跳转到L0,否则继续执行。 DEC R0 ;R0减一 MOV R2,#1220 MOV A,R1 XRL A,#00H JZ TEST L0_A:    DJNZ R3,L0 ;R3-1不为零时跳转到L0,否则继续执行。 MOV R0,#09H ;将个位重置为9; MOV R3,#0AH DEC R1 ;R1减一 DJNZ R4,L0 ;R4-1不为零时跳转到L0,否则继续执行。 RET TEST: MOV A,R0 XRL A,#03H JZ TEST2 ACALL L0_A TEST2:    MOV P2,#0FFH SETB P3.6 SETB P3.7 CLR P2.5 CLR P3.6 MOV R2,#1220 TEST23:    MOV A,#03H  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#097H ;p3.3/3.5/3.6(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,#00H    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0ABH ;P3.2/3.4/3.6(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) DJNZ R2,TEST23;R2-1不为零时跳转到L0,否则继续执行。 MOV R2,#1220 SETB P2.5 SETB P3.6 TEST22:    MOV A,#02H  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#0D7H ;p3.3/3.5(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,#00H    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0EBH ;P3.2/3.4(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) DJNZ R2,TEST22;R2-1不为零时跳转到L0,否则继续执行。        CLR P2.5 CLR P3.6 MOV R2,#1220 TEST21:    MOV A,#01H  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#097H ;p3.3/3.5/3.6(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,#00H    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0ABH ;P3.2/3.4/3.6(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) DJNZ R2,TEST21;R2-1不为零时跳转到L0,否则继续执行。        MOV R2,#1220 SETB P2.5 SETB P3.6 TEST20:    MOV A,#00H  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#0D7H ;p3.3/3.5(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,#00H    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0EBH ;P3.2/3.4(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) DJNZ R2,TEST20;R2-1不为零时跳转到L0,否则继续执行。        ACALL STAGE2 STAGE2: MOV P0,#00H SETB P3.2 SETB P3.3 mov p3,#0FFH MOV R0,#00H ;存放个位 MOV R1,#03H ;存放十位 MOV R2,#1220 MOV R3,#01H ;初始个位控制字,最大可以到几,此处设为10-1。 MOV R4,#04H ;十位控制字,最大可以到几,此处设为3-1。 ;MOV R8,#00H MOV P2,#0FFH SETB P3.6 SETB P3.7 CLR P2.6 CLR P3.7 L20:        ;;//////////南北方向 MOV A,R0  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#057H ;p3.3/3.5(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,R1    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#06BH ;P3.2/3.4(十位)低电平; CLR P3.7 ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) ACALL DELAY DJNZ R2,L20    ;R2-1不为零时跳转到L20,否则继续执行。 DEC R0 ;R0减一 MOV R2,#1220 MOV A,R1 XRL A,#00H JZ TEST_L2 L20_A:    DJNZ R3,L20 ;R3-1不为零时跳转到L20,否则继续执行。 MOV R0,#09H ;将个位重置为9; MOV R3,#0AH DEC R1 ;R1减一 DJNZ R4,L20 ;R4-1不为零时跳转到L20,否则继续执行。 RET TEST_L2: MOV A,R0 XRL A,#03H JZ TEST_L2_2 ACALL L20_A        TEST_L2_2: MOV P2,#0FFH SETB P3.6 SETB P3.7 CLR P2.5 CLR P3.6 MOV R2,#1220 TEST_L2_23:    MOV A,#03H  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#097H ;p3.3/3.5/3.6(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,#00H    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0ABH ;P3.2/3.4/3.6(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) DJNZ R2,TEST_L2_23;R2-1不为零时跳转到L0,否则继续执行。 MOV R2,#1220 SETB P2.5 SETB P3.6 TEST_L2_22:    MOV A,#02H  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#0D7H ;p3.3/3.5(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,#00H    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0EBH ;P3.2/3.4(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) DJNZ R2,TEST_L2_22;R2-1不为零时跳转到L0,否则继续执行。        CLR P2.5 CLR P3.6 MOV R2,#1220 TEST_L2_21:    MOV A,#01H  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#097H ;p3.3/3.5/3.6(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,#00H    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0ABH ;P3.2/3.4/3.6(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) DJNZ R2,TEST_L2_21;R2-1不为零时跳转到L0,否则继续执行。        MOV R2,#1220 SETB P2.5 SETB P3.6 TEST_L2_20:    MOV A,#00H  ;将r0中存放的个位数给A MOVC A,@A+DPTR ;查表 MOV P3,#0D7H ;p3.3/3.5(个位)低电平; ;MOV P2,#040H MOV P1,A    ;将a中的数组送至p1口显示(南北) MOV P0,A ;将a中的数组送至p0口显示(东西) ACALL DELAY MOV A,#00H    ;将R1中存放的十位数给A MOVC A,@A+DPTR MOV P3,#0EBH ;P3.2/3.4(十位)低电平; ;MOV P2,#80H MOV P1,A    ;A中的数据送至P1口显示(南北) MOV P0,A ;A中的数据送至P1口显示(东西) DJNZ R2,TEST_L2_20;R2-1不为零时跳转到L0,否则继续执行。        ACALL MAIN        DELAY:  ;误差 -0.868055555556us ACALL KEY1    MOV R6,#0FBH DL0: MOV R5,#04H DJNZ R5,$ DJNZ R6,DL0 RET DELAY_NK:  ;误差 -0.868055555556us ;ACALL KEY1    MOV R6,#0FBH DL0_NK: MOV R5,#04H DJNZ R5,$ DJNZ R6,DL0 RET    TABLE: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H KEY1: JNB  P2.0,DIS_S1 JNB      P2.1, DIS_S2  JNB      P2.2, DIS_S3  ;;;查询是否第一个按键按下 AJMP  DIS_R1          ;;;没有键按下则返回 DIS_S1:LCALL D5MS1          ;;;按键去抖 JNB  P2.0,DIS_SN1 AJMP  DIS_R1  DIS_SN1: ACALL MAIN AJMP  DIS_R1 RET D5MS1:  MOV    R7,#5 DIS_R1: RET ;------------------------------------ KEY2: JNB  P2.1,DIS_S2    ;;;查询是否第一个按键按下 AJMP  DIS_R2          ;;;没有键按下则返回 DIS_S2:LCALL D5MS2          ;;;按键去抖 JNB  P2.1,DIS_SN2 AJMP  DIS_R2  DIS_SN2: ACALL STAGE2 AJMP  DIS_R2 RET D5MS2:  MOV    R7,#5 DIS_R2: RET ;------------------------------------ KEY3: JNB  P2.2,DIS_S3    ;;;查询是否第一个按键按下 AJMP  DIS_R3          ;;;没有键按下则返回 DIS_S3:LCALL D5MS3          ;;;按键去抖 JNB  P2.2,DIS_SN3 AJMP  DIS_R3  DIS_SN3: ACALL STAGE3 AJMP  DIS_R3 RET D5MS3:  MOV    R7,#5 DIS_R3: RET STAGE3: MOV P0,#0FFH MOV P1,#0FFH SETB P2.4 SETB P2.5 SETB P2.6 SETB P2.7 SETB P3.6 SETB P3.7 CLR P2.6 CLR P2.7 MOV R2,#1220 STAGE3_L:    ACALL DELAY_NK DJNZ R2,STAGE3_L ACALL DELAY ACALL STAGE3 END 项目设计 评 语   项目设计 成 绩   指导教师 (签字) 年 月 日        
/
本文档为【汇编单片机交通灯】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索