找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4470|回复: 31
收起左侧

51单片机用四个独立按键分别控制同时显示的四个显示器,其他三个显示器会同步刷新

[复制链接]
ID:806593 发表于 2020-7-22 09:27 | 显示全部楼层 |阅读模式
#include  <reg51.h>
#define  uchar  unsigned  char
#define  uint unsigned int
#define duan P0

sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;

sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;

uint a,b,c,d;
uint e=0;
uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void timer1_init()
{
TMOD=0x10;
TH1=(65535-45827)/256;
TL1=(65535-45827)%256;
EA=1;
ET1=1;
TR1=1;
}

void delay(uint t)
{       
uint i,j;
for(i=t;i>0;i--)
for(j=112;j>0;j--);
}

void display(uint a,uint b,uint c,uint d)
{

wei1=1;
wei2=0;
wei3=0;
wei4=0;
duan=sz[a];
delay(5);
       

wei1=0;
wei2=1;
wei3=0;
wei4=0;
duan=sz[b];
delay(5);


wei1=0;
wei2=0;
wei3=1;
wei4=0;
duan=sz[c];
delay(5);
       

wei1=0;
wei2=0;
wei3=0;
wei4=1;
duan=sz[d];
delay(5);
}

       
void  timer1() interrupt 3
{
TH1=(65535-45827)/256;
TL1=(65535-45827)%256;          
                if(k1==0)
                {
                        delay(10);
                        if(k1==0)
                        {
                                a++;
                        while(k1==0)               
                        if(a>9)
                                a=0;
                        else
                                a=a;
                        }               
                }               
                if(k2==0)
                {
                        delay(10);
                        if(k2==0)
                        {
                                b++;
                        while(k2==0)               
                        if(b>9)
                                b=0;
                        else
                                b=b;
                        }               
                }
                if(k3==0)
                {
                        delay(10);
                        if(k3==0)
                        {
                                c++;
                        while(k3==0)               
                        if(c>9)
                                c=0;
                        else
                                c=c;
                        }               
                }
                if(k4==0)
                {
                        delay(10);
                        if(k4==0)
                        {
                                d++;
                        while(k4==0)               
                        if(d>9)
                                d=0;
                        else
                                d=d;
                        }               
                }

}

void  main()
{
timer1_init();
a,b,c,d=0;
        while(1){
display(a,b,c,d);
        }
}


回复

使用道具 举报

ID:332444 发表于 2020-7-22 16:40 | 显示全部楼层
加按键松手检测:while(!k1);...while(!k4);
回复

使用道具 举报

ID:806593 发表于 2020-7-22 19:44 | 显示全部楼层
xianfajushi 发表于 2020-7-22 16:40
加按键松手检测:while(!k1);...while(!k4);

请问可以具体点嘛,我刚学这个所以不是很理解,拜托了
回复

使用道具 举报

ID:213173 发表于 2020-7-22 21:16 | 显示全部楼层
这样改写按键与显示互不干扰,不必开定时器。
  1. #include  <reg51.h>
  2. #define  uchar  unsigned  char
  3. #define  uint unsigned int
  4. #define duan P0

  5. sbit k1=P3^4;
  6. sbit k2=P3^5;
  7. sbit k3=P3^6;
  8. sbit k4=P3^7;

  9. uchar a,b,c,d;
  10. uchar count;
  11. bit sign;
  12. uchar num;
  13. uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  14. uchar data dis_buf[4];
  15. void delay(uint t)
  16. {        
  17.         uint i,j;
  18.         for(i=t;i>0;i--)
  19.                 for(j=112;j>0;j--);
  20. }

  21. void display()
  22. {
  23.         dis_buf[0]=sz[a];
  24.         dis_buf[1]=sz[b];
  25.         dis_buf[2]=sz[c];
  26.         dis_buf[3]=sz[d];
  27.         duan=0x00;//段消隐
  28.         P2&=0x0f;//位清0
  29.         P2|=~(0x10<<num);//直接驱动
  30. //        P2|=(0x10<<num);//加三极管驱动
  31.         duan=dis_buf[num];//送段码
  32.         num++;
  33.         num%=4;
  34. }

  35. void main()
  36. {
  37.         while(1)
  38.         {
  39.                 if(!k1 || !k2 || !k3 || !k4)
  40.                 {
  41.                         count++;//消抖计数
  42.                         if(count>=10 && sign==0)
  43.                         {
  44.                                 sign=1;//锁定键态
  45.                                 if(!k1){a++;if(a>=10)a=0;}
  46.                                 if(!k2){b++;if(b>=10)b=0;}
  47.                                 if(!k3){c++;if(c>=10)c=0;}
  48.                                 if(!k4){d++;if(d>=10)d=0;}
  49.                         }
  50.                 }         
  51.                 else{count=0;sign=0;}
  52.                 display();
  53.                 delay(1);//控制主循环周期约1ms
  54.         }
  55. }
复制代码
回复

使用道具 举报

ID:332444 发表于 2020-7-23 06:30 | 显示全部楼层
我的按键代码是这样的:{char a=0;while(++a==0&&!k1);k=~k;while(!k1);return k;}能理解?判断按下与消抖,执行,检测松手。。。
回复

