利用51单片机的独立键盘控制数码管跑数的开始的问题

2019-07-15 12:30发布

写了一个程序:利用51单片机的独立键盘S1控制数码管跑数的开始。但是显示结果一直是0000,是哪里错了呢,我觉得逻辑是对的啊。程序和原理图如下:
#include<reg52.h>
#define uchar unsigned char
void delay(uchar z);
void timer_init();
void display(short num);
sbit S1 = P3^5;
sbit S2 = P3^4;
sbit S3 = P3^3;
sbit S4 = P3^2;
uchar cunter;
int shu;
uchar code leddata[]={

                0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90   //"9"
                         };
int main(void)
{       
        /*按下S1开始计时*/
        if(S1 == 0)
        {
                delay(5);//软件消抖
                if(S1 == 0)
                {
                        timer_init();
                        while(!S1);
                }
        }
        while(1)
        {       
                if(TF0 == 1)
                {
                        TF0 = 0;
                        TH0 = (65536 - 9216) / 256;
                        TL0 = (65536 - 9216) % 256;
                        cunter++;
                }
                if(cunter == 10)
                {
                        cunter = 0;
                        shu++;                               
                }
                if(shu == 9999)
                        shu = 0;
                display(shu);               
        }
        return 0;
}

/*定时器初始化*/
void timer_init()
{
        TMOD = 0x01;
        TH0 = (65536 - 9216) / 256;
        TL0 = (65536 - 9216) % 256;
        TR0 = 1;
}
/*软件延时*/
void delay(uchar z)
{
        uchar x , y;
        for(x = z; z > 0; z--)
                for(y = 116; y > 0; y--);
}
/*数码管显示函数*/
void display(short num)
{
        int ge , shi , bai , qian;
        qian = num / 1000;
        bai = num % 1000 / 100;
        shi = num % 100 / 10;
        ge = num % 10;
       
        P0 = 0xff;
        P2 = 0xf7;
        P0 = leddata[ge];
        delay(1);

        P0 = 0xff;
        P2 = 0xfb;
        P0 = leddata[shi];
        delay(1);

        P0 = 0xff;
        P2 = 0xfd;
        P0 = leddata[bai];
        delay(1);

        P0 = 0xff;
        P2 = 0xfe;
        P0 = leddata[qian];
        delay(1);
}

无标题.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。