51单片机模拟交通信号灯

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《单片机实验》设计报告交通信号灯模拟系统设计

交通信号灯模拟系统设计

摘要:

本系统以单片机为核心,主要应用单片机中定时器计数器,IO接口,中断系统等,结合8279键盘控制电路,数码管显示以及LED灯实现对十字路口交通信号灯的智能控制。成功实现了利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,通过按键对红绿灯点亮和熄灭时间进行调整及设置以及对红绿灯点亮和熄灭时间进行倒计时时间显示等基本功能。并在此基础上进一步扩展,实现了对某些特殊功能的操作,如:突发紧急情况,所有路线全部红灯,或南北向(主干道)强制绿灯通行,以及东西向(次干道)强制绿灯等,并且可在交通高峰期(系统默认上午7:00-8:00,下午17:00-18:00)自动修改绿灯时间。系统功能完善,可操控性好,代码通俗易懂。

关键字:

51单片机交通信号灯智能控制 8279

主要功能:

分析题目可知,有两种方案设计的方法,也即两条不同的主干分别对应不同的方案,方案一以键盘控制为主干,穿插对系统时钟的检测,倒计时的检测等,系统主干为循环检测键盘是否被按下并作出相应操作。方案二以交通信号灯不同的点亮与熄灭状态为主干,即系统的主干是交通灯状态的循环,在循环中检测按键并作出相应调整。此次试验选择的是方案二,因为对方案一的代码实现比较复杂。信号灯的状态依次为:南北绿灯,东西红灯->南北黄灯,东西红灯->南北红灯,东西绿灯->南北红灯,东西黄灯。解决这部分问题的关键在于8279键盘扫描和相应的数码管显示,在实验帮助里有详细代码,另一个难点在于内置时钟和倒计时显示,这一部分内容通过使用单片机内的定时器能很好的解决,实验帮助五有详细的代码,通过定时器T1产生中断来定时,从而完成一秒的时间。具体详见附录代码。

设计的主要内容:

第一部分,系统开机界面,设置及人机互动的按键控制,流程图如下:

(相应的功能流程图中已给出)

第二部分,

系统主干部分,即交通信号灯4个大循环以及循环内部检测按键完成拓展功能

的实现,在循环内检测按键,实现相应功能,流程如下:

具体细节,例如定时器的设计等在纸质档报告中有详细分析,在这里就不赘述总结:

总的来说这次试验比较成功,题目要求的功能基本都实现了,对于单片机汇编程序语言的理解也更深刻了,课本上的知识比较分散,每部分之间都没有什么联系,通过实验很好的把各部分之间联系起来,加深记忆,更便于理解。唯一不足的是对于题目的考虑不周,特殊功能采用键盘扫描子程序解决了,而没有采用终端,使得程序应激性不好,没有很好的应变性。在以后的编程中会注意这方面的内容。

附录:(详细代码)

;-------------------------------------------------------

Z8279 EQU 0FF82H ;8279 状态/命令口地址

D8279 EQU 0FF80H ;8279 数据口地址

LEDMOD EQU 00H ;左边输入八位字符显示

;外部译码键扫描方式,双键互锁

LEDFEQ EQU 2FH ;扫描速率

LEDCLS EQU 0C1H ;清除显示 RAM

LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址

READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字

;-------------------------------------------------------

ORG 0000H

AJMP START

ORG 001BH ;INT T1 入口地址

AJMP INT_T1

ORG 0040H

START:

MOV SP,#60H

LCALL INIT8279 ;初始化8279

MOV R3,#0H ;时

MOV R2,#0H ;分

MOV R1,#0H ;秒

MOV R7,#0H ;倒计时时间

MOV R0,#20 ;50毫秒

MOV 40H,#0 ;用于改变主次干道时长比

MOV R6,#0FFH ;标志

MOV TMOD,#10H

MOV TL1,#00H ;50毫秒的时间常数

MOV TH1,#4CH

SETB EX0

SETB ET1

SETB EA ;允许中断

; 初始状态,全红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

; 键盘操作

WAIT:

LCALL GETKEY ;读键盘

CJNE A,#0FFH,CONT ;判断是否有键输入

MOV A,B

CJNE A,#3CH,KEY_C ;输入键是'C',转CLEAR_T LCALL CLEAR_T

KEY_C:

CJNE A,#3AH,KEY_A ;输入键是'A',转START_T LCALL START_T

KEY_A:

CJNE A,#3DH,KEY_D ;输入键是'D',转STOP_T LCALL STOP_T

KEY_D:

CJNE A,#3BH,KEY_E ;输入键是'B',转SET_T LCALL SET_T ;设置系统时间

KEY_E:

CJNE A,#3FH,KEY_B ;输入键是'F',转SET_COUT

LCALL SET_COUT ;设置倒计时间

KEY_B:

CJNE A,#3EH,CONT ;输入键是'E',转MONITOR AJMP MONITOR

CONT:

CJNE R6,#0FFH,WAIT;若无秒标志则循环

LCALL DISPLAY ;显示时间

MOV R6,#0 ;清标志

SJMP WAIT ;循环

MONITOR:

NOP

SJMP $ ;等待回到监控

;按键对应的功能

CLEAR_T: ;时间清零子程序

CLR TR1 ;关计数器

MOV R3,#0H ;小时清零

MOV R2,#0H ;分钟清零

MOV R1,#0H ;秒清零

MOV R0,#20 ;10毫秒清零

MOV R7,#0H ;倒计时时间清零

MOV R6,#0FFH ;置秒标志

RET

START_T: ;电子钟计时子程序

;程序主要部分

;程序开始执行后将循环在这部分

CIRCLE:

LCALL STATION1 ;南北绿灯,东西红灯

LCALL STATION2 ;南北绿灯闪转黄灯,东西红灯 LCALL STATION3 ;南北红灯,东西绿灯

LCALL STATION4 ;南北红灯,东西绿灯闪转黄灯 LJMP CIRCLE

RET

;STATION1

STATION1: ;南北绿灯,东西红灯

MOV R7,30H

MOV A,R7

ADD A,40H

MOV R7,A

MOV DPTR,#8300H

MOV A,#96H ;南北绿灯,东西红灯

相关文档
最新文档