#include …… // 各种包含文件
#define Timer52s_H 0x??; // 定时52s高8位值,根据系统时钟计算确定
#define Timer52s_L 0x??; // 定时52s低8位值,根据系统时钟计算确定
#define Timer6s_H 0x??; // 定时6s高8位值,根据系统时钟计算确定
#define Timer6s_L 0x??; // 定时6s低8位值,根据系统时钟计算确定
#define Timer2s_H 0x??; // 定时2s高8位值,根据系统时钟计算确定
#define Timer2s_L 0x??; // 定时2s低8位值,根据系统时钟计算确定
#define Traffic_NS 0x00; // 南北方向通行允许
#define Traffic_WE 0x01; // 东西方向通行允许
#define LightGreen 0x10; // 绿灯常亮
#define FlishGreen 0x11; // 绿灯闪烁
#define LightYellow 0x12; // 黄常亮
// 定义各种需要的变量
……
//// 定时中断0 , 中断标志TF0 (TCON.5)
void ISR_Timer0 (void) interrupt 1
{
swicth(state_light)
{
case LightGreen: // 由常亮转入闪烁状态
// 将T0重载寄存器调整为6s
TMR0RLL = Timer6s_L;
TMR0RLH = Timer6s_H;
// 将T0计数寄存器调整为6s
TMR0L = Timer6s_L;
TMR0H = Timer6s_H;
state_light = FlishGreen; // 状态标记切换为闪烁
// 在这里加入状态处理
……
break;
case FlishGreen:
// 将T0重载寄存器调整为2s
TMR0RLL = Timer2s_L;
TMR0RLH = Timer2s_H;
// 将T0计数寄存器调整为2s
TMR0L = Timer2s_L;
TMR0H = Timer2s_H;
state_light = LightYellow; // 状态标记切换为黄灯
// 在这里加入状态处理
……
break;
case LightYellow:
// 将T0重载寄存器调整为52s
TMR0RLL = Timer52s_L;
TMR0RLH = Timer52s_H;
// 将T0计数寄存器调整为52s
TMR0L = Timer52s_L;
TMR0H = Timer52s_H;
state_light = LightGreen; // 改变状态标记为绿灯
// 在这里加入状态处理
……
// 切换交通灯的通行方向
if(TrafficEn == Traffic_NS) TrafficEn = Traffic_WE;
else TrafficEn == Traffic_NS;
break;
}
TCON = TCON & ~0x01; // 清除外部中断IE0(TCON0.0)
}
void SystemInit()
{
// 初始化系统时钟
……
// 初始化端口
……
// 初始化中断
……
// 初始化看门狗
……
// 初始化全局变量
……
}
void main()
{
SystemInit();
while(1) // 主循环
{
if(TrafficEn == Traffic_NS) // 南北方向放行
{
……;
}
else // 东西方向放行
{
……;
}
}
}
交通灯控制系统由单片机、信号灯控制显示电路、数码管控制显示电路以及功能按键电路等部分组成。采用Proteus平台对交通灯控制系统进行了虚拟仿真,并进行了硬件电路的安装与测试。软硬件测试结果表明交通灯控制系统不仅具有交通控制的基本功能,还能够手动按键/串口通信实时调整通行时间。