使用道具 举报

ID:806593 发表于 2020-7-23 09:12 | 显示全部楼层
wulin 发表于 2020-7-22 21:16
这样改写按键与显示互不干扰,不必开定时器。

大佬,你这个代码的效果好像不是我想要的那种哦,我想要的效果是四个数码管一开始全部显示为0000,当我按下第一个按钮,其他三个数码管不变,只有第一个加1,依次类推(按下按钮时,四个数码管全部不会发生变化,松开按钮后,对应的数码管加1)
回复

使用道具 举报

ID:806593 发表于 2020-7-23 09:14 | 显示全部楼层
xianfajushi 发表于 2020-7-23 06:30
我的按键代码是这样的:{char a=0;while(++a==0&&!k1);k=~k;while(!k1);return k;}能理解?判断按下与消抖 ...

如果您方便的话,可以在我的代码上进行修改
回复

使用道具 举报

ID:806593 发表于 2020-7-23 09:19 | 显示全部楼层
小广AA 发表于 2020-7-23 09:12
大佬,你这个代码的效果好像不是我想要的那种哦,我想要的效果是四个数码管一开始全部显示为0000,当我按 ...

不过还是十分感谢您的指教
回复

使用道具 举报

ID:806593 发表于 2020-7-23 09:27 | 显示全部楼层
小广AA 发表于 2020-7-23 09:12
大佬,你这个代码的效果好像不是我想要的那种哦,我想要的效果是四个数码管一开始全部显示为0000,当我按 ...

#include  <reg51.h>
#define  uchar  unsigned  char
#define  uint unsigned int
#define duan P0

sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;

sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;

uint a,b,c,d;
uint e=0;
uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void timer1_init()
{
TMOD=0x10;
TH1=(65535-45827)/256;
TL1=(65535-45827)%256;
EA=1;
ET1=1;
TR1=1;
}
void  stop()
{
EA=0;
ET1=0;
TR1=0;
}

void start()
{
EA=1;
ET1=1;
TR1=1;
}

void delay(uint t)
{       
uint i,j;
for(i=t;i>0;i--)
for(j=112;j>0;j--);
}

void display(uint a,uint b,uint c,uint d)
{

wei1=1;
wei2=0;
wei3=0;
wei4=0;
duan=sz[a];
delay(1);
P0=0XFF;
       
wei1=0;
wei2=1;
wei3=0;
wei4=0;
duan=sz;
delay(1);
P0=0XFF;

wei1=0;
wei2=0;
wei3=1;
wei4=0;
duan=sz[c];
delay(1);
P0=0XFF;

wei1=0;
wei2=0;
wei3=0;
wei4=1;
duan=sz[d];
delay(1);
P0=0XFF;
}

       
void  timer1() interrupt 3
{
TH1=(65535-45827)/256;
TL1=(65535-45827)%256;          
                if(k1==0)
                {
                        delay(10);
                        if(k1==0)
                        {
                                stop();
                                wei1=1;
                                wei2=0;
                         wei3=0;
                          wei4=0;                       
                                duan=sz[a];

                        while(k1==0);       
                                while(!k1);
        a++;                               
                        if(a>9)
                                a=0;
                       
               
                        }               
                }               
                if(k2==0)
                {
                        delay(10);
                        if(k2==0)
                        {
stop();
                                wei1=0;
                                wei2=1;
                        wei3=0;
                        wei4=0;
                                duan=sz;
                        while(k2==0);       
                                        while(!k2);
        b++;                               
                        if(b>9)
                                b=0;
                       
                        }               
                }
                if(k3==0)
                {
                        delay(10);
                        if(k3==0)
                        {
stop();
                                wei1=0;
                                wei2=0;
                        wei3=1;
                        wei4=0;
                                duan=sz[c];
                        while(k3==0);       
                                        while(!k3);
         c++;                               
                        if(c>9)
                                c=0;
                       
                        }               
                }
                if(k4==0)
                {
                        delay(10);
                        if(k4==0)
                        {
                                stop();
                                wei1=0;
                                wei2=0;
                        wei3=0;
                        wei4=1;
                                duan=sz[d];
                        while(k4==0);       
                                        while(!k4);
        d++;                               
                        if(d>9)
                                d=0;
               
                         }               
                }
                start();
}

void  main()
{
timer1_init();
a,b,c,d=0;
        while(1){
display(a,b,c,d);
        }
}

您看一下,这是我最新修改的代码,现在的问题是,按下按键时,只显示按键对应的数码管,其他三个数码管不显示,松开按钮后按键对应的数码管加1,其他不变
回复

使用道具 举报

ID:806593 发表于 2020-7-23 09:31 | 显示全部楼层
小广AA 发表于 2020-7-23 09:14
如果您方便的话,可以在我的代码上进行修改

#include  <reg51.h>
#define  uchar  unsigned  char
#define  uint unsigned int
#define duan P0

sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;

sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;

