当前位置:首页 >> 计算机硬件及网络 >>

汇编单片机交通灯


信息与电气工程学院

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

I

1 项目设计目的
目的 1:加深对单片机课程的全面认识和掌握,对单片机课程的应用做进一 步的了解。 目的 2:掌握串口进行数据传输的应用。 目的 3: 通过此次项目设计将单片机软硬件结合起来对程序进行编辑, 校验, 锻炼实践能力和理论联系实际的能力。 目的 4:锻炼团队分工合作与协调能力,通过自学和探讨的方式解决实际问 题的能力。

2 项目设计任务与要求
任务:设计一个能够控制十二盏交通信号灯的模拟系统。包括:硬件电路及 控制软件。 要求: (1)系统工作受开关控制,开关 ON,则系统工作;开关 OFF,则系统停止工 作。 (2)控制对象: 东西方向红灯两个,南北方向红灯两个; 东西方向黄灯两个,南北方向黄灯两个; 东西方向绿灯两个,南北方向绿灯两个。 由控制对象组成视图如下图 1-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 次,
2

从而获得 1S 的延时时间,保护现场时还需关中断,以防止高优先级中断(紧急 车辆通过所产生的中断)出现导致程序混乱。 开中断,由软件查询外中断 1,判别哪一道有车,再根据查询情况执行相应的服 务。待交通灯信号出现后,保持 10S 的延时,然后,关中断,恢复现场,再开中 断返回主程序。

3.2 软件设计
表 1-1 信号灯的控制规律

东西 方向 南北 方向

信号 时间 信号 时间

绿灯亮 25s

绿灯闪烁 3s 红灯亮 30s

黄灯亮 2s 绿灯亮 25s

红灯亮 30s 绿灯闪烁 3s 黄灯亮 2s

3

3.3 程序流程图

开始

初始化时钟程序

东西红南北绿

东西方向剩余 5S?



是 东西红南北黄

否 东西方向剩余 0S?

是 东西绿南北红

南北方向剩余 5S?



是 东西黄南北红



否 南北方向剩余 0S?

图 1-2 程序流程图
4

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,否则继续执行。

5

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: JNBP2.0,DIS_S1 JNBP2.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 DIS_R1: RET R7,#5 ;;;查询是否第一个按键按下 ;;;没有键按下则返回 ;;;按键去抖

6

4 项目设计心得与体会
(1) 、 在编写软件中,在此过程中我更为熟练得掌握汇编语言各种指令的使 用方法,掌握了 keil 软件的使用。 (2) 、在程序的编写和开发过程中,让我认识到了底层硬件的复杂。让我对 计算机产生了一种敬意。 调试程序过程中遇到了很多很多的问题,比如端口不对 应,低电平和高电平弄反了等等一些错误。其中也有一些儿难题,但是在我们组 的共同努力下,解决了难题,这说明了团队协作的重要性。 (3) 、通过这次项目设计,我们掌握了用单片机设计交通灯的基体方法,增 强了我们寻找问题,解决问题的能力。培养了我们的设计思维,此次项目设计的 成功不仅帮助我们更好地掌握书本知识, 尤其重要的是培养了我们独立思考的能 力。 总之, 这次的项目设计让我受益匪浅。深刻的明白了在项目设计中如何能够 不断的发现问题并改善问题, 如何能够更好的提高团队与自身的工作效率,如何 能够更好地完善现有的工作流程、工作方式及配合协调各成员的工作,这些都是 我在今后的工作中需要加倍努力及奋斗的目标!这次的课程设计让我受益匪浅。 深深认识到,要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝 试中,经历失败,从失败中总结经验,然后再不断的尝试,才能获得成功,。 最后还要感谢我们小组成员,感谢我们的吴老师,在我们的团结协作,共同 努力,在老师的精心指导下,我们才能顺利完成本次课设。

参考文献
[1]张毅刚,彭喜元,彭宇.单片机原理及应用,高等教育出版社,2010。 [2]康华光.电子技术基础模拟部分(第五版),高等教育出版社,2009。

7

