使用spi数码管显示日期,按键控制日期加减,代码没有报错,但是按键按下没有用,求助该怎么改?急急急,谢谢

#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit key5=P3^4;
sbit key6=P3^5;
uchar code seg[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar code table[]=
 {
 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
 }; 
void keyscan();
void display();
uchar ri=29;yue=11,nian=2023;
uchar num[] = {2,0,2,3,1,1,2,9};
sbit RCK = P2^5;
sbit SCK = P2^6;
sbit SER = P2^7;

 void delayms(int x)
 {
     int i,j;
     for(i=x;i>0;i--)
         for(j=110;j>0;j--);
 } 
void In595(uchar i)
{
    uchar j,temp;
    temp = seg[i];
    for(j=0;j<8;j++)
    {
        SCK = 0;
        SER = temp&0x80;
        temp <<= 1;
        SCK = 1;    
    }
}
void main()
{
    TMOD=0x01;
     TH0=(65536-45872)/256;
    TL0=(65536-45872)%256;
    EA=1;
    ET0=1;
    TR0=1;     

    while(1)
    {
        uchar i;
        display();
        for(i=0;i<8;i++)
        {    
            
            P0 = i;
            RCK = 0;
            In595(num[i]);
            RCK = 1;
            delayms(2);
            In595(10);
            
            keyscan();
        }         
        
    }
}

void display()
 {
     P0=0x7f;
    P2=table[ri%10];
    delayms(2);
    P0=0x00;

    P0=0xbf;
    P2=table[ri/10];
    delayms(2);
    P0=0x00;

    P0=0xdf;
    P2=table[yue%10];
    delayms(2);
    P0=0x00;

    P0=0xef;
    P2=table[yue/10];
    delayms(2);
    P0=0x00;
    
    P0=0xf7;
    P2=table[nian%10];
    delayms(2);
    P0=0x00;

    P0=0xfb;
    P2=table[nian/10%10];
    delayms(2);
    P0=0x00;
    
    P0=0xfd;
    P2=table[nian/100%10];
    delayms(2);
    P0=0x00;

    P0=0xfe;                                                           
    P2=table[nian/1000];
    delayms(2);
    P0=0x00;
 }

 void T1_time()interrupt 1
{
    TH1=(65536-45872)/256;
    TL1=(65536-45872)%256;
    
    if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
    {
        if(ri==32)
        {
            ri=0;
            yue++;
            }
        }
    if(yue==4||yue==6||yue==9||yue==11)
    {
        if(ri==31)
        {
            ri=0;
            yue++;
        }
    }
    if(nian%100==0&nian%400==0&yue==2)
    {
        if(ri==30)
        {
            ri=0;
            yue++;
        }
    }
    if(nian%100==0&nian%4==0&yue==2)
    {
        if(ri==29)
        {
            ri=0;
            yue++;
        }
    }
    if(yue==13)
    {
        yue=0;
        nian++;
    }    

void keyscan()
{        
    if(key1==0)
    {
        delayms(10);
        if(key1==0)
        {
            ri++;
            if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
            {
                 if(ri==32)
                 {
                     ri=1;
                     yue++;
                  }
            }
            if(yue==4||yue==6||yue==9||yue==11)
            {
                 if(ri==31)
                 {
                     ri=1;
                     yue++;
                 }
            }
              if(nian%4==0&yue==2)
            {
                 if(ri==30)
                 {
                      ri=1;
                      yue++;
                 }
              }
             if(nian%4!=0&yue==2)
             {
                  if(ri==29)
                  {
                      ri=1;
                      yue++;
                  }
              }
              while(!key1);
        }
    }
    if(key2==0)
    {
        delayms(10);
        if(key2==0)
        {
            ri--;
            if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
            {
                if(ri==0)
                {
                    ri=31;
                }
            }
            if(yue==4||yue==6||yue==9||yue==11)
            {
                if(ri==0)
                {
                     ri=30;
                }
            }
              if(nian%4==0&yue==2)
            {
                if(ri==0)
                {
                      ri=29;
                }
            }
            if(nian%4!=0&yue==2)
            {
                if(ri==0)
                {
                      ri=28;
                }
            }
            while(!key2);
        }
    }
    if(key3==0)
    {
        delayms(10);
        if(key3==0)
        {
            yue++;
            if(yue==13)
            {
                yue=1;
                nian++;
            }
        while(!key3);        
        }
    }    
    if(key4==0)
    {
        delayms(10);
        if(key4==0)
        {
            yue--;
            if(yue==0)
            {
                yue=12;
            }
        while(!key4);        
        }
    }
    if(key5==0)
    {
        delayms(10);
        if(key5==0)
        {
            nian++;
        while(!key5);        
        }
    }    
    if(key6==0)
    {
        delayms(10);
        if(key6==0)
        {
            nian--;
        while(!key6);        
        }
    }    
        
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值