uint a,b,c,d;
uint e=0;
uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void timer1_init()
{
TMOD=0x10;
TH1=(65535-45827)/256;
TL1=(65535-45827)%256;
EA=1;
ET1=1;
TR1=1;
}
void  stop()
{
EA=0;
ET1=0;
TR1=0;
}

void start()
{
EA=1;
ET1=1;
TR1=1;
}

void delay(uint t)
{       
uint i,j;
for(i=t;i>0;i--)
for(j=112;j>0;j--);
}

void display(uint a,uint b,uint c,uint d)
{

wei1=1;
wei2=0;
wei3=0;
wei4=0;
duan=sz[a];
delay(1);
P0=0XFF;
       
wei1=0;
wei2=1;
wei3=0;
wei4=0;
duan=sz;
delay(1);
P0=0XFF;

wei1=0;
wei2=0;
wei3=1;
wei4=0;
duan=sz[c];
delay(1);
P0=0XFF;

wei1=0;
wei2=0;
wei3=0;
wei4=1;
duan=sz[d];
delay(1);
P0=0XFF;
}

       
void  timer1() interrupt 3
{
TH1=(65535-45827)/256;
TL1=(65535-45827)%256;          
                if(k1==0)
                {
                        delay(10);
                        if(k1==0)
                        {
                                stop();
                                wei1=1;
                                wei2=0;
                         wei3=0;
                          wei4=0;                       
                                duan=sz[a];

                        while(k1==0);       
                                while(!k1);
        a++;                               
                        if(a>9)
                                a=0;
                       
               
                        }               
                }               
                if(k2==0)
                {
                        delay(10);
                        if(k2==0)
                        {
stop();
                                wei1=0;
                                wei2=1;
                        wei3=0;
                        wei4=0;
                                duan=sz;
                        while(k2==0);       
                                        while(!k2);
        b++;                               
                        if(b>9)
                                b=0;
                       
                        }               
                }
                if(k3==0)
                {
                        delay(10);
                        if(k3==0)
                        {
stop();
                                wei1=0;
                                wei2=0;
                        wei3=1;
                        wei4=0;
                                duan=sz[c];
                        while(k3==0);       
                                        while(!k3);
         c++;                               
                        if(c>9)
                                c=0;
                       
                        }               
                }
                if(k4==0)
                {
                        delay(10);
                        if(k4==0)
                        {
                                stop();
                                wei1=0;
                                wei2=0;
                        wei3=0;
                        wei4=1;
                                duan=sz[d];
                        while(k4==0);       
                                        while(!k4);
        d++;                               
                        if(d>9)
                                d=0;
               
                         }               
                }
                start();
}

void  main()
{
timer1_init();
a,b,c,d=0;
        while(1){
display(a,b,c,d);
        }
}

这是我最新修改的代码,还有一个显示问题:当按下按键时,只有按键对应的数码管会显示,其他三个都不显示,松开按键之后四个数码管会全部显示,并且按键对应的数码管加1,现在就是想按下按键时,四个数码管全部显示,松开只有按键对应的数码管数字加1,其他不变(也不会闪动)
回复

使用道具 举报

ID:332444 发表于 2020-7-23 10:09 | 显示全部楼层
  1. void  timer1() interrupt 3
  2. {
  3. TH1=(65535-45827)/256;
  4. TL1=(65535-45827)%256;         
  5. char aa=0;
  6. while(k1==0&&++aa==0)if(++a>9)a=0;
  7. while(k2==0&&++aa==0)if(++b>9)b=0;
  8. while(k3==0&&++aa==0)if(++c>9)c=0;
  9. while(k4==0&&++aa==0)if(++d>9)d=0;
  10. while(!k1||k2||k3||l4);
  11. }
复制代码
回复

使用道具 举报

ID:744327 发表于 2020-7-23 10:10 | 显示全部楼层
四个数码管开始运行显示为0000,当按下第一个按钮,其他三个数码管不变,只有第一个加1,依次类推(按下按钮时,对应的数码管加1)
回复

使用道具 举报

ID:332444 发表于 2020-7-23 10:17 | 显示全部楼层
  1. void display(uint a,uint b,uint c,uint d)
  2. {

  3. wei1=1;
  4. wei2=0;
  5. wei3=0;
  6. wei4=0;
  7. duan=sz[a];
  8. delay(5);
  9. duan=0;      

  10. wei1=0;
  11. wei2=1;
  12. wei3=0;
  13. wei4=0;
  14. duan=sz[b];
  15. delay(5);
  16. duan=0;

  17. wei1=0;
  18. wei2=0;
  19. wei3=1;
  20. wei4=0;
  21. duan=sz[c];
  22. delay(5);
  23. duan=0;        

  24. wei1=0;
  25. wei2=0;
  26. wei3=0;
  27. wei4=1;
  28. duan=sz[d];
  29. delay(5);
  30. duan=0;
  31. }
复制代码
回复

使用道具 举报

ID:332444 发表于 2020-7-23 10:22 | 显示全部楼层
  1. void  main()
  2. {
  3. timer1_init();
  4. char a=0,b=0,c=0,d=0;
  5.         while(1){
  6. display(a,b,c,d);
  7.         }
  8. }
