#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define shuju P1
sbit key1 =P3^2; //风速
sbit key2 =P3^3; //风种
sbit key3 =P3^4; //定时
sbit key4 =P3^5; // 停止
sbit ruo =P1^0; //弱风
sbit zhong =P1^1; //中风
sbit qiang =P1^2; //强风
sbit zhengchang =P1^3; //正常
sbit ziran =P1^4; //自然
sbit shuimian =P1^5; //睡眠
sbit three =P1^6; //30分钟定时
//sbit yibai =P1^7; //100分钟定时
sbit dianji =P1^7; //100分钟定时
sbit wela=P2^7; //数码管位选锁存端
sbit dula=P2^6; //数码管段选锁存端
sbit LED7=P1^7; //定义LED端口
//********定义变量********************
uchar tt; // 计时标量每50ms加1
uchar a; //
uchar b; //
uchar c; //
uchar d; //
uchar e;
uchar pp;
uchar aa;
uchar flag;
uchar flag1;
//*******定时器初始化*******
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用\"|\"符号可以在使用多个定时器时不受影响
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
}
void Init_Timer1(void)
{
TMOD |= 0x10; //使用模式1,16位定时器,使用\"|\"符号可以在使用多个定时器时不受影响
TH1=(65535-50000)/256; 数一直到65535溢出
//给定初值,这里使用定时器最大值从0开始计
TL1=(65535-50000)%256;
EA=1; //总中断打开
ET1=1; //定时器中断打开
}
//**********延时函数***************
void delayus(uchar t)
{
while(--t);
}
//**********延时函数***************
void delay(uchar t) //大致延时1mS
{
while(t--)
{
delayus(235);
delayus(235);
}
}
//*******按键检测**********************
void key(void)
{
if(key1==0)
{
delay(15);
if(key1==0) //按键消抖
{
flag=0;
a++;
while(key1==0);
}
}
if(key2==0)
{
delay(15);
if(key2==0) //按键消抖
{
if(flag==0)
{
b++;
}
else
{
b=0;
}
while(key2==0);
}
}
if(key3==0)
{
delay(15);
if(key3==0) //按键消抖
{
if(flag==0)
{
c=1;
flag1=1;
}
else
{
c=0;
}
while(key3==0);
}
}
if(key4==0)
{
delay(15);
if(key4==0) //按键消抖
{
shuju=0xff;
a=0;
b=0;
c=0;
flag=1; //标志位设置
TR1=0;
while(key4==0);
}
}
}
void display(void)
{
if(a==1)
{
TR1=1;
aa=20;
ruo=0;
zhong=1;
qiang=1;
}
else if(a==2)
{
TR1=1;
aa=5;
ruo=1;
zhong=0;
qiang=1;
}
else if(a==3)
{
TR1=1;
aa=1;
ruo=1;
zhong=1;
qiang=0;
}
else if(a>=4)
{
a=1;
}
if(b==1)
{
zhengchang=0;
ziran=1;
shuimian=1;
}
else if(b==2)
{
zhengchang=1;
ziran=0;
shuimian=1;
}
else if(b==3)
{
zhengchang=1;
ziran=1;
shuimian=0;
}
else if(b>=4)
{
b=1;
}
if(c==1)
{
TR0=0;
TR0=1;
three=0;
if(d==0)
{
TR0=0;
TR1=0;
d=3;
shuju=0xff;
a=0;
b=0;
c=0;
flag=1; //标志位设置
}
}
}
void main(void)
{
a=0;
b=0;
c=0;
d=3;
e=5;
aa=0;
flag=1;
flag1=0;
shuju=0xff;
Init_Timer0();
Init_Timer1();
while(1)
{
key();
display();
}
}
//******************定时器中断****************
void time0() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
tt++;
if(tt==20) // 1秒到
{
tt=0;
d--;
}
}
void time1() interrupt 3
{
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
pp++;
if(pp>=aa) // 1秒到
{
pp=0;
// 清零
LED7=~LED7;
}
}