久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4751|回復: 31
打印 上一主題 下一主題
收起左側

51單片機用四個獨立按鍵分別控制同時顯示的四個顯示器,其他三個顯示器會同步刷新

[復制鏈接]
跳轉到指定樓層
樓主
ID:806593 發(fā)表于 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);
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:332444 發(fā)表于 2020-7-22 16:40 | 只看該作者
加按鍵松手檢測:while(!k1);...while(!k4);
回復

使用道具 舉報

板凳
ID:806593 發(fā)表于 2020-7-22 19:44 | 只看該作者
xianfajushi 發(fā)表于 2020-7-22 16:40
加按鍵松手檢測:while(!k1);...while(!k4);

請問可以具體點嘛,我剛學這個所以不是很理解,拜托了
回復

使用道具 舉報

地板
ID:213173 發(fā)表于 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;//鎖定鍵態(tài)
  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);//控制主循環(huán)周期約1ms
  54.         }
  55. }
復制代碼
回復

使用道具 舉報

5#
ID:332444 發(fā)表于 2020-7-23 06:30 | 只看該作者
我的按鍵代碼是這樣的:{char a=0;while(++a==0&&!k1);k=~k;while(!k1);return k;}能理解?判斷按下與消抖,執(zhí)行,檢測松手。。。
回復

使用道具 舉報

6#
ID:806593 發(fā)表于 2020-7-23 09:12 | 只看該作者
wulin 發(fā)表于 2020-7-22 21:16
這樣改寫按鍵與顯示互不干擾,不必開定時器。

大佬,你這個代碼的效果好像不是我想要的那種哦,我想要的效果是四個數碼管一開始全部顯示為0000,當我按下第一個按鈕,其他三個數碼管不變,只有第一個加1,依次類推(按下按鈕時,四個數碼管全部不會發(fā)生變化,松開按鈕后,對應的數碼管加1)
回復

使用道具 舉報

7#
ID:806593 發(fā)表于 2020-7-23 09:14 | 只看該作者
xianfajushi 發(fā)表于 2020-7-23 06:30
我的按鍵代碼是這樣的:{char a=0;while(++a==0&&!k1);k=~k;while(!k1);return k;}能理解?判斷按下與消抖 ...

如果您方便的話,可以在我的代碼上進行修改
回復

使用道具 舉報

8#
ID:806593 發(fā)表于 2020-7-23 09:19 | 只看該作者
小廣AA 發(fā)表于 2020-7-23 09:12
大佬,你這個代碼的效果好像不是我想要的那種哦,我想要的效果是四個數碼管一開始全部顯示為0000,當我按 ...

不過還是十分感謝您的指教
回復

使用道具 舉報

9#
ID:806593 發(fā)表于 2020-7-23 09:27 | 只看該作者
小廣AA 發(fā)表于 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,其他不變
回復

使用道具 舉報

10#
ID:806593 發(fā)表于 2020-7-23 09:31 | 只看該作者
小廣AA 發(fā)表于 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,其他不變(也不會閃動)
回復

使用道具 舉報

11#
ID:332444 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

12#
ID:744327 發(fā)表于 2020-7-23 10:10 | 只看該作者
四個數碼管開始運行顯示為0000,當按下第一個按鈕,其他三個數碼管不變,只有第一個加1,依次類推(按下按鈕時,對應的數碼管加1)
回復

使用道具 舉報

13#
ID:332444 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

14#
ID:332444 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

15#
ID:332444 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

16#
ID:332444 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

17#
ID:806593 發(fā)表于 2020-7-23 10:34 | 只看該作者
xianfajushi 發(fā)表于 2020-7-23 10:31
你老按住按鍵干嘛?要修改也行

您方便發(fā)一下完整的嗎?有點亂
回復

使用道具 舉報

18#
ID:806593 發(fā)表于 2020-7-23 10:40 | 只看該作者
小廣AA 發(fā)表于 2020-7-23 10:34
您方便發(fā)一下完整的嗎?有點亂

我剛剛根據您修改的代碼去執(zhí)行的時候,按鍵時沒有效果的
回復

使用道具 舉報

19#
ID:332444 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

20#
ID:332444 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

21#
ID:332444 發(fā)表于 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 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

22#
ID:213173 發(fā)表于 2020-7-23 11:55 | 只看該作者
小廣AA 發(fā)表于 2020-7-23 09:12
大佬,你這個代碼的效果好像不是我想要的那種哦,我想要的效果是四個數碼管一開始全部顯示為0000,當我按 ...

這個程序就是4個按鍵對應4個數碼管,互相之間不影響。經過仿真確認無誤。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

