微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 让数码管前三个从000~999,附加独立键盘程序问题

让数码管前三个从000~999,附加独立键盘程序问题

时间:10-02 整理:3721RD 点击:
请大神帮忙看编写的一个程序,让数码管前三个从000~999,附加独立键盘,分别能控制计数的停止,开始,清零等功能。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key=P3^4;
sbit key1=P3^5;
sbit key2=P3^6;
sbit key3=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                    0x66,0x6d,0x7d,0x07,
                    0x7f,0x6f,0x77,0x7c,
                    0x39,0x5e,0x79,0x71};
uchar bai,shi,ge;
uint num;
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
          for(y=110;y>0;y--);
        
}
void init()
{
        TMOD=0x01;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void display(uchar bai,uchar shi,uchar ge)
{
        bai=num/100;
        shi=num%100/10;
        ge=num%10;
        dula=1;
        P0=table[bai];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delay(5);
        
        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay(5);
        
        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delay(5);
        
}
void keyscan()
{
        if(key==1)
        {
                delay(10);
                if(key==1)
                {
                        
                        while(!key)
                                display(bai,shi,ge);
                        TR0=~TR0;
                        
    }
  }
        if(key1==1)
        {
                delay(10);
                if(key1==1)
                {
                        
                        while(!key1)
                                display(bai,shi,ge);
                        TR0=0;
                        
    }
  }
        if(key2==1)
        {
                delay(10);
                if(key2==1)
                {
                        
                  while(!key2)
                          display(bai,shi,ge);
                        TR0=1;
    }
  }
        if(key3==1)
        {
                delay(10);
                if(key3==1)
                {
                        
                  while(!key3)
                                display(bai,shi,ge);
                        num=0;
    }
               
  }
        
}
void main()
{
        init();
        while(1)
        {
          keyscan();
                display(bai,shi,ge);
        }
        
}
void timer0() interrupt 1
{
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        num++;
        if(num==1000)
        {
                num=0;
                delay(5);
  }
}
这个程序总是停留在000状态,感觉是在清零哪出问题了,但是不知道咋改。

你的display程序出错了。c语言不过关吧,既然bai  shi  ge  是全局变量,为何还要传参?

楼上帮你指出来了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top