设计基于单片机的智能交通红绿灯控制系统,要求准确控制红绿灯的亮暗时刻,控制代码要高效简短。选用课堂上所学的freescale MC9S08AW60八位单片机作为主控芯片,采用C语言编程,编译环境为CODE WARRIOR6.2。
十字路口红绿灯有很多,但是基本逻辑很简单,都是基于单片机定时器来控制其亮暗时刻。为了便于理解,本文没有涉及左右转向灯的亮闪情况,只有直行灯。
红绿灯设计环境:
东西(A)、南北(B)两干道交于一个十字路口,各干道有一组红、黄、绿三个指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行,黄灯亮时车辆及行人小心通过。红灯的设计时间为60秒,绿灯为60秒,黄灯为10秒
设计思路1:
程序设计实现的基本思想是一个计数器,MC9S08AW60内部有一个十六位计数器,有两个定时器模块,我们只选用模块1就可以完成相应的操作。
设计思路2:
由于东西(A)方向的灯逻辑一致,南北(B)的灯逻辑一致,因此我们选用变量的时候用:
A_red_light,A_green_light,A_yellow_light分别表示东西向的红灯,绿灯和黄灯;B_red_light,B_green_light,B_yellow_light 分别表示南北向的红灯,绿灯和黄灯。
设计思路3:
将以上代表红绿灯的变量赋值给单片机端口引脚,然后连接引脚指小灯,以便观察现象,模拟实际路口红绿灯。
程序部分:
定时器初始化部分:
TPM1SC =0b01010110;
TPM1CNTH = 0x00;
TPM1CNTL = 0x00;
//预置寄存器设定值= 0x7A12
TPM1MODH = 0x7A;
TPM1MODL= 0x12;
其中:分频因子:64
时钟频率为固定时钟频率:2MHz
允许溢出中断
溢出周期:1s
中断部分:interrupt 11 void isrT1OUT()
unsigned char temp;
DisableInterrupts;
time++;
if(0