新手!才研究程序就遇到这样问题,求助

2019-07-16 03:50发布

能不能不要打击我的信心。。
(1)使用三个按键控制最后两位数码管设置一个二位数字,其中一个按键控制加数字,一个按键控制减数字,一个按键控制切换所控制的数码管。
(2)设定好数字后,利用定时器使这个数字以一秒为间隔倒计数到0,后再从0以一秒为间隔正计数到该数字。
(3)整个计数过程中,令LED小灯随数字的改变而亮灭。


求指点,能加我Q?2411499466
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
ch4n9
2019-07-16 13:06
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

uchar code table[]=                 //数模
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x67,0x77,0x7c,
0x39,0x5e,0x79,0x71
};

int count=20;                //要设定的数(0~99)

int number=0;

uchar a=0xfe;                //位选
uchar b=0xfd;
uchar flag=1;                //顺加和逆减的标志

sbit key1=P1^0;                //加数
sbit key2=P1^1;                //减数
sbit key3=P1^2;                //改位选
sbit led=P1^3;                //led

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void Init_time0()          
{
        TMOD=0x01;
        EA=1;
        ET0=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;
}

void keyscan()
{
        TR0=0;
        if(key1==0)
        {
                delay(2);
                if(key1==0)
                {
                        number++;
                        if(number==100)
                                number=0;
                }
                while(!key1);
                delay(2);
                while(!key1);
        }

        if(key2==0)
        {
                delay(2);
                if(key2==0)
                {
                        number--;
                        if(number<0)
                                number=99;
                }
                while(!key2);
                delay(2);
                while(!key2);
        }


        if(key3==0)
        {
                delay(2);
                if(key3==0)
                {
                        a=_crol_(a,1);
                        b=_crol_(b,1);
                }
                while(!key3);
                delay(2);
                while(!key3);
        }
        TR0=1;
}

void display()
{
        P2=a;                                        //位选
        P0=table[number/10];        //段选
        delay(2);

        P2=b;
        P0=table[number%10];
        delay(2);
}

int main(void)
{
        Init_time0();
        while(1)
        {
                keyscan();
                display();
        }
        return 0;
}

void exter0() interrupt 1
{
        static uint t=0;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t++;
        if(t==20)
        {
                t=0;
                led=~led;
                if(flag)
                {
                        number++;
                        if(number==100)
                                number=0;
                        if(number==count)
                                flag=0;                       
                }
                else
                {
                        number--;
                        if(number==0)
                                flag=1;
                }
        }       
}

基本可以这样写。。具体的你可以完善下

一周热门 更多>