#include"reg51.h"
#define uint unsigned int
void Delayms(uint);
void PWM_Init();
void Key();
void Clock();
void Init_Timer0();
//void ADC0809();
sbit LED=P3^4;
sbit HW=P3^5;
sbit Ind=P3^6;
sbit Beep=P3^7;
sbit sub=P2^0;
sbit add=P2^1;
sbit set=P2^2;
sbit change=P2^3;
sbit w1=P2^4;
sbit w2=P2^5;
sbit w3=P2^6;
sbit w4=P2^7;
//------ADC0809--------------
/*sbit clk=P3^0;
sbit st=P3^1;
sbit eoc=P3^2;
sbit oe=P3^3;*/
#define Data P0
unsigned char timer0_cnt,r1;
unsigned char i;
unsigned char s1;s2;s3;s4;
unsigned char se;
unsigned char c_set;
uint pwm=100,aa=600;
uint pwm_cnt=0;
bit flag0;
bit flag_set;
bit flag_beep;
unsigned char code SHUZI[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code SHUDIAN[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
0xff,0xef};
void Delay(uint t)
{
while(--t);
}
void Delayms(uint t) //3ms
{
int j;
for(;t>0;t--)
for(j=0;j<=300;j++);
}
/*void ADC0809()
{
st=0;
st=1;
st=0;
eoc=1;
while(eoc==0)
{
eoc=1;
Beep=0;
}
oe=1;
Data=0xFF;
Delayms(1);
oe=0;
}*/
void main()
{
w1=1;
w2=1;
w3=1;
w4=1;
s1=0;
s2=0;
s3=0;
s4=0;
i=0;
se=0;
flag0=0;
flag_set=0;
flag_beep=0;
Beep=1; //1不响
LED=0; //0点亮
timer0_cnt=0;
r1=0;
Init_Timer0();
while(1)
{
if(HW==1) //HW接近为0,离开为1
Beep=1;
else //接近
Beep=0;
Key();
if(flag_set==0)
{
Clock();
}
if((s1==0)&&(s2==0)&&(s3==0)&&(s4==0)&&(flag_beep==1))
{
Beep=0;
Delayms(5000);
flag_beep=0;
Beep=1;
}
if(Ind==1)
{
PWM_Init();
}
else
LED=1;
// if(r1=80)
// ADC0809();
// pwm=Data/255;
}
}
void PWM_Init()
{
if(add==0)pwm++;//add是按键开关
if(sub==0)pwm--;//sub也是
if(pwm==600)pwm=599;
if(pwm==50)pwm=51;
LED=0; //灯亮
Delay(pwm);
LED=1; //灭
Delay(aa-pwm);
}
void Key()
{
if(set==0)
{
Delayms(5); // 5ms
if(set==0)
{
Delayms(333); //延时1s
flag_set=~flag_set;
w1=0;w2=1;w3=1;w4=1;
c_set=0;
flag0=0;
}
}
if(flag_set==1)
{
if(add==0) //加
{
Delayms(5);
if(add==0)
{
Delayms(333); //延时1s
if(w1==0)
{
if(s1<9)
s1++;
else
s1=0;
}
else if(w2==0)
{
if(s2<5)
s2++;
else
s2=0;
}
else if(w3==0)
{
if(s3<9)
s3++;
else
s3=0;
}
else if(w4==0)
{
if(s4<5)
s4++;
else
s4=0;
}
}
}
if(sub==0) //减
{
Delayms(5);
if(sub==0)
{
Delayms(333); //延时1s
if(w1==0)
{
if(s1>0)
s1--;
else
s1=9;
}
if(w2==0)
{
if(s2>0)
s2--;
else
s2=5;
}
if(w3==0)
{
if(s3>0)
s3--;
else
s3=9;
}
if(w4==0)
{
if(s4>0)
s4--;
else
s4=5;
}
}
}
if(change==0) //换
{
Delayms(5);
if(change==0)
{
Delayms(333); //延时1s
se++;
if(se>3)
se=0;
switch(se)
{
case 0:w1=0;w2=1;w3=1;w4=1;c_set=0; break;
case 1:w1=1;w2=0;w3=1;w4=1;c_set=1; break;
case 2:w1=1;w2=1;w3=0;w4=1;c_set=2; break;
case 3:w1=1;w2=1;w3=1;w4=0;c_set=3; break;
default:break;
}
}
}
switch(c_set)
{
case 0: P0=~SHUZI[s1];
break;
case 1: P0=~SHUZI[s2];
break;
case 2: P0=~SHUDIAN[s3];
break;
case 3: P0=~SHUZI[s4];
break;
default:break;
}
}
}
void Clock()
{
if(flag0==1)
{
flag0=0;
if(s1>0)
s1--;
else if((s2>0)||(s3>0)||(s4>0))
{
s1=9;
if(s2>0)
s2--;
else if((s3>0)||(s4>0))
{
s2=5;
if(s3>0)
s3--;
else if(s4>0)
{
s3=9;
s4--;
}
}
}
if((s1==1)&&(s2==0)&&(s3==0)&&(s4==0))
{
flag_beep=1;
}
}
i++;
if(i>3)
i=0;
switch(i)
{
case 0: w1=0;w2=1;w3=1;w4=1;
P0=~SHUZI[s1];
break;
case 1: w1=1;w2=0;w3=1;w4=1;
P0=~SHUZI[s2];
break;
case 2: w1=1;w2=1;w3=0;w4=1;
P0=~SHUDIAN[s3];
break;
case 3: w1=1;w2=1;w3=1;w4=0;
P0=~SHUZI[s4];
break;
default:break;
}
P0=0xFF;
}
void Init_Timer0() //5ms,T0,方式0
{
TH0=0X4C;
TL0=0X00;
TMOD=0x01;
flag0=0;
TF0=0;
ET0=1;
EA=1;
TR0=1;
}
void Timer0(void) interrupt 1
{
TH0=0X4C;
TL0=0X00;
if(timer0_cnt<20) //1s
{
timer0_cnt++;
}
else
{
timer0_cnt=0;
flag0=1;
}
r1++;
if(r1>100)
r1=0;
}