欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 請幫忙指導一下單片機8位共陽數碼管循環顯示0-9,謝謝! [打印本頁]

作者: 147035206    時間: 2020-3-26 22:50
標題: 請幫忙指導一下單片機8位共陽數碼管循環顯示0-9,謝謝!
各位高手你們好!我這個51開發板(STC89C52)是10多年前的板子;板子上是2組4位共陽數碼管,組成的8位數碼管;沒有

鎖存器;位選是用三極管驅動的。請高手們。幫我優化一下這個程序。謝謝!!!

/*****八位數碼管循環顯示數字0--9;這是個笨方法,請高手指點,謝謝!*****/

單片機源程序如下:
  1. #include "reg52.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint i,j;

  5. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x90};//段選數字0-9;
  6. uchar code  wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選開關

  7. void delay()
  8.    {
  9.      unsigned char i,j;
  10.      for(i=250;i>0;i--)
  11.      {
  12.           for(j=250;j>0;j--);
  13.           }

  14.    }  
  15. void main()
  16.   {
  17.     while(1)
  18.     {
  19.       for(i=0;i<8;i++)
  20.         {
  21.           P2=wela[i] ;
  22.                   
  23.           P0=table[i];
  24.                    delay();
  25.                     delay();
  26.                          delay(); }//第一次依次顯示0--7;
  27.                   for(i=0;i<2;i++)
  28.                   {
  29.                   P2=wela[i];
  30.                   P0=table[8+i];
  31.                   delay();
  32.                   delay();
  33.                          delay();
  34.                   }//循環下來,第一位顯示8,第二位顯示9;
  35.               for(i>=2;i<8;i++)
  36.                             {
  37.                                   P2=wela[i];
  38.                           P0=table[i-2];
  39.                           delay();
  40.                                   delay();
  41.                          delay();
  42.                                 }//從第三位到第八位顯示0--5;
  43.                                    for(i=0;i<4;i++)
  44.                             {
  45.                                P2=wela[i];
  46.                                P0=table[6+i];
  47.                                delay();
  48.                                            delay();
  49.                          delay();
  50.                                            }//繼續從第1位到第四位顯示6--9;
  51.                                            for(i>=4;i<8;i++)
  52.                                              {
  53.                                                          P2=wela[i];
  54.                                     P0=table[i-4];
  55.                                     delay();
  56.                                                         delay();
  57.                          delay();
  58.                                                  }//從第五位到第八位顯示0--3;
  59.                                             for(i=0;i<6;i++)
  60.                                      {
  61.                                         P2=wela[i];
  62.                                         P0=table[4+i];
  63.                                         delay();
  64.                                                                 delay();
  65.                          delay();
  66.                                                     }//從第1位到第六位顯示4--9;
  67.                                                     for(i>=6;i<8;i++)
  68.                                                        {
  69.                                                                   P2=wela[i];
  70.                                              P0=table[i-6];
  71.                                              delay();
  72.                                                                          delay();
  73.                          delay();
  74.                                                            }//從第七位到第八位顯示0和1;
  75.                                                                         for(i=0;i<8;i++)
  76.                                            {
  77.                                                P2=wela[i] ;
  78.                                                                                              P0=table[i+2];
  79.                                                        delay();
  80.                                                        delay();
  81.                                                            delay(); }//從第一位到第八位顯示2--9;完成一個整

  82. 循環。

  83.    }
  84.    }
復制代碼


作者: wulin    時間: 2020-3-27 08:12
添加一個顯示緩存,可以大幅度簡化代碼。
  1. #include "reg52.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint i,j,k;
  5. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段選數字0-9;
  6. uchar code  wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選開關
  7. uchar data dis_buf[11];//顯示緩存
  8. void delay(uint k) //ms延時程序
  9. {
  10.         uint i,j;
  11.         for(i=k;i>0;i--)
  12.                 for(j=120;j>0;j--);
  13. }  
  14. void main()
  15. {
  16.         for(i=0;i<10;i++)
  17.         {//將需要顯示的數字0~9按序保存在顯示緩存中
  18.                 dis_buf[i]=table[i];       
  19.         }
  20.         while(1)
  21.         {
  22.                 P0=0xff;//消隱
  23.                 P2=wela[j];//送位碼
  24.                 P0=dis_buf[j];//送段碼
  25.                 j++;        //數碼管動態顯示計數
  26.                 if(j==8)
  27.                 {
  28.                         j=0;
  29.                         k++;    //更新速度計數
  30.                         if(k==50)//可以調整顯示更新速度
  31.                         {
  32.                                 k=0;
  33.                                 dis_buf[10]=dis_buf[0];//將顯示緩存0移動到10
  34.                                 for(i=0;i<10;i++)
  35.                                 {
  36.                                         dis_buf[i]=dis_buf[i+1];//顯示緩存全部移動一位
  37.                                 }
  38.                         }
  39.                 }
  40.                 delay(2);//控制主循環速度
  41.         }
  42. }
復制代碼

作者: 147035206    時間: 2020-3-27 12:15
wulin 發表于 2020-3-27 08:12
添加一個顯示緩存,可以大幅度簡化代碼。

謝謝您!




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1