复制代码
回复

使用道具 举报

ID:332444 发表于 2020-7-23 10:24 | 显示全部楼层
  1. void display(char a,char b,char c,char d)
  2. {

  3. wei1=1;
  4. wei2=0;
  5. wei3=0;
  6. wei4=0;
  7. duan=sz[a];
  8. delay(5);
  9. duan=0;      

  10. wei1=0;
  11. wei2=1;
  12. wei3=0;
  13. wei4=0;
  14. duan=sz[b];
  15. delay(5);
  16. duan=0;

  17. wei1=0;
  18. wei2=0;
  19. wei3=1;
  20. wei4=0;
  21. duan=sz[c];
  22. delay(5);
  23. duan=0;        

  24. wei1=0;
  25. wei2=0;
  26. wei3=0;
  27. wei4=1;
  28. duan=sz[d];
  29. delay(5);
  30. duan=0;
  31. }
复制代码
回复

使用道具 举报

ID:332444 发表于 2020-7-23 10:31 | 显示全部楼层
你老按住按键干嘛?要修改也行
  1. void  timer1() interrupt 3
  2. {
  3. TH1=(65535-45827)/256;
  4. TL1=(65535-45827)%256;         
  5. char aa=0;
  6. while(k1==0&&++aa==0)if(++a>9)a=0;
  7. while(k2==0&&++aa==0)if(++b>9)b=0;
  8. while(k3==0&&++aa==0)if(++c>9)c=0;
  9. while(k4==0&&++aa==0)if(++d>9)d=0;
  10. while(!k1||k2||k3||k4)display(a,b,c,d);
  11. }
复制代码
回复

使用道具 举报

ID:806593 发表于 2020-7-23 10:34 | 显示全部楼层
xianfajushi 发表于 2020-7-23 10:31
你老按住按键干嘛?要修改也行

您方便发一下完整的吗?有点乱
回复

使用道具 举报

ID:806593 发表于 2020-7-23 10:40 | 显示全部楼层
小广AA 发表于 2020-7-23 10:34
您方便发一下完整的吗?有点乱

我刚刚根据您修改的代码去执行的时候,按键时没有效果的
回复

使用道具 举报

ID:332444 发表于 2020-7-23 10:42 | 显示全部楼层
  1. void  timer1() interrupt 3
  2. {
  3. TH1=(65535-45827)/256;
  4. TL1=(65535-45827)%256;         
  5.                 if(k1==0)
  6.                 {
  7.                         delay(10);
  8.                         if(k1==0)
  9.                         {
  10.                                 stop();
  11.                                 wei1=1;
  12.                                 wei2=0;
  13.                          wei3=0;
  14.                           wei4=0;                       
  15.                                 duan=sz[a];
  16.         a++;                              
  17.                         if(a>9)
  18.                                 a=0;
  19.                        
  20.                
  21.                         }               
  22.                 }               
  23.                 if(k2==0)
  24.                 {
  25.                         delay(10);
  26.                         if(k2==0)
  27.                         {
  28. stop();
  29.                                 wei1=0;
  30.                                 wei2=1;
  31.                         wei3=0;
  32.                         wei4=0;
  33.                                 duan=sz;

  34.         b++;                              
  35.                         if(b>9)
  36.                                 b=0;
  37.                        
  38.                         }               
  39.                 }
  40.                 if(k3==0)
  41.                 {
  42.                         delay(10);
  43.                         if(k3==0)
  44.                         {
  45. stop();
  46.                                 wei1=0;
  47.                                 wei2=0;
  48.                         wei3=1;
  49.                         wei4=0;
  50.                                 duan=sz[c];

  51.          c++;                              
  52.                         if(c>9)
  53.                                 c=0;
  54.                        
  55.                         }               
  56.                 }
  57.                 if(k4==0)
  58.                 {
  59.                         delay(10);
  60.                         if(k4==0)
  61.                         {
  62.                                 stop();
  63.                                 wei1=0;
  64.                                 wei2=0;
  65.                         wei3=0;
  66.                         wei4=1;
  67.                                 duan=sz[d];

  68.         d++;                              
  69.                         if(d>9)
  70.                                 d=0;
  71.                
  72.                          }               
  73.                 }
  74.                 start();
  75. }
复制代码
回复

使用道具 举报

