
一、功能要求
要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒,黄灯先亮5秒钟,才能变换运行车道;黄灯亮时,要求每秒钟闪亮一次。
二、电路图
说明:1)每一位数码管位选要分开,对应IO口参照程序中红色部分
2)图示数码管为共阳,没加驱动数码管显示较暗,建议加驱动
三、程序
//TrafficLight.c
#include"reg52.h"
//IO口定义
sbit red_1 南北方向
sbit red_2 东西方向
sbit yellow_1
sbit yellow_2
sbit green_1
sbit green_2
sbit com1_1 =P3^6;//十位 南北方向 数码管位选
sbit com1_2 =P3^7;//个位 南北方向
sbit com2_1 =P3^4;//十位 东西方向
sbit com2_2 =P3^5;//个位 东西方向
//全局变量
char time=30;//倒计时
unsigned char num1=0,num2=0;//辅助计时
unsigned char flag1=0,flag2=0;//黄灯闪标志位
unsigned char shi1,shi2,ge1,ge2;//数码管十位个位
const unsigned char ledNum[] =
{// 0 1 2 3 4 5 6 7 8 9 b c d E F 不显示 - o(18)H(19)h(20)C(21)0(22)n(23)
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x,0x8b,0xc6,0xc0,0xab
}; //共阳数码管
//中断优先级别T0>T1,数码管显示中断间隔2ms,计时时间间隔50ms
//计时要求比较精确,间隔长,不应该被打断,故中断优先级要高,使用T0
//数码管中断可以被打断,打断时间较短,不会影响显示,使用T1
//在交通灯中,计时和数码管显示一直进行,故定时器开启后不用停止
void InitInter(void)
{
设置定时器工作方式为16位计时器
11.0592M晶振,50ms
11.0592M晶振,2ms
}
void Display(void)
{
}
//红灯可以直接变成绿灯,但绿灯必须先变成黄灯再变红灯
void main(void)
{
为亮
}
void Timer_0(void) interrupt 1//计时
{
处理time,显示方式
}
void Timer_1(void) interrupt 3
{
11.0592M晶振,2ms
}
