1 / 22

项目训练二 简易交通信号灯

项目训练二 简易交通信号灯. 一、任务目标 设计一个简易的交通信号灯控制器,其设计任务如下。 某交通十字路口,南北向为主干道,东西向为支道。每个道口安装一组信号灯,每组信号灯有红、黄、绿 3 种信号,各信号灯按以下规则循环显示交通信号指挥交通,见表 1 。 显示信号共有 4 种状态,称为四相。. 表 1 交通信号灯显示规则. 要求使用单片机控制发光二极管完成表 1 的显示功能。 二、硬件 1 、显示器件

reuben
Download Presentation

项目训练二 简易交通信号灯

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 项目训练二 简易交通信号灯

  2. 一、任务目标 设计一个简易的交通信号灯控制器,其设计任务如下。 某交通十字路口,南北向为主干道,东西向为支道。每个道口安装一组信号灯,每组信号灯有红、黄、绿3种信号,各信号灯按以下规则循环显示交通信号指挥交通,见表1。 显示信号共有4种状态,称为四相。

  3. 表1 交通信号灯显示规则 要求使用单片机控制发光二极管完成表1的显示功能。 二、硬件 1、显示器件 显示状态共有红、黄、绿3种颜色,可以使用红、黄、绿色发光二极管,每组信号灯使用3只发光二极管,两个方向的道口各使用1组。控制系统需要6个开关量控制发光二极管,见图1。6只发光二极管的显示规则见表2。

  4. 图1 信号灯显示电路

  5. 表2 发光二极管显示规则 2、驱动电路 为了提高89S51的驱动能力,89S51的端口经驱动器件ULN2803驱动发光二极管。 3、控制电路

  6. 选用89S51的P0口驱动ULN2803时必须接上拉电阻,为了简化电路使用P2口输出。交通信号灯电路见图7-2。选用89S51的P0口驱动ULN2803时必须接上拉电阻,为了简化电路使用P2口输出。交通信号灯电路见图7-2。 4.控制方法 根据显示规则,6只发光二极管一共有4种显示状态,每一种状态对应的P2口的输出状态见表3。需要改变输出时只需将P2口各位的状态组成一个字节发送到P2口即可,这样一个用于控制输出的数值称为控制字。四种状态的控制字见表3。

  7. 图2 交通信号灯电路

  8. 表3 信号灯控制方法 三、软件 1、算法分析 (1) 定时时间 根据规则,信号灯显示时间的单位为秒(s),系统采用12MHz晶振时定时计数器的最长定时时间为65ms。为了计算方便,定时计数器设定为定时50ms。采用中断方式,中断

  9. 程序中设置一个计数器(S1),每计数20次(1s)后设定时间标志(SBZ)通知主程序。程序中设置一个计数器(S1),每计数20次(1s)后设定时间标志(SBZ)通知主程序。 (2) 定时计数器设置 选用定时计数器0,模式1,定时计数器控制字为01H,见图3。 图 3 定时计数器控制字

  10. 12×106 12 X=216- ×50×10-3 解得:X=15536。 可以利用汇编语言的运算功能计算出TH0与TL0的初值。 TH0=15536/256 操作符“/”表示整除运算:取商,截去余数。 TL0=15536 MOD 256 操作符“MOD”表示取模运算:取余数,截去商。 定时计数器0初值计算:

  11. (3)定时计数器中断程序 定时计数器中断程序需完成的任务:每次中断后计数,当计数达到20次时设置标志SBZ通知主程序定时时间到,同时恢复计数器重新开始计数。 中断程序框图见图4。 (4)主程序 为了使程序具有通用性,将控制规则存放在数据区中,称为规则表(GZB),见图5。规则表中数据的存放方法如下。

  12. CTC0: PUSH ACC MOV TH0,#CTH MOV TL0,#CTL INC S1 MOV A,S1 CJNE A,#20,CTC1 MOV S1,#0 SETB SBZ CTC1: POP ACC RETI 图4 中断程序框图与程序

  13. GZB: DB 25,0CH ;25s,控制字0CH DB 5, 0AH ;5s, 控制字0AH DB 15, 21H ;15s, 控制字21H DB 5, 11H ;5s, 控制字11H DB 0 ;结束标志 图5 规则表 ① 则表每行对应一相规则,四相规则共有4行。 ② 则表每行有两项数据,第一项为延时时问,第二项为输出控制字。 ③ 则表最后存放一个“0”,用做规则表结束标志。 主程序将第一项数据读出后存放在寄存器中用做计时器,并将第二项数据由P2口送出,控制显示状态。

  14. 每当SBZ=1(定时ls时间到)时将计时器减1。当计时器减到“0”时,说明本相显示时间到,再读出规则表中下一行数据,如此重复。当从规则表中读出时间值为“0’’(结束标志)时,调整数据指针从规则表第一行重新开始读数据,实现循环显示。每当SBZ=1(定时ls时间到)时将计时器减1。当计时器减到“0”时,说明本相显示时间到,再读出规则表中下一行数据,如此重复。当从规则表中读出时间值为“0’’(结束标志)时,调整数据指针从规则表第一行重新开始读数据,实现循环显示。 这样当需要调整显示规则时只需修改规则表数据,而不必修改程序,从而使程序具有一定的通用性。 主程序框图见图6。

  15. ORG 0000H AJMP MAIN ORG 000BH AJMP CTC0 MAIN: MOV TMOD,#01H MOV TH0,#CTH MOV TL0,#CTL SETB TR0 SETB ET0 SETB EA PROG1: MOV DPTR,#GZB

  16. PROG2: CLR A MOVC A, @A+DPTR INC DPTR JZ PROGQ MOV R2,A CLR A MOVC A, @A+DPTR INC DPTR MOV P2,A WAIT: JBC SBZ,PROG3 SJMP WAIT

  17. PROG3: DEC R2 CJNE R2,#0,WAIT SJMP PROG2 图6 主程序框图与程序

  18. 2、程序清单 ;自动交通信号灯 ORG 0000H AJMP MAIN ;跳转到主程序入口 ORG 000BH ;定时计数器0中断入口 AJMP CTC0;跳转到定时计数器0中断程序 MAIN:MOV TMOD,#01H ;设定定时计数器0 为工作方式1 MOV TH0,#CTH ;设置计数器初值 MOV TL0,#CTL SETB TR0 ;启动定时计数器0

  19. SETB ET0 ;开定时计数器0中断 SETB EA ;开总中断 PROG1: MOV DPTR,#GZB ;数据指针指向规则表 首地址 PROG2: CLR A ;取规则表中第一项数据(时间值) MOVC A,@A+DPTR INC DPTR ;移动指针到规则表下一项数据 JZ PROG1 ;如果时间值为0,说明规则表数据 已读完移动数据指针到规则表首地址 MOV R2,A ;保存时间值 CLR A ;取规则表下一项数据 MOVC A,@A+DPTR

  20. INC DPTR ;调整数据指针 MOV P2,A ;显示状态送P2口 WAIT: JBC SBZ,PROG3 ;等待秒计时时间 SJMP WAIT PROG3: DEC R2 ;秒计时时间到,计时值-1 CJNE R2,#0,WAIT ;本相计时时间未到,继续等待 SJMP PROG2 ;本相计时时间到,取下一阶段数据 ;======================================== ;以下为定时计数器0中断程序,中断每50mS产生一次 CTC0: PUSH ACC ;保护现场

  21. MOV TH0,#CTH ;恢复计数器初值 MOV TL0,#CTL INC S1 ;中断次数累计 MOV A,S1;判断是否已中断20次,未到20次中断返回 CJNE A,#20,CTC1 MOV S1,#0 ;已到20次,计数器清0 SETB SBZ ;设置秒计时标志 CTC1: POP ACC ;恢复现场 RETI ;中断返回 ;=====================================

  22. ;以下为数据设置 S1 DATA 30H ;秒计数器 SBZ BIT 00H ;时间标志 CTH EQU 15536/256 ;定时计数器0初值高位 CTL EQU 15536 MOD 256;定时计数器0初值低位 GZB: DB 25,0CH ;显示规则表 DB 5,0AH DB 15,21H DB 5,11H DB 0 ;规则表结束标志 END ;程序结束

More Related