首页 > 范文大全 > 正文

单片机在交通信号倒计时器的应用

开篇:润墨网以专业的文秘视角,为您筛选了一篇单片机在交通信号倒计时器的应用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:详细介绍了基于AT89C2051单片机交通信号计时器的基本工作原理,并对其在硬件设计、软件设计和实现方法中的注意事项进行了详细的阐述。

关键词:AT89C2051;交通信号;倒计时

中图法分类号:TP271 文献标识码:A 文章编号:1009-3044(2008)22-780-02

Application of Single-chip Computer in Traffic Lights Countdown Timer

ZHANG Yong

(Electrical Engineering Department, Songshan Polytechnic College, Shaoguan 512126, China)

Abstract: This paper introduces the basic working theory of the traffic lights countdown timer based on AT89C2051 Single-chip Computer. Meanwhile, there is detailed illustration of precautions for its hardware, software and realization.

Key words: AT89C2051; traffic lights; count down

1 引言

自改革开放时至今天,我国的国民经济建设取得了巨大的发展。随着人民群众物质文化生活水平日益提高,城市机动车辆的保持量也同样在不断增加,但是城市道路交通建设的步伐远远跟不上机动车辆增加的步伐,当城市交通路口亮红灯时,大量停留在路口的机动车辆在空燃烧能源排放的有害废气,既浪费社会能源也给人民群众的生活环境带来一系列不良的影响。利用现代科学技术发展的成熟技术,在现有城市交通道路的条件下,通过对城市道路路口显示交通控制信号的倒计时,能减少车辆燃烧能源排出废气,对改善城市生活环境无疑将具有非常重要的现实意义。

2 交通信号倒计时器的工作原理

本交通信号倒计时器通过长期对城市道路路通信号控制机状况的深入调查和研究,把输入到倒计时器的交通控制信号在细分相位的基础上,把同一交通信号相位中不同的灯色状态作为整个交通控制方案过程的一步,以每一步的时间长度作为显示倒计时的目标。

本交通信号倒计时器支持左转绿灯、直行绿灯、黄灯和红灯四种交通控制信号的灯色状态信息的输入,除输入的灯色状态信息闪烁外,其它任何输入的灯色状态信息的改变都视为整个控制方案过程的一步。如输入的灯色状态信息单独为黄灯状态后,接着输入的灯色状态信息又为单独红灯状态,当单独红灯状态结束后,则被认为是一个完整的交通信号控制方案运行结束。倒计时器把完整的交通信号控制方案的每一步伐的灯色状态信息和时间长度都记录下来,在交通信号控制方案再次运行时则倒计时显示上一次运行时对应的控制方案的步伐时间长度。

需要注意的是为适应交通路口车流和人流在不同的时间段的变化,交通信号控制机在不同的时间段有可能运行不同的交通控制方案,因此输入到倒计时器的交通控制信号方案也就会发生改变。交通控制信号方案发生改变时,倒计时如果再显示上一次运行时对应的控制方案的步伐时间长度就有可能不准确甚至完全错误。因此倒计时在显示控制方案步伐时间时,要根据当前输入的灯色状态与要显示的上次灯色状态比较,是一致才倒计时显示。

3 硬件设计及实现

考虑到交通信号倒计时器主要在室外安装使用,运行环境比较恶劣,其运行控制的稳定性和可靠性对路口行驶车辆的交通安全具有重要的影响。本交通信号倒计时器在硬件设计上高度采用抗干扰能力强的工业级集成芯片,具有很高的稳定性和可靠性。如上图1所示为基于89C2051单片机的交通信号倒计时器硬件原理图,最大显示时间为99秒钟。

图1 交通信号倒计时器硬件原理图

主控芯片CPU选择ATMEL公司的89C2051单片机,该单片机可在12MHZ 频率下稳定的工作,有足够的运行速度来读取外部交通控制信号输入的灯色状态,同时其内部具有2K字节的程序存储空间,完全能够满足运行倒计时器程序所需的存储空间需要。

4 软件设计及实现

本交通信号倒计时器判断一个完整的输入交通信号控制方案是当输入的灯色状态单独为黄灯状态后,接着输入的灯色状态又为单独红灯状态,并在红灯状态输入结束后则认为是一个交通信号控制方案的结束。系统在上电正常运行后,首先根据输入的交通控制信号灯色状态的变化来判断步伐的变化和控制方案的结束,一旦控制方案结束后则把本控制方案的各个步伐的运行时间长度和灯色状态存入到显示数据缓冲区等待下次再运行相同的控制方案时显示各个步伐的运行时间长度的倒计时。处理输入灯色状态信息的函数如下:

void Process_Color_Input( ) // 处理灯色输入

{

uchar i;

if(bRead_Input_Flag) // 读输入标志有效

{

bRead_Input_Flag = FALSE;

ucInput_Color = P3 & 0x3c; // 当前灯色的输入值

if((ucInput_Color != ucOld_Color)&&(ucInput_Color != 0x00)) //灯色变化但不闪

{

if((ucInput_Color == 0x20)&&(ucOld_Color != 0x10)) //当前独立红色原独立黄色

ucStep_Change_Flag = FALSE; // 灯色改变标志

else ucStep_Change_Flag = TRUE; // 灯色改变标志

if(ucStep_Change_Flag)

{

Prg_Step_Color[ucPrg_Step] = ucOld_Color;

Prg_Step_Long[ucPrg_Step] = ucPrg_Long; // 步伐时间长度

ucPrg_Long = 0x00; // 编程步伐时间长度

uiPrg_Time1_Num = 1; // 定时器其启动计数

if(ucOld_Color == 0x20) // 原灯色值为独立红色

{

For(i= 0x00,i++;i

{

Cur_Step_Color[i] = Prg_Step_Color[i];

Cur_Step_Long[i] = Prg_Step_Long[i];

Prg_Step_Color[i] = 0x00;

Prg_Step_Long[i] = 0x00;

}

ucPrg_Step = 0x00; // 编程步伐

bStart_Step_Flag = TRUE; // 步伐开始标志

}

else ucPrg_Step++; // 编程步伐