23#
ID:806593 發(fā)表于 2020-7-23 13:56 | 只看該作者
wulin 發(fā)表于 2020-7-23 11:55
這個程序就是4個按鍵對應4個數碼管,互相之間不影響。經過仿真確認無誤。

原理上確實四個按鍵是單獨控制四個顯示器,而且互不影響的,但是我在運行代碼時,當我按下按鍵時,只有一個數碼管是顯示的,而且顯示的數碼管和我按鍵對應的數碼管不一定是同一個。我想要實現的效果是:四個數碼管同時先顯示,按下按鍵時,四個數碼管還是同時顯示,當松開按鍵之后,按鍵對應的數碼管加1,其他三個不變,且不會閃動
回復

使用道具 舉報

24#
ID:806593 發(fā)表于 2020-7-23 14:01 | 只看該作者
xianfajushi 發(fā)表于 2020-7-23 11:16
確實越改越亂,是因為你不是按我的修改,還是回到你原先的代碼修改

大佬,您修改后的代碼確實是每一個按鍵控制了一個數碼管,但是我想要的效果是按下一個按鍵時,其他三個也同時顯示,現在代碼的效果是按下按鍵之后只顯示一個數碼管,而且與按鍵對應的數碼管不一致
回復

使用道具 舉報

25#
ID:332444 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

26#
ID:806593 發(fā)表于 2020-7-23 16:26 | 只看該作者
回復

使用道具 舉報

27#
ID:806593 發(fā)表于 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. }

復制代碼
回復

使用道具 舉報

28#
ID:806593 發(fā)表于 2020-7-23 16:30 | 只看該作者

這是我后面自己改的代碼,雖然實現了效果,不過很多重復代碼,還是大佬的簡潔明了
回復

使用道具 舉報

29#
ID:332444 發(fā)表于 2020-7-23 17:23 | 只看該作者
誠如所言,我的確喜歡簡潔的代碼,這個程序要是全改還要簡潔的多,因此,像我寫的8*8,8*16,16*16點陣代碼,簡潔到了讓人懷疑的地步,你猜帖主加了我后怎么說?說就我這點程序就能顯示他的數據?然而我已經顯示了他的數據了,有目共睹的事,還有必要說這話?!,當然了,我只給了顯示一個字的代碼,其他的柳給他自己去寫多字的動態(tài)實現,沒把最終的代碼公布。
回復

使用道具 舉報

30#
ID:332444 發(fā)表于 2020-7-23 17:25 | 只看該作者
在信v息中他既然不正面提問,我自然也不正面回復,我只說他廢話太多,為什么這樣說?我已經顯示了他的全部字符了,還有必要問那句話?那句不就是廢話?
回復

使用道具 舉報

31#
ID:806593 發(fā)表于 2020-7-23 19:11 | 只看該作者
xianfajushi 發(fā)表于 2020-7-23 17:25
在信v息中他既然不正面提問,我自然也不正面回復,我只說他廢話太多,為什么這樣說?我已經顯示了他的全部 ...

哈哈,不管別人怎么樣,我還是挺謝謝你,感謝您耐心的解答。以后請多多指教
回復

使用道具 舉報

32#
ID:332444 發(fā)表于 2020-7-23 20:24 | 只看該作者
你能得到幫助全靠你的學習態(tài)度,我在論壇見過各樣的人物。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 三级成人在线 | 久久精品国产一区二区三区不卡 | 羞羞视频免费观 | 欧美黄色一区 | 高清国产午夜精品久久久久久 | 欧美lesbianxxxxhd视频社区 | 午夜精品视频在线观看 | 亚洲精品区 | 久久激情网 | 欧美日韩亚洲一区 | 久久99久久 | 99久久电影 | av天天干| 精品三级在线观看 | 国内自拍偷拍一区 | 亚洲日韩中文字幕一区 | 本地毛片| 97精品超碰一区二区三区 | 在线观看免费国产 | 国产中文视频 | 一级毛片免费完整视频 | 国产精品一区在线观看 | 欧美综合在线观看 | 四虎影院新地址 | 久久久综合网 | 三级视频国产 | 亚洲精品91 | 国产中文视频 | 欧美不卡网站 | 欧美国产日韩在线 | 91视频88av | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 久久精品91久久久久久再现 | 日韩aⅴ在线观看 | 麻豆av在线免费观看 | 日本天堂视频在线观看 | 欧美8一10sex性hd| 国产综合视频 | 综合精品久久久 | 国产精品久久久久久久久久尿 | 久久99深爱久久99精品 |