#include<reg52.h>
//#define S1 3 ; //S1 开关返回的数值
//#define Request 1; //请求开关返回的值
sfr P5=0xc8; //#define Over 2; //结束开关返回的值
#define table P1
sbit gewei=P2^6; //数码管个位
sbit shiwei=P0^0; //P5^5; 数码管十位
sbit LED1=P2^7;
sbit LED2=P2^5;
sbit Bell=P0^1; //P5^4;
sbit OutCrtl=P3^7; //继电器开关
sbit PowerCrtl=P3^2;
sbit S1_K=P2^4;
sbit Request_K = P3^3;
sbit Over_K=P3^4;
unsigned int min=30; //秒
unsigned int gw ;
unsigned int sw ;
unsigned char Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int Key_Press(); //按键扫描
void Delay_Ms(unsigned int ); //延时1MS
void LED_BELL()
{
int i=0;
for(i;i<5;i++)
{ LED1=0;
LED2=0;
Bell=1;
Delay_Ms(10);
LED1=1;
LED2=1;
Bell=0;
}
}
void Display()
{
gw=min%10;
sw=min/10;
gewei=0;
P1=Code[gw];
Delay_Ms(2);
shiwei=0;
P1=Code[sw];
if(min==0)
{
EA=1;
}
}
int Key_Press()
{
if(S1_K==0)
{
Delay_Ms(2);
if(S1_K==0)
return 3;
}
if(Request_K==0)
{
Delay_Ms(2);
if(Request_K==0)
return 1;
}
if(Over_K==0)
{
Delay_Ms(2);
if(Over_K==0)
return 2;
}
}
//组要计数的个数N=t/T(机器周期)
//机器周期=12*(时钟周期)1/晶振频率
void Delay_1Ms(unsigned int n)
{
unsigned int i,j;
for(j=n;j>0;j--)
for(i=112;i>0;i--);
}
// 晶振按12MHZ计算
void T1_Init()
{
TMOD=0x10;
TL1= (65536-50000)%256; //50000*10^-6=0.5s
TH1= (65536-50000)/256; //1MHZ=10^6HZ ; 1/f=1us
ET1= 1;
TR1= 1;
EA= 1;
}
int main()
{
int K_Date;
T1_Init();
K_Date=Key_Press();
if(K_Date=1)
{
Display();
LED_BELL();
if(K_Date==3)
{
OutCrtl=1;
}
if(Over_K==2)
{
gewei=0;
shiwei=0;
LED1=1;
LED2=1;
Bell=0;
OutCrtl=0;
}
}
}
void TimerCounter_1(void) interrupt 3
{
TL1= (65536-50000)%256; //50000*10^-6=0.05s
TH1= (65536-50000)/256; //1MHZ=10^6HZ ; 1/f=1us
num++;
if(num==20)
num=0
min--;
} |