📄 tl_main.c
字号:
#include<_REG52_.H>
//Bit Port Declaration
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P32=P3^2;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
//--------------------
sbit EWR=P1^0;
sbit EWG=P1^1;
sbit EWY=P1^2;
sbit SNR=P1^4;
sbit SNG=P1^5;
sbit SNY=P1^6;
//Global Variables
uchar TIME_EW; //EastWest Count Down Register Unit
uchar TIME_SN; //SouthNorth Count Down Register Unit
uchar MS_CNT; //50ms Count
uint SEC_CNT; //Second Count
uchar HOUR=12; //Hour Buffer
uchar flash;
uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F};
//Delay Function
void Delay(uchar formal_t)
{
uchar t;
t=formal_t;
while(t--);
}
//Display Function
void Display(void)
{
uchar h,l;
l=TIME_EW%10;
P2=0xff;
P0=table[l];
P20=0;
h=TIME_EW/10;
Delay(3);
P2=0xff;
P0=table[h];
P21=0;
Delay(3);
//-----------------
l=TIME_SN%10;
P2=0xff;
P0=table[l];
P22=0;
h=TIME_SN/10;
Delay(3);
P2=0xff;
P0=table[h];
P23=0;
Delay(3);
P2=0xff;
}
//T0 Interrupt Function
void Timer0(void)interrupt 1 using 2
{
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
if(MS_CNT>=10)
flash=1;
else flash=0;
if(MS_CNT>=20)
{
MS_CNT=0;
SEC_CNT+=1;
TIME_EW-=1;
TIME_SN-=1;
if(SEC_CNT==3600)
HOUR+=1;
if(HOUR==24)
HOUR=0;
}
else MS_CNT+=1;
}
//INT0 Interrupt Function
void INTSP(void)interrupt 0 using 1
{
EX0=0;
P2=0xff;
Delay(10);
P32=1;
if(~P35)
P1=0x65; //P1.0----RG
else if(~P36)
P1=0x56; //P1.1----GR
else if(~P37)
P1=0x66; //P1.0----RR
while(~P32){;}
EX0=1;
}
//EastWest-RED,SouthNorth-GREEN --30S
void StateRG(void)
{
TIME_EW=35;
TIME_SN=30;
P1=0x00;
while(TIME_SN)
{
Display();
EWR=1;SNG=1;
}
P1=0x00;
}
//EastWest-RED,SouthNorth-YELLOW-5S
void StateRY(void)
{
TIME_SN=5;
P1=0x00;
while(TIME_SN)
{
Display();
EWR=1;SNY=1;
}
P1=0x00;
}
//EastWest-GREEN,SouthNorth-RED -30S
void StateGR(void)
{
TIME_EW=30;
TIME_SN=35;
P1=0x00;
while(TIME_EW)
{
Display();
EWG=1;SNR=1;
}
P1=0x00;
}
//EastWest-YELLOW,SouthNorth-RED -5S
void StateYR(void)
{
TIME_EW=5;
P1=0x00;
while(TIME_EW)
{
Display();
EWR=1;SNG=1;
}
P1=0x00;
}
//SLEEP
void StateSleep(void)
{
P1=0x00;
if(flash) {EWY=1;SNY=1;}
else P1=0x00;
P2=0xff;
}
void main(void)
{
TMOD=0X01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
IT0=1; //External Interrupt Springed by Hight-To-Low.
PX0=1; //T0 Interrupt With High PRI.
ET0=1; //T0 Interrupt Enable,
EX0=1; //INT0 Interrupt Enable
EA=1; //All Interrupt Enable.
TR0=1; //T0 Start.
while(1)
{
while(HOUR>=0&&HOUR<=5)
StateSleep();
StateRG();
StateRY();
StateGR();
StateYR();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -