交通灯硬件电路原理图
选用 MCS51 系列 AT89S51 单片机作为微控制器,选择两个四联的共阴极数码管组成 8 位显示模块,由于 AT89S51
单片机驱动能力有限,采用两片 74HC244 实现总线的驱动,一个 74HC244 完成共阴极数码管位控线的控制和驱动,
另一个 74HC244 完成数码管的 7 段码输出,在 7 段码输出口上各串联一个 100 欧姆的电阻对 7 段数码管限流。用 P3
口的 P3.0-P3.5 完成发光二极管的控制,实现交通灯信号的显示,每个发光二极管串联 500 欧姆电阻起限流作用。硬
件电路原理图如图 3-5 所示。
(3)程序设计思路,单片机资源分配以及程序流程
①单片机资源分配
单片机 P3 口的 P3.0-P3.1 引脚用作输出,控制发光二极管的显示。在计时模块中,需要定义两个数组变量
(init_sn[3],init_ew[3])来存储东西、南北两个方向在不同状态中倒计时的初始值,题目中每个方向的交通灯共有 3
种显示状态,因此数组元素个数为 3。还需要定义两个变量( cnt_ sn, cnt_ ew)暂存东西、南北两个方向的倒计时剩余
时间。
在状态的切换中,为了明确当前处于哪种状态,东西、南北方向各设置一个状态变量(state_val_sn, state_val_ew),
当倒计时的剩余时间到零时,状态变量增 1,表示启动下一个状态,当该变量增到 3 时变为 0,回到序号为 1 的状
态。
②程序设计思路
在设计中,由于没有键盘功能,因此只涉及定时计数和动态扫描功能。主程序将变量初始化之
后,设置单片机定时器和中断特殊功能寄存器的初始值,将定时器 T1 的工作方式设置为 8 位自动
装载模式,定时器每隔 250us 产生一次溢出。
在初始化变量与寄存器后,主程序进入一个循环结构,在循环中只做动态扫描的工作,根据东西、南北两向的剩余
时时间进行动态扫描显示。
计时以及状态的切换通过定时器的中断服务程序来实现,在中断服务程序中,每计时到一秒时,则各方向当前状
态的剩余时间减 1,一直减到 0 时触发下一个状态的开始,改变交通灯的指示。
③程序流程