天津**大学2014届本科生毕业设计论文
*/
u8 Status1(void) { RAH; GAL; YAL; RBL; GBH; YBL;
return 0;
}
u8 Status2(void) { RAH; GAL; YAL; RBL; GBL; YBH;
return 0;
}
u8 Status3(void) { RAL;
GAH;
31
天津**大学2014届本科生毕业设计论文
}
YAL; RBH; GBL; YBL; return 0;
u8 Status4(void) { }
//定时器0初始化函数 void Init_Timer0(void) {
TMOD |= 0x01; TH0=0x13; TL0=0x88;
RAL; GAL; YAH; RBH; GBL; YBL; return 0;
ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } /*
//定时器1初始化函数 void Init_Timer1(void)
32
天津**大学2014届本科生毕业设计论文
{
TMOD |= 0x10; //使用模式1,16位定时器,使用\符号可以在使用多个定时器时不受影响
TH1=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出 TL1=0x02;
// EA=1; //总中断打开 ET1=1; //定时器中断打开 TR1=1; //定时器开关打开 } */ #endif
#include
volatile u8 StatusCUT=1; //负责切换状态的全局变量
volatile u32 GHAtime=80; //A方向绿灯时间,红灯时间=B绿灯时间+黄灯时间 volatile u32 GHBtime=80; //B方向绿灯时间
u32 T0Counter=0; //定时器0中断次数计数,控制时间
volatile u32 DISNumA=0; //当前A方向时间 volatile u32 DISNumB=0; //当前B方向时间 volatile u8 ScanNum=1; //扫描数码管位置计数
u8 TableNum[4]={0}; //四个数码管要显示的数字在查找表中的位置 u8 FLAG_GetDisNum=1;
维护LED指示灯和数码管状态的全局变量
//该标志使能一次数值计算
33
天津**大学2014届本科生毕业设计论文
/** * * */
volatile u8 EnCarCounter=0; //车流量统计标志 volatile u32 Int0Counter=0; //A方向车流量统计 volatile u32 Int1Counter=0; //B方向车流量统计
u8 delay() { }
u8 RGY_CutControl(void) {
EnCarCounter=1,A方向红灯,统计车流量,增减绿灯时间 EnCarCounter=2,B方向红灯,统计车流量,增减绿灯时间
u32 value=0;
for(; value<40; value++)
;
return 0;
//红绿灯切换 switch(StatusCUT) {
case 1:{
EnCarCounter = 1; //A_red and B_green if(!(T0Counter-GHBtime)) {
T0Counter = 0;
34
天津**大学2014届本科生毕业设计论文
StatusCUT++;
DISNumB = YHtime; }
}break; case 2:{
EnCarCounter = 1; //A_red and B_yellow if(!(T0Counter-YHtime)) {
EX0=0;
EX1=0; //关闭外部中断,防止伪计数
T0Counter = 0; StatusCUT++;
//-------------------------------------------------
if(Int0Counter <= 5)
GHAtime = 80;
else if(Int0Counter <= 10)
GHAtime = 120;
else
GHAtime = 160;
Int1Counter = 0;
Int1Counter = 0;
//-------------------------------------------------
DISNumA = GHAtime; //A'green time DISNumB = GHAtime+YHtime; //b'red time EX0=1;
EX1=1; //关闭外部中断,防止伪计数
35