#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
#define ON 0x00
#define OFF 0xFF
#define DM P2
#define DM2 P1
sbit K1 = P0^0;
sbit K2 = P0^1;
sbit K3 = P0^2;
sbit K4 = P0^3;
sbit smgwc1=P3^0;
sbit smgwc2=P3^1;
sbit smgwc3=P3^2;
sbit smgwc4=P3^3;
sbit led1=P3^4;
sbit led2=P3^5;
sbit led3=P3^6;
sbit led4=P3^7;
sbit beep=P0^4;
uchar SMG_DM[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint count=0;
uint smgseq1;
uint smgseq2;
uint smgseq3;
uint smgseq4;
uint k1isdown=0;
uint k2isdown=0;
uint k3isdown=0;
uint k4isdown=0;
//延迟函数
void delay_ms(uchar k) // Fosc=12MHz??
{
uint i,j;
for(i=0;i<k;i++)
for(j=0;j<121;j++);
}
void main(void)
{
TMOD=0x01;
TH0=0x3C; //(50ms)
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
//DM=SMG_DM[smgseq];
smgwc1=1;
smgwc2=1;
smgwc3=1;
smgwc4=1;
//灯初始全灭
led1=0;
led2=0;
led3=0;
led4=0;
//四个数码管送0
smgseq1=0;
smgseq2=0;
smgseq3=0;
smgseq4=0;
DM=SMG_DM[smgseq1];
DM2=SMG_DM[smgseq3];
while(1)
{
if(K1)
{
while(K1);
k1isdown=1;
smgseq1=9;
led1=1;
}
if(k1isdown)
{
//判断的第一次才把smgseq设置为9
//单按下k1的时候送显
smgwc1=1;//smgwc2=0;
DM=SMG_DM[smgseq1]; //数码管计数减少一位
delay_ms(1);//延迟1ms
smgwc1=0;
DM=SMG_DM[smgseq2];
smgwc2=1;
delay_ms(1);//延迟1ms
smgwc2=0;
}
//当第二个开关按下去
if(K2)
{
while(K2);
k2isdown=1;
smgseq2=9;
led2=1;
}
if(k2isdown)
{
//单按下k2的时候送显
smgwc2=1;
DM=SMG_DM[smgseq2]; //数码管计数减少一位
delay_ms(1);//延迟1ms
smgwc2=0;
DM=SMG_DM[smgseq1];
smgwc1=1;
delay_ms(1);//延迟1ms
smgwc1=0;
}
//当第二个开关按下去
if(K3)
{
while(K3);
k3isdown=1;
smgseq3=9;
led3=1;
}
if(k3isdown)
{
//单按下k2的时候送显
smgwc3=1;
DM2=SMG_DM[smgseq3]; //数码管计数减少一位
delay_ms(1);//延迟1ms
smgwc3=0;
DM2=SMG_DM[smgseq4];
smgwc4=1;
delay_ms(1);//延迟1ms
smgwc4=0;
}
//当第二个开关按下去
if(K4)
{
while(K4);
k4isdown=1;
smgseq4=9;
led4=1;
}
if(k4isdown)
{
//单按下k2的时候送显
smgwc4=1;
DM2=SMG_DM[smgseq4]; //数码管计数减少一位
delay_ms(1);//延迟1ms
smgwc4=0;
DM2=SMG_DM[smgseq3];
smgwc3=1;
delay_ms(1);//延迟1ms
smgwc3=0;
}
}
}
//进入中断模式
void t0_isr(void) interrupt 1 //中断1
{
//TF0=0;
TH0=0x3C;
TL0=0xB0;
count++;
if(count>=1200)//假如到了1秒的时间了
{
count=0;
//DM=SMG_DM[smgseq1]; //数码管计数减少一位
if(smgseq1!=0)
{
smgseq1--;
}
//关灯
if(smgseq1==0)
{
led1=0;
}
if(smgseq2!=0)
{
smgseq2--;
}
//关灯
if(smgseq2==0)
{
//k1isdown=0;
led2=0;
}
if(smgseq3!=0)
{
smgseq3--;
}
//关灯
if(smgseq3==0)
{
//k1isdown=0;
led3=0;
//smgseq=10;
}
if(smgseq4!=0)
{
smgseq4--;
}
//关灯
if(smgseq4==0)
{
//k1isdown=0;
led4=0;
//smgseq=10;
}
}
}