该系统要求完成倒计时的功能。因只需显示数字,基于上述原因,我们考虑完全采用数码管显示,四个路口分别采用一个二位阴极数码管即可。
3.1.2 状态灯显示
该系统要求完成状态灯显示的功能。求于简单,我们把各个路口的红灯和黄灯设成直行和左拐两个通行方式所共有,也就是说,一个路口只需四个状态灯,一个直行通行的绿灯,一个左拐通行的绿灯,一个共有的红灯,一个共有的黄灯。
3.2 输入方案:
该系统要求能手动改变东西与南北的通行时间、紧急情况处理,我们采用扩
展I/O
口方法,在外部中断P32口上扩展三个中断口,分别连接三个按钮。该方案的优点是:使用灵活,并且可提供较多I/O口,节省了AT89C52的中断口资源。
4 原理分析
4.1 交通灯显示时序的理论分析
下图所示为一种红绿灯规则的状态图。
图4.1 状态S1南北图4.2 状态S2南北 直行通行 左拐通行
图4.3 状态S3东图4.4 状态S4东
西直行通行 西左拐通行 共四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一
个周期,循环执行如下图所示:
图4.5 交通灯状态循环图
依据上述车辆行驶的状态图,可以列出各个路口灯的逻辑表如下表所示(其中逻辑值“1”代表直行通行,逻辑值“0”代表禁止通行,逻辑值“L”代表左拐通行):
S1的状态 逻辑值 显示时间 S2的状态 逻辑值 显示时间 S3的状态 逻辑值 显示时间 S4的状态 E
E 0 S 1 W 0 N 1 正常模式下为40S E 0 S L W 0 N L 正常模式下为20S E 1 S 0 W 1 N 0 正常模式下为40S S W N 逻辑值 显示时间 L 0 L 0 正常模式下为20S 程序就是在上述四种状态下循环转化的。一个周期四个状态,在正常模式下共花费2分钟。
4.2 交通灯显示的理论分析
4.2.1 倒计时显示的理论分析 利用定时器中断,设置 TH0=TH1=(65536-50000)/256,即每0.05秒中断一次。每到第20次中断即过了20*0.05秒=1秒时,使时间的计数值减1,便实现了倒计时的功能。
4.2.2 状态灯显示的理论分析
黄灯闪烁同样可以利用定时器中断。每到第10次中断即过了10*0.05秒=0.5秒时,使黄灯标志位反置,即可让黄灯1秒闪烁一次。
5 程序设计流程图
T0响应 N 0.5s到 Y 南北黄灯标志位为1 N 东西黄灯标志位为1 N N 1s到 Y 倒计时减1,计数值置0 返回 Y 东西黄灯位置反 Y 南北黄灯位置反
图5.1 定时器0中断流程图
开始 AT89C52初始化 南北直行通行东西禁止 N 通行35秒 Y 南北黄灯闪烁 东西直行通行南北禁止 N 闪烁5秒 Y N 通行35秒 Y 东西黄灯闪烁 南北左拐通行东西禁止 N 通行15秒 Y 南北黄灯闪烁 N 闪烁5秒 Y 东西左拐通行南北禁止 N 闪烁5秒 Y N 通行15秒 Y 东西黄灯闪烁 N 闪烁5秒 Y
图5.2 主程序流程图
INT0响应 关中断 Y “正常”键按下 N “繁忙”键按下 N “特殊”键按下 N 开中断 返回 正常模式设置 Y 繁忙模式设置 Y 特殊模式设置 图5.3 外部中断0中断流程图
6 总体设计与电路图
6.1 芯片选择
AT89C52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,可以按照常规方法对其进行编程,也可以在线编程。其将通用的微处理器和Flash存储 器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。