#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 int num;
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.5s
TH1= (65536-50000)/256; //1MHZ=10^6HZ ; 1/f=1us
num++;
if(num==20)
num=0
min--;
} |