ID:332444 发表于 2020-7-23 10:56 | 显示全部楼层
  1. #include  <reg51.h>
  2. #define  uchar  unsigned  char
  3. #define  uint unsigned int
  4. #define duan P0

  5. sbit k1=P3^4;
  6. sbit k2=P3^5;
  7. sbit k3=P3^6;
  8. sbit k4=P3^7;

  9. sbit wei1=P2^4;
  10. sbit wei2=P2^5;
  11. sbit wei3=P2^6;
  12. sbit wei4=P2^7;

  13. uint a=0,b=0,c=0,d=0;
  14. uint e=0;
  15. uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  16. void timer1_init()
  17. {
  18. TMOD=0x10;
  19. TH1=(65535-45827)/256;
  20. TL1=(65535-45827)%256;
  21. EA=1;
  22. ET1=1;
  23. TR1=1;
  24. }
  25. void delay(uint t)
  26. {      
  27. uint i,j;
  28. for(i=t;i>0;i--)
  29. for(j=112;j>0;j--);
  30. }

  31. void display(uint a,uint b,uint c,uint d)
  32. {

  33. wei1=1;
  34. wei2=0;
  35. wei3=0;
  36. wei4=0;
  37. duan=sz[a];
  38. delay(1);
  39. P0=0XFF;
  40.       
  41. wei1=0;
  42. wei2=1;
  43. wei3=0;
  44. wei4=0;
  45. duan=sz;
  46. delay(1);
  47. P0=0XFF;

  48. wei1=0;
  49. wei2=0;
  50. wei3=1;
  51. wei4=0;
  52. duan=sz[c];
  53. delay(1);
  54. P0=0XFF;

  55. wei1=0;
  56. wei2=0;
  57. wei3=0;
  58. wei4=1;
  59. duan=sz[d];
  60. delay(1);
  61. P0=0XFF;
  62. }

  63.       
  64. void  timer1() interrupt 3
  65. {
  66. TH1=(65535-45827)/256;
  67. TL1=(65535-45827)%256;         
  68.                 if(k1==0)
  69.                 {
  70.                         delay(10);
  71.                         if(k1==0)
  72.                         {
  73.    
  74.                                 wei1=1;
  75.                                 wei2=0;
  76.                          wei3=0;
  77.                           wei4=0;                       
  78.                                 duan=sz[a];


  79.         a++;                              
  80.                         if(a>9)
  81.                                 a=0;
  82.                        
  83.                
  84.                         }               
  85.                 }               
  86.                 if(k2==0)
  87.                 {
  88.                         delay(10);
  89.                         if(k2==0)
  90.                         {
  91.                                 wei1=0;
  92.                                 wei2=1;
  93.                         wei3=0;
  94.                         wei4=0;
  95.                                 duan=sz;

  96.         b++;                              
  97.                         if(b>9)
  98.                                 b=0;
  99.                        
  100.                         }               
  101.                 }
  102.                 if(k3==0)
  103.                 {
  104.                         delay(10);
  105.                         if(k3==0)
  106.                         {
  107.                                 wei1=0;
  108.                                 wei2=0;
  109.                         wei3=1;
  110.                         wei4=0;
  111.                                 duan=sz[c];

  112.          c++;                              
  113.                         if(c>9)
  114.                                 c=0;
  115.                        
  116.                         }               
  117.                 }
  118.                 if(k4==0)
  119.                 {
  120.                         delay(10);
  121.                         if(k4==0)
  122.                         {
  123.                                 wei1=0;
  124.                                 wei2=0;
  125.                         wei3=0;
  126.                         wei4=1;
  127.                                 duan=sz[d];

  128.         d++;                              
  129.                         if(d>9)
  130.                                 d=0;
  131.                
  132.                          }               
  133.                 }

  134. }

  135. void  main()
  136. {
  137. timer1_init();

  138.         while(1){
  139. display(a,b,c,d);
  140.         }
  141. }
复制代码
回复

使用道具 举报

ID:332444 发表于 2020-7-23 11:16 | 显示全部楼层
确实越改越乱,是因为你不是按我的修改,还是回到你原先的代码修改

  1. #include  <reg51.h>
  2. #define  uchar  unsigned  char
  3. #define  uint unsigned int
  4. #define duan P0

  5. sbit k1=P3^4;
  6. sbit k2=P3^5;
  7. sbit k3=P3^6;
  8. sbit k4=P3^7;

  9. sbit wei1=P2^4;
  10. sbit wei2=P2^5;
  11. sbit wei3=P2^6;
  12. sbit wei4=P2^7;

  13. uint a=0,b=0,c=0,d=0;

  14. uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  15. void timer1_init()
  16. {
  17. TMOD=0x10;
  18. TH1=(65535-45827)/256;
  19. TL1=(65535-45827)%256;
  20. EA=1;
  21. ET1=1;
  22. TR1=1;
  23. }

  24. void delay(uint t)
  25. {      
  26. uint i,j;
  27. for(i=t;i>0;i--)
  28. for(j=112;j>0;j--);
  29. }

  30. void display(uint a,uint b,uint c,uint d)
  31. {

  32. wei1=1;
  33. wei2=0;
  34. wei3=0;
  35. wei4=0;
  36. duan=sz[a];
  37. delay(5);
  38. duan=0;      

  39. wei1=0;
  40. wei2=1;
  41. wei3=0;
  42. wei4=0;
  43. duan=sz[b];
  44. delay(5);
  45. duan=0;

  46. wei1=0;
  47. wei2=0;
  48. wei3=1;
  49. wei4=0;
  50. duan=sz[c];
  51. delay(5);
  52. duan=0;      

  53. wei1=0;
  54. wei2=0;
  55. wei3=0;
  56. wei4=1;
  57. duan=sz[d];
  58. delay(5);
  59. duan=0;
  60. }

  61.       
  62. void  timer1() interrupt 3
  63. {
  64. TH1=(65535-45827)/256;
  65. TL1=(65535-45827)%256;         
  66.                 if(k1==0)
  67.                 {
  68.                         delay(10);
  69.                         if(k1==0)
  70.                         {
  71.                                 a++;
  72.         
  73.                         if(a>9)
  74.                                 a=0;

  75.                         }               
  76.                 }               
  77.                 if(k2==0)
  78.                 {
  79.                         delay(10);
  80.                         if(k2==0)
  81.                         {
  82.                                 b++;
  83.       
  84.                         if(b>9)
  85.                                 b=0;

  86.                         }               
  87.                 }
  88.                 if(k3==0)
  89.                 {
  90.                         delay(10);
  91.                         if(k3==0)
  92.                         {
  93.                                 c++;
  94.          
  95.                         if(c>9)
  96.                                 c=0;

  97.                         }               
  98.                 }
  99.                 if(k4==0)
  100.                 {
  101.                         delay(10);
  102.                         if(k4==0)
  103.                         {
  104.                                 d++;
  105.            
  106.                         if(d>9)
  107.                                 d=0;
  108.    
  109.                         }               
  110.                 }

  111. }

  112. void  main()
  113. {
  114. timer1_init();

  115.         while(1){
  116. display(a,b,c,d);
  117.         }
  118. }