附录(源代码):
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 ACALL DELAY MOV A,R1 ;将 R1 中存放的十位数给 A MOVC A,@A+DPTR MOV P3,#0EBH ;P3.2/3.4(十位)低电平; ;MOV P2,#80H MOV P1,A ACALL DELAY ;A 中的数据送至 P1 口显示(南北) MOV P0,A ;A 中的数据送至 P1 口显示(东西) ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西)

8

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 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(个位)低电平; ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西)

9

;MOV P2,#040H MOV P1,A 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 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 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 口显示(东西) ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西) ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西) ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西)

10

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 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 ACALL DELAY DJNZ R2,L20 ;R2-1 不为零时跳转到 L20,否则继续执行。 DEC R0 ;R0 减一 MOV R2,#1220 MOV A,R1 ;A 中的数据送至 P1 口显示(南北) MOV P0,A ;A 中的数据送至 P1 口显示(东西) ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西)

11

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 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 ACALL DELAY ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西) ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西)

12

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 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 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 ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西) ;将 a 中的数组送至 p1 口显示(南北) MOV P0,A ;将 a 中的数组送至 p0 口显示(东西)

13

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 JNB JNB P2.0,DIS_S1 P2.1, DIS_S2 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 DIS_R1: RET R7,#5

;-----------------------------------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 DIS_R2: RET R7,#5

;-----------------------------------KEY3: JNB P2.2,DIS_S3 ;;;查询是否第一个按键按下 ;;;没有键按下则返回

AJMP DIS_R3

14

DIS_S3:LCALL D5MS3 JNB P2.2,DIS_SN3 AJMP DIS_R3 DIS_SN3: ACALL STAGE3 AJMP DIS_R3 RET D5MS3: MOV 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 R7,#5

;;;按键去抖

15

项目设计 评语

项目设计 成绩

指导教师 (签字) 年月日

16


赞助商链接
相关文章:
交通灯单片机汇编语言
本文档是智能交通灯的基于51单片机汇编语言,可在protues中仿真。本文档是智能交通灯的基于51单片机汇编语言,可在protues中仿真。隐藏>> ORG 0000H SJMP MAIN ...
汇编单片机交通灯
汇编单片机交通灯 - 信息与电气工程学院 1403 计算机(CDIO) 基于单片机交通灯设计 项目报告 (2015 /2016 学年第 二 学期) 软件总体设计 姓名:... 学号:...
单片机—交通灯实验(汇编版)
单片机交通灯实验 15页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 单片机—交通灯实验(汇编版) STC单片机、汇编...
单片机汇编语言交通灯
单片机汇编语言交通灯_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 单片机汇编语言交通灯_电子/电路_工程科技_专业资料。org 0000h ljmp ...
usb单片机cs51交通灯程序汇编语言
usb单片机cs51交通灯程序汇编语言 这个参考程序使用汇编语言写的这个参考程序使用汇编语言写的隐藏>> ORG 0000H A_BIT EQU 20H ;用于存放南北十位数 B_BIT EQU...
交通灯单片机(汇编)设计报告
(学号) 名称 城市道口交通灯控制系统 题目 指导教师评语 专业 电子信息工程 单片机原理及应用 指导教师签名: 年 答辩评语及成绩 月日 答辩小组教师签名: 年月 日...
基于51单片机的智能交通灯系统
基于51单片机的智能交通灯系统_信息与通信_工程科技_专业资料。基于51单片机的...(4)进行软件系统的设计,对于本系统,本人采用单片机汇编语言编写,对单片机 2 ...
单片机红绿交通灯设计报告 汇编版
单片机红绿交通灯设计报告 汇编版 隐藏>> 宁波理工学院 单片机原理与应用课程 设计(论文) 题 目 基于 AT89C51 单片机的红绿交通灯的设计 姓学 名号 专业班级 ...
单片机交通灯课程设计报告[1]
单片机交通灯课程设计报告[1]_电子/电路_工程科技_专业资料。单片机交通灯课程...设计目的 (1)加强对单片机和汇编语言的认识,充分掌握和理解设计各部分 的工作...
C语言单片机交通灯毕业设计
C语言单片机交通灯毕业设计_工学_高等教育_教育专区。目 录 摘要 ???1 一、 设计目的 ???2 二、 设计任务和要求 ???2 三、 设目 录 摘要 ???1 一、...
更多相关标签: