#include "reg52.h"
#include "intrins.h"
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit key3 = P3^2;//对按键进行定义
sbit buzz = P1^2;//蜂鸣器外设控制端口定义
sbit DU = P2^0;
sbit WE = P2^1;
unsigned char array[]={0x38,0x3f,0x3e,0x79,0x3e};//定义L O V E U数码管显示
bit buzz_jiou=0,led_jiou=0;
unsigned int timenum = 0;
unsigned int num = 0,num1 = 0,num2 = 0,num3=0,num4=0;
unsigned int time5 =0;
void Delay1ms(unsigned int k) //@11.0592MHz
{
unsigned char i, j;
for(;k>0;k--)
{
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
void display(unsigned int second,unsigned char lednum)
{
DU=1;
P0=array[second];
DU=0;
WE=1;
P0=lednum;
WE=0;
// Delay(5);
//
// DU=1;
// P0=0X00;
// DU=0;
}
void buzz_1(unsigned int C)
{
unsigned int i ;
i=0;
for(i>=0;i<C;i++)
{
buzz=0;
Delay1ms(100);
buzz=1;
Delay1ms(100);
}
}
void LED(void)
{
unsigned char A,H;
unsigned char i;
if(key2==0&&led_jiou==1) //按键key2按下奇数次
{
A=0x7f;
for(i=9;i>1;i--)
{
P1=A;
Delay1ms(100);
A=(A>>1)|0x80;
}
}
if(key2==0&&led_jiou==0) //按键key2按下偶数次
{
H=0xfe;
for(i=1;i<9;i++)
{
P1=H;
Delay1ms(100);
H=(H<<1)|1;
}
}
}
void key(void)
{
if(key1==0) //表示按键1按下
{
Delay1ms(10);
if(key1==0) //表示按键1按下
num++; //k1按下的次数 //num=num+1
num1=num%2; //num=0或者=1
num2=num1+2;
P1=0xff;
buzz_1(num2);
while(!key1);
}
if(num1==1)
{
if(key2==0)
{
Delay1ms(10);
if(key2==0)
led_jiou=~led_jiou;
while(!key2);
}
if(key3==0)
{
Delay1ms(10);
if(key3==0)
num3=1;
while(!key3);
}
}
}
void main(void)
{
unsigned int N,M;
TMOD = 0x01;
TH0 = (65536-3000)/256;
TH1 = (65536-3000)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
key();
LED();
}
}
void timer0(void) interrupt 1
{
time5++;
TH0 = (65536-3000)/256;
TH1 = (65536-3000)%256;
if(num3==1&&num1==1)
switch(time5%6)
{
case 0:display(0,0xfe);//20ms
// lednumber = 0xfe;
break;
case 1:display(1,0xfd);
// lednumber = 0xfd;
break;
case 2:display(2,0xfb);
// lednumber = 0xfb;
break;
case 3:display(3,0xf7);
// lednumber = 0xf7;
break;
case 4:display(4,0xdf);
// lednumber = 0xf7;
break;
default: break;
}
} |