|
本实验主要利用了定时器和中断的知识,定时器定时,显示不同的灯。通过中断控制显示时长,闪烁。中断处理按键,可靠性更高。
定时器T0利用的方式1,方式1是一个16位的定时器,中断的次数会相对较低。因为交通灯是秒级的控制,不需要很高的中断频率,如果用方式2的8位自动重装方式,每秒中断数千次,你仍然需要再次分频以获得秒或十分之一秒的信号,实在是没有必要。
图3.2共有4个按键K1、K2、K3、K4,分别连接到单片机P2.0、P2.1、P2.2、P2.3引脚,按键后对应引脚为低电平,通过4个二极管D17、D18、D19、D20连接到P3.2(外部中断0),这是二极管构成的相与电路,即任意按一个键能在P3.2上产生一个低电平或下降沿,作为中断触发信号。
五、软件设计思想
1、定时思想。
采用定时器T0或T1的方式1定时50ms,每50ms中断进行计数,计数10次即0.5s,计数20次即1s,对秒计数实现所需要的定时时间。
2、亮灯控制思想。
单片机控制灯引脚与灯对应如下,0点亮。
一共有四种状态S0、S1、S2、S3,
a、南北通行S0状态:
设置一个秒计数单元SEC每秒+1,设置两个控制值变量a,b。
首先令SEC=0,a=0xfc,b=0xf3,处于S0状态;
SEC==25,a=0xfd,b=0x75,处于S1状态;
SEC==30,a=0xf7,b=0x9e,处于S2状态;
SEC==55,a=0xfb,b=0xae,处于S3状态;
SEC==60,SEC=0,a=0xfc,b=0xf3,处于S0状态;
P0=a,P1=b。
设置一个秒计数单元SEC每秒+1,设置两个控制值变量a,b。
首先令SEC=0,a=0xf7,b=0x9e,处于S0状态;
SEC==25,a=0xfb,b=0xae,处于S1状态;
SEC==30,a=0xfc,b=0xf3,处于S2状态;
SEC==55,a=0xfd,b=0x75,处于S3状态;
SEC==60,SEC=0,a=0xf7,b=0x9e,处于S0状态;
P0=a,P1=b。
3、交通灯键控
按键后即进入外部中断0,在外部中断0中断程序中判断:若是按K1键,控制南北通行状态,并将定时器T0关闭,即可保持南北通行状态;若是按K2键,控制东西通行状态,并将定时器T0中断关闭,即可保持东西通行状态;若是按K3键,开启定时器T0中断,恢复正常交通灯。
4、闪烁控制
在需要闪烁时,0.5s按正常显示,0.5s全灭,即是闪烁效果。实现方法是:当=0.5s的时刻,并且在南北通行的最后5s(19<sec<25)或在东西通行的最后5s(49<sec<55),灭绿灯: P0=a|0xf9,P1==b|0x24,当=1s的时刻,按正常显示。
单片机源程序如下:
实验途中要注意,每个按键对应的LED灯,在与开发板连接时需要保证端口正确。实验原理图等,在文档“实验二”内。
|
|