复制代码

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2020-7-23 11:55 | 显示全部楼层
小广AA 发表于 2020-7-23 09:12
大佬,你这个代码的效果好像不是我想要的那种哦,我想要的效果是四个数码管一开始全部显示为0000,当我按 ...

这个程序就是4个按键对应4个数码管,互相之间不影响。经过仿真确认无误。 无标题.jpg

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:806593 发表于 2020-7-23 13:56 | 显示全部楼层
wulin 发表于 2020-7-23 11:55
这个程序就是4个按键对应4个数码管,互相之间不影响。经过仿真确认无误。

原理上确实四个按键是单独控制四个显示器,而且互不影响的,但是我在运行代码时,当我按下按键时,只有一个数码管是显示的,而且显示的数码管和我按键对应的数码管不一定是同一个。我想要实现的效果是:四个数码管同时先显示,按下按键时,四个数码管还是同时显示,当松开按键之后,按键对应的数码管加1,其他三个不变,且不会闪动
回复

使用道具 举报

ID:806593 发表于 2020-7-23 14:01 | 显示全部楼层
xianfajushi 发表于 2020-7-23 11:16
确实越改越乱,是因为你不是按我的修改,还是回到你原先的代码修改

大佬,您修改后的代码确实是每一个按键控制了一个数码管,但是我想要的效果是按下一个按键时,其他三个也同时显示,现在代码的效果是按下按键之后只显示一个数码管,而且与按键对应的数码管不一致
回复

使用道具 举报

ID:332444 发表于 2020-7-23 14:40 | 显示全部楼层

  1. #include  <reg51.h>
  2. #define  uchar  unsigned  char
  3. #define  uint unsigned int
  4. #define duan P0

  5. sbit k1=P3^4;
  6. sbit k2=P3^5;
  7. sbit k3=P3^6;
  8. sbit k4=P3^7;

  9. sbit wei1=P2^4;
  10. sbit wei2=P2^5;
  11. sbit wei3=P2^6;
  12. sbit wei4=P2^7;

  13. uint a=0,b=0,c=0,d=0;

  14. uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  15. void timer1_init()
  16. {
  17. TMOD=0x10;
  18. TH1=(65535-45827)/256;
  19. TL1=(65535-45827)%256;
  20. EA=1;
  21. ET1=1;
  22. TR1=1;
  23. }

  24. void delay(uint t)
  25. {      
  26. uint i,j;
  27. for(i=t;i>0;i--)
  28. for(j=112;j>0;j--);
  29. }

  30. void display(uint a,uint b,uint c,uint d)
  31. {

  32. wei1=1;
  33. wei2=0;
  34. wei3=0;
  35. wei4=0;
  36. duan=sz[a];
  37. delay(5);
  38. duan=0;      

  39. wei1=0;
  40. wei2=1;
  41. wei3=0;
  42. wei4=0;
  43. duan=sz[b];
  44. delay(5);
  45. duan=0;

  46. wei1=0;
  47. wei2=0;
  48. wei3=1;
  49. wei4=0;
  50. duan=sz[c];
  51. delay(5);
  52. duan=0;      

  53. wei1=0;
  54. wei2=0;
  55. wei3=0;
  56. wei4=1;
  57. duan=sz[d];
  58. delay(5);
  59. duan=0;
  60. }

  61.       
  62. void  timer1() interrupt 3
  63. {
  64. TH1=(65535-45827)/256;
  65. TL1=(65535-45827)%256;         
  66.                 if(k1==0)
  67.                 {
  68.                         delay(10);
  69.                         if(k1==0)
  70.                         {
  71.                                 a++;
  72.         
  73.                         if(a>9)
  74.                                 a=0;

  75.                         }               
  76.                 }               
  77.                 if(k2==0)
  78.                 {
  79.                         delay(10);
  80.                         if(k2==0)
  81.                         {
  82.                                 b++;
  83.       
  84.                         if(b>9)
  85.                                 b=0;

  86.                         }               
  87.                 }
  88.                 if(k3==0)
  89.                 {
  90.                         delay(10);
  91.                         if(k3==0)
  92.                         {
  93.                                 c++;
  94.          
  95.                         if(c>9)
  96.                                 c=0;

  97.                         }               
  98.                 }
  99.                 if(k4==0)
  100.                 {
  101.                         delay(10);
  102.                         if(k4==0)
  103.                         {
  104.                                 d++;
  105.            
  106.                         if(d>9)
  107.                                 d=0;
  108.    
  109.                         }               
  110.                 }
  111. while(!k1||!k2||!k4||!k4)display(a,b,c,d);
  112. }

  113. void  main()
  114. {
  115. timer1_init();

  116.         while(1){
  117. display(a,b,c,d);
  118.         }
  119. }
