谁能帮我注释一下这个程序吗?

2019-07-15 22:41发布

#include<reg52.h>

#define uchar unsigned char
unsigned long num;
uchar j,k;
uchar a0,b0,c0,d0,e0,f0;
sbit dula=P2^6;
sbit wela=P2^7;
sbit s2=P3^4;
sbit s3=P3^5;
sbit s4=P3^6;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

void delay(uchar i)
{
        for(j=i;j>0;j--)
        for(k=125;k>0;k--);
}

void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
   dula=0;
   P0=table[a];
   dula=1;
   dula=0;

   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);

   P0=table[b];
   dula=1;
   dula=0;

   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);

   P0=table[c];
   dula=1;
   dula=0;

   P0=0xfb;
   wela=1;
   wela=0;
   delay(5);

   P0=table[d];
   dula=1;
   dula=0;

   P0=0xf7;
   wela=1;
   wela=0;
   delay(5);

   P0=table[e];
   dula=1;
   dula=0;

   P0=0xef;
   wela=1;
   wela=0;
   delay(5);

   P0=table[f];
   dula=1;
   dula=0;

   P0=0xdf;
   wela=1;
   wela=0;
   delay(5);
}

void keyscan()
{
        if(s2==0)
        {
        delay(10);
                while(s2==0);
                num++;
        while(!s2);
        }
        if(s3==0)
        {   
        delay(10);
                while(s3==0);
                num=0;
        while(!s3);
        }
    if(s4==0)
    {   
        delay(10);
        while(s4==0);
        num--;
        while(!s4);
    }
}

void main()
{        while(1)
        {
        keyscan();
        if(num<10)
        {
                a0=num;b0=16;c0=16;d0=16;e0=16;f0=16;
        }
        else
        {
                if(num<100)
                {a0=num/10;b0=num%10;c0=16;d0=16;e0=16;f0=16;}
                else
                {
                        if(num<1000)
                        {a0=num/100;b0=num%100/10;c0=num%10;d0=16;e0=16;f0=16;}
                        else
                        {
                                if(num<10000)
                                {a0=num/1000;b0=num%1000/100;c0=num%100/10;d0=num%10;e0=16;f0=16;}
                                else
                                {
                                        if(num<100000)
                                        {a0=num/10000;b0=num%10000/1000;c0=num%1000/100;d0=num%100/10;e0=num%10;f0=16;}
                                        else
                                        {
                                                if(num<1000000)
                                                {a0=num/100000;b0=num%100000/10000;c0=num%10000/1000;d0=num%1000/100;e0=num%100/10;f0=num%10;}
                                        }
                                }
                        }
                }
        }
        display(a0,b0,c0,d0,e0,f0);
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
qq729101414
1楼-- · 2019-07-16 00:48
整体将就是检测按键  数码管显示
按键检测:一般检测按键方法(延时消抖) +   按键松开判断
数码管显示:锁存器驱动。
然后主函数里面就加了一个对于NUM的位数分离。。。
孟huá小?栈
2楼-- · 2019-07-16 03:18
qq729101414 发表于 2013-8-31 21:51
整体将就是检测按键  数码管显示
按键检测:一般检测按键方法(延时消抖) +   按键松开判断
数码管显示: ...

上面的还看的懂一点,就是main函数以下就看不懂了。
qq729101414
3楼-- · 2019-07-16 06:51
孟huá小?栈 发表于 2013-8-31 22:01
上面的还看的懂一点,就是main函数以下就看不懂了。

你说的是那个 数字的数位分离?是这么的  比如说NUM = 1234
你要在数码管上显示就得分离成  1 2 3 4 4个数字
上面的是这么的判断大小
如果 < 10  (0 ~ 9)  那么只对个位其余就行   
   10 < = num <100 (10 ~99)  那么  分离成两个数字   十位和个位(45   ------>   4      5    //4 = 45/10    5  = 45 %10  )
。。。。。以此类推。。



xj366459861
4楼-- · 2019-07-16 12:07
 精彩回答 2  元偷偷看……
孟huá小?栈
5楼-- · 2019-07-16 16:01
qq729101414 发表于 2013-8-31 22:08
你说的是那个 数字的数位分离?是这么的  比如说NUM = 1234
你要在数码管上显示就得分离成  1 2 3 4 4个 ...

哦哦!明白了,就是把数分离到数码管的每一位。
qq729101414
6楼-- · 2019-07-16 18:49
xj366459861 发表于 2013-8-31 22:21
我懂了,大牛~~

不是大牛!  只不过早入门一段时间而已

一周热门 更多>