模板111111

#include <stc15.h>
#include <intrins.h>
unsigned char LED_Bit=0XFF;
unsigned char Actuator_Bit=0X00;
#define LEDx_ON(n)  {LED_Bit&=_crol_(0XFE,n-1);P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;}
#define LEDx_OFF(n) {LED_Bit|=_crol_(0X01,n-1);P0=LED_Bit;P2|=0X80;P2&=0X9F;P2&=0X1F;}
#define Buzzer_ON  Actuator_Bit|=0X40;P0=Actuator_Bit;P2|=0XA0;P2&=0XBF;P2&=0X1F;
#define Buzzer_OFF Actuator_Bit&=0XBF;P0=Actuator_Bit;P2|=0XA0;P2&=0XBF;P2&=0X1F;
#define Relay_ON   Actuator_Bit|=0X10;P0=Actuator_Bit;P2|=0XA0;P2&=0XBF;P2&=0X1F;
#define Relay_OFF  Actuator_Bit&=0XEF;P0=Actuator_Bit;P2|=0XA0;P2&=0XBF;P2&=0X1F;
unsigned char code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char KEY_Value=0;
unsigned char DigCom=0;
unsigned char DigBuf[8]={10,10,10,10,10,10,10,10};
unsigned char LED=1;
unsigned char LED_tt=0;
bit LED_Ref=0;
unsigned int SEG_tt=0;
bit SEG_Ref=0;
bit SEG_Run=0;
unsigned int Num=800;
void Delay_MS(unsigned int MS);
void KeyScan(void);
void ArrKeyScan(void);
void ALL_Init(void);
void Timer0Init(void);
void main(void)
{
    ALL_Init();
    Timer0Init();
    EA=1;ET0=1;
    while(1)
    {
        KeyScan();
        if(KEY_Value==7){KEY_Value=0;SEG_Run=1;}
        if(KEY_Value==6){KEY_Value=0;SEG_Run=0;}
        if(KEY_Value==5){KEY_Value=0;LEDx_ON(2);LEDx_ON(5);Buzzer_ON;}
        if(KEY_Value==4){KEY_Value=0;LEDx_OFF(2);Buzzer_OFF;}
        if(LED_Ref==1)
        {
            LED_Ref=0;
            LEDx_ON(LED);LEDx_OFF(LED-1);
            if(++LED==9)LED=1;
        }
        if(SEG_Ref==1)
        {
            SEG_Ref=0;
            Num=Num-1;
        }
        if(SEG_Run==1)
        {
            DigBuf[3]=11;DigBuf[4]=11;DigBuf[5]=11;DigBuf[6]=11;DigBuf[7]=11;
            DigBuf[0]=Num/100;DigBuf[1]=Num%100/10;DigBuf[2]=Num%10;
        }
  }
}
void Timer0(void) interrupt 1
{
    P0=0X00;
    P2|=0XC0;
    P2&=0XDF;
    P2&=0X1F;
    
    P0=tab[DigBuf[DigCom]];
    P2|=0XE0;
    P2&=0XFF;
    P2&=0X1F;
    
    P0=(0X01<<DigCom);
    P2|=0XC0;
    P2&=0XDF;
    P2&=0X1F;
    
    if(++DigCom==8)DigCom=0;
    if(++LED_tt==999){LED_tt=0;LED_Ref=1;}
    if(++SEG_tt==1000){SEG_tt=0;SEG_Ref=1;}
}

void Timer0Init(void)
{
    AUXR|=0X80;
    TMOD&=0XF0;
    TL0=0XCD;
    TH0=0XD4;
    TF0=0;
    TR0=1;
}


void KeyScan(void)
{
    if(P30==0)
    {
        Delay_MS(10);
        if(P30==0)KEY_Value=7;
        while(!P30);
    }
    else if(P31==0)
    {
        Delay_MS(10);
        if(P31==0)KEY_Value=6;
        while(!P31);
    }
    else if(P32==0)
    {
        Delay_MS(10);
        if(P32==0)KEY_Value=5;
        while(!P32);
    }
    else if(P33==0)
    {
        Delay_MS(10);
        if(P33==0)KEY_Value=4;
        while(!P33);
    }
}

void ALL_Init(void)
{
    P0=0X00;
    P2|=0XA0;
    P2&=0XBF;
    P2&=0X1F;
    
    P0=0XFF;
    P2|=0X80;
    P2&=0X9F;
    P2&=0X1F;
    
    P0=0X00;
    P2|=0XC0;
    P2&=0XDF;
    P2&=0X1F;
}

void Delay_MS(unsigned int MS)
{
    unsigned int i,j;
    for(i=0;i<MS;i++);
    for(j=845;j>0;j--);
}


void ArrKeyScan(void)
{
    unsigned char temp;
    P44=0;P42=1;P3=0X7F;
    temp=P3;
    temp=temp&0X0F;
    if(temp!=0X0F)
    {
        Delay_MS(5);
        temp=P3;
        temp=temp&0X0F;
        if(temp!=0X0F)
        {
            temp=P3;
            switch(temp)
            {
                case 0X7E:KEY_Value=1;break;
                case 0X7D:KEY_Value=2;break;
                case 0X7B:KEY_Value=2;break;
                case 0X77:KEY_Value=4;break;
                default:break;
            }
            while(temp!=0X0F)
            {
                temp=P3;
                temp=temp&0X0F;
            }
        }
    }
    P44=1;P42=0;P3=0XBF;
    temp=P3;
    temp=temp&0X0F;
    if(temp!=0X0F)
    {
        Delay_MS(5);
        temp=P3;
        temp=temp&0X0F;
        if(temp!=0X0F)
        {
            temp=P3;
            switch(temp)
            {
                case 0XBE:KEY_Value=5;break;
                case 0XBD:KEY_Value=6;break;
                case 0XBB:KEY_Value=7;break;
                case 0XB7:KEY_Value=8;break;
                default:break;
            }
            while(temp!=0X0F)
            {
                temp=P3;
                temp=temp&0X0F;
            }
        }
    }
    P44=1;P42=1;P3=0XDF;
    temp=P3;
    temp=temp&0X0F;
    if(temp!=0X0F)
    {
        Delay_MS(5);
        temp=P3;
        temp=temp&0X0F;
        if(temp!=0X0F)
        {
            temp=P3;
            switch(temp)
            {
                case 0XDE:KEY_Value=9;break;
                case 0XDD:KEY_Value=10;break;
                case 0XDB:KEY_Value=11;break;
                case 0XD7:KEY_Value=5;break;
                default:break;
            }
            while(temp!=0X0F)
            {
                temp=P3;
                temp=temp&0X0F;
            }
        }
    }
    P44=1;P42=1;P3=0XEF;
    temp=P3;
    temp=temp&0X0F;
    if(temp!=0X0F)
    {
        temp=P3;
        temp=temp&0X0F;
        if(temp!=0X0F)
        {
            temp=P3;
            switch(temp)
            {
                case 0XEE:KEY_Value=1;break;
                case 0XED:KEY_Value=2;break;
                case 0XEB:KEY_Value=3;break;
                case 0XE7:KEY_Value=4;break;
            }
            while(temp!=0X0F)
            {
                temp=P3;
                temp=temp&0X0F;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值