复制代码
回复

使用道具 举报

ID:806593 发表于 2020-7-23 16:26 | 显示全部楼层
回复

使用道具 举报

ID:806593 发表于 2020-7-23 16:28 | 显示全部楼层
  1. #include  <reg51.h>
  2. #define  uchar  unsigned  char
  3. #define  uint unsigned int
  4. #define duan P0

  5. sbit k1=P3^4;
  6. sbit k2=P3^5;
  7. sbit k3=P3^6;
  8. sbit k4=P3^7;

  9. sbit wei1=P2^4;
  10. sbit wei2=P2^5;
  11. sbit wei3=P2^6;
  12. sbit wei4=P2^7;

  13. uint a,b,c,d;
  14. uint e=0;
  15. uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  16. void timer1_init()
  17. {
  18. TMOD=0x10;
  19. TH1=(65535-45827)/256;
  20. TL1=(65535-45827)%256;
  21. EA=1;
  22. ET1=1;
  23. TR1=1;
  24. }
  25. void  stop()
  26. {
  27. EA=0;
  28. ET1=0;
  29. TR1=0;
  30. }

  31. void start()
  32. {
  33. EA=1;
  34. ET1=1;
  35. TR1=1;
  36. }

  37. void delay(uint t)
  38. {       
  39. uint i,j;
  40. for(i=t;i>0;i--)
  41. for(j=112;j>0;j--);
  42. }

  43. void display(uint a,uint b,uint c,uint d)
  44. {

  45. wei1=1;
  46. wei2=0;
  47. wei3=0;
  48. wei4=0;
  49. duan=sz[a];
  50. delay(1);
  51. P0=0XFF;
  52.        
  53. wei1=0;
  54. wei2=1;
  55. wei3=0;
  56. wei4=0;
  57. duan=sz[b];
  58. delay(1);
  59. P0=0XFF;

  60. wei1=0;
  61. wei2=0;
  62. wei3=1;
  63. wei4=0;
  64. duan=sz[c];
  65. delay(1);
  66. P0=0XFF;

  67. wei1=0;
  68. wei2=0;
  69. wei3=0;
  70. wei4=1;
  71. duan=sz[d];
  72. delay(1);
  73. P0=0XFF;
  74. }

  75.        
  76. void  timer1() interrupt 3
  77. {
  78. TH1=(65535-45827)/256;
  79. TL1=(65535-45827)%256;          
  80.                 if(k1==0)
  81.                 {
  82.                         delay(10);
  83.                         if(k1==0)
  84.                         {
  85.                                
  86.                                 stop();
  87.                                 while(k1==0){                       
  88.                                 wei1=1;
  89.                                 wei2=0;
  90.                          wei3=0;
  91.                           wei4=0;                       
  92.                                 duan=sz[a];
  93.                                 delay(1);
  94.                                         wei1=0;
  95.                                 wei2=1;
  96.                          wei3=0;
  97.                           wei4=0;                       
  98.                                 duan=sz[b];
  99.                                         delay(1);
  100.                                                         wei1=0;
  101.                                 wei2=0;
  102.                          wei3=1;
  103.                           wei4=0;                       
  104.                                 duan=sz[c];
  105.                                 delay(1);
  106.                                         wei1=0;
  107.                                 wei2=0;
  108.                          wei3=0;
  109.                           wei4=1;                       
  110.                                 duan=sz[d];
  111.                                         delay(1);
  112.                                 }
  113.                         while(k1==0);       
  114.                                 while(!k1);
  115.         a++;                               
  116.                         if(a>9)
  117.                                 a=0;
  118.                        
  119.                
  120.                         }               
  121.                 }               
  122.                 if(k2==0)
  123.                 {
  124.                         delay(10);
  125.                         if(k2==0)
  126.                         {
  127.         stop();
  128.                                 while(k2==0){                       
  129.                                 wei1=1;
  130.                                 wei2=0;
  131.                          wei3=0;
  132.                           wei4=0;                       
  133.                                 duan=sz[a];
  134.                                 delay(1);
  135.                                         wei1=0;
  136.                                 wei2=1;
  137.                          wei3=0;
  138.                           wei4=0;                       
  139.                                 duan=sz[b];
  140.                                         delay(1);
  141.                                                         wei1=0;
  142.                                 wei2=0;
  143.                          wei3=1;
  144.                           wei4=0;                       
  145.                                 duan=sz[c];
  146.                                 delay(1);
  147.                                         wei1=0;
  148.                                 wei2=0;
  149.                          wei3=0;
  150.                           wei4=1;                       
  151.                                 duan=sz[d];
  152.                                         delay(1);
  153.                                 }
  154.                         while(k2==0);       
  155.                                         while(!k2);
  156.         b++;                               
  157.                         if(b>9)
  158.                                 b=0;
  159.                        
  160.                         }               
  161.                 }
  162.                 if(k3==0)
  163.                 {
  164.                         delay(10);
  165.                         if(k3==0)
  166.                         {
  167.     stop();
  168.                         while(k3==0){                       
  169.                                 wei1=1;
  170.                                 wei2=0;
  171.                          wei3=0;
  172.                           wei4=0;                       
  173.                                 duan=sz[a];
  174.                                 delay(1);
  175.                                         wei1=0;
  176.                                 wei2=1;
  177.                          wei3=0;
  178.                           wei4=0;                       
  179.                                 duan=sz[b];
  180.                                         delay(1);
  181.                                                         wei1=0;
  182.                                 wei2=0;
  183.                          wei3=1;
  184.                           wei4=0;                       
  185.                                 duan=sz[c];
  186.                                 delay(1);
  187.                                         wei1=0;
  188.                                 wei2=0;
  189.                          wei3=0;
  190.                           wei4=1;                       
  191.                                 duan=sz[d];
  192.                                         delay(1);
  193.                                 }
  194.                         while(k3==0);       
  195.                                         while(!k3);
  196.          c++;                               
  197.                         if(c>9)
  198.                                 c=0;
  199.                        
  200.                         }               
  201.                 }
  202.                 if(k4==0)
  203.                 {
  204.                         delay(10);
  205.                         if(k4==0)
  206.                         {
  207.                                 stop();
  208.                                 while(k4==0){                       
  209.                                 wei1=1;
  210.                                 wei2=0;
  211.                          wei3=0;
  212.                           wei4=0;                       
  213.                                 duan=sz[a];
  214.                                 delay(1);
  215.                                         wei1=0;
  216.                                 wei2=1;
  217.                          wei3=0;
  218.                           wei4=0;                       
  219.                                 duan=sz[b];
  220.                                         delay(1);
  221.                                                         wei1=0;
  222.                                 wei2=0;
  223.                          wei3=1;
  224.                           wei4=0;                       
  225.                                 duan=sz[c];
  226.                                 delay(1);
  227.                                         wei1=0;
  228.                                 wei2=0;
  229.                          wei3=0;
  230.                           wei4=1;                       
  231.                                 duan=sz[d];
  232.                                         delay(1);
  233.                                 }
  234.                         while(k4==0);       
  235.                                         while(!k4);
  236.         d++;                               
  237.                         if(d>9)
  238.                                 d=0;
  239.                
  240.                          }               
  241.                 }
  242.                 start();
  243. }

  244. void  main()
  245. {
  246. timer1_init();
  247. a,b,c,d=0;
  248.         while(1){
  249. display(a,b,c,d);
  250.         }
  251. }

