#include <REGX51.H>
#define uint unsigned int
#define uchar unsigned char
#define P P0
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
sbit key5 = P1^4;
sbit key6 = P1^5;
sbit led1 = P3^0;
sbit led2 = P3^1;
sbit led3 = P3^2;
sbit led4 = P3^3;
sbit wei1 = P2^0;
sbit wei2 = P2^1;
sbit beep1 = P2^3;
uint i = 30,j = 0,k = 0,counter = 0;
uchar code shuzu[]={ //共阴极数码管
0x3F,0x06,0x5B,0x4F,
// 0 1 2 3
0x66,0x6D,0x7D,0x07,
// 4 5 6 7
0x7F,0x6F};
// 8 9
//uchar code shuzu[]={0xc0,0xF9,0xA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
void delayms(uint x)
{
uint i,j;
for(i = x;i > 0;i--)
for(j = 110;j > 0;j--);
}
void display()
{
wei1 = 0; wei2 = 1;
P = shuzu[i/10];
delayms(10); P = 0x00;
wei1 = 1; wei2 = 0;
P = shuzu[i%10];
delayms(10); P = 0x00;
}
void beep()
{
beep1 = !beep1;
delayms(100);
beep1 = !beep1;
delayms(100);
beep1 = !beep1;
delayms(100);
beep1 = !beep1;
delayms(100);
beep1 = !beep1;
delayms(100);
beep1 = !beep1;
delayms(100);
}
void key()
{
if(key1 == 0)
{
delayms(10);
if(key1 == 0)
{
TR0 = !TR0;
while(!key1);
}
}
if(key2 == 0&&j == 0)
{
delayms(10);
if(key2 == 0)
{
j++; k++;
led1 = 0;
beep();
while(!key2);
}
}
if(key3 == 0&&j == 0)
{
delayms(10);
if(key3 == 0)
{
j++; k++;
led2 = 0;
beep();
while(!key3);
}
}
if(key4 == 0&&j == 0)
{
delayms(10);
if(key4 == 0)
{
j++; k++;
led3 = 0;
beep();
while(!key4);
}
}
if(key5 == 0&&j == 0)
{
delayms(10);
if(key5 == 0)
{
j++; k++;
led4 = 0;
beep();
while(!key5);
}
}
if(key6 == 0)
{
delayms(10);
if(key6 == 0)
{
P1 = 0xff;
beep1 = 0;
led1 = led2 = led3 = led4 = 1;
i = 30;
j = k = 0;
TR0 = 0;
while(!key6);
}
}
}
void main()
{
P1 = 0xff;
beep1 = 1;
led1 = led2 = led3 = led4 = 1;
TMOD = 0X01;
TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256;
EA = 1;
ET0 = 1;
while(1)
{
display();
key();
}
}
void Timer0(void) interrupt 1
{
TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256;
counter++;
if(counter%20 == 0)
{
i--;
if(k == 1)
{
k++;
i = 10;
}
if(i == 0)
TR0 = 0;
}
}
应该很简单,看着玩玩吧
|