复制代码
回复

使用道具 举报

ID:806593 发表于 2020-7-23 16:30 | 显示全部楼层

这是我后面自己改的代码,虽然实现了效果,不过很多重复代码,还是大佬的简洁明了
回复

使用道具 举报

ID:332444 发表于 2020-7-23 17:23 | 显示全部楼层
诚如所言,我的确喜欢简洁的代码,这个程序要是全改还要简洁的多,因此,像我写的8*8,8*16,16*16点阵代码,简洁到了让人怀疑的地步,你猜帖主加了我后怎么说?说就我这点程序就能显示他的数据?然而我已经显示了他的数据了,有目共睹的事,还有必要说这话?!,当然了,我只给了显示一个字的代码,其他的柳给他自己去写多字的动态实现,没把最终的代码公布。
回复

使用道具 举报

ID:332444 发表于 2020-7-23 17:25 | 显示全部楼层
在信v息中他既然不正面提问,我自然也不正面回复,我只说他废话太多,为什么这样说?我已经显示了他的全部字符了,还有必要问那句话?那句不就是废话?
回复

使用道具 举报

ID:806593 发表于 2020-7-23 19:11 | 显示全部楼层
xianfajushi 发表于 2020-7-23 17:25
在信v息中他既然不正面提问,我自然也不正面回复,我只说他废话太多,为什么这样说?我已经显示了他的全部 ...

哈哈,不管别人怎么样,我还是挺谢谢你,感谢您耐心的解答。以后请多多指教
回复

使用道具 举报

ID:332444 发表于 2020-7-23 20:24 | 显示全部楼层
你能得到帮助全靠你的学习态度,我在论坛见过各样的人物。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表