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

標題: 單片機數碼管滾動,找不清位選和輸出數碼管的關系,求個程序思路 [打印本頁]

作者: bazingaqzc    時間: 2019-5-14 08:39
標題: 單片機數碼管滾動,找不清位選和輸出數碼管的關系,求個程序思路
用51讓8位數碼管滾動顯示0~f,初始顯示0~7,依次左移,
用到38譯碼器來位選,我找不清位選和輸出數碼管的關系。。。卡了一天了
求大佬給個思路,
作者: wulin    時間: 2019-5-14 08:39
給你一個示例程序,0~F循環左移。


  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. sbit led138c=P2^4;        //38譯碼器位選
  5. sbit led138b=P2^3;         //38譯碼器位選
  6. sbit led138a=P2^2;        //38譯碼器位選

  7. uchar code table[]={        //共陰極數碼管段碼0~F數組
  8.         0x3f,0x06,0x5b,0x4f,
  9.         0x66,0x6d,0x7d,0x07,
  10.         0x7f,0x6f,0x77,0x7c,
  11.         0x39,0x5e,0x79,0x71};

  12. uchar data dis_buf[9];//顯示緩存
  13. /********************************
  14.                         ms延時程序
  15. ********************************/
  16. void delayms(uint k)       
  17. {
  18.         uint i,j;
  19.         for(i=k;i>0;i--)
  20.                 for(j=110;j>0;j--);
  21. }
  22. /********************************
  23.                         移位程序
  24. ********************************/
  25. void shift()
  26. {
  27.         static uint count=0;
  28.         static j=8;
  29.         uchar i;

  30.         if(++count>=500)//移動速度:計數0.5秒
  31.         {                       
  32.                 count=0;       
  33.                 dis_buf[8]=table[j]; //顯示緩存第9位賦值
  34.                 for(i=0;i<8;i++)                //顯示緩存循序移位
  35.                 {
  36.                         dis_buf[i]=dis_buf[i+1];
  37.                 }
  38.                 j++;
  39.                 if(j>15)
  40.                         j=0;
  41.         }
  42. }
  43. /********************************
  44.                 數碼管顯示程序
  45. ********************************/
  46. void display()
  47. {
  48.         static uchar i=0;
  49.         P0=0x00;        //消隱
  50.         switch(i)
  51.         {
  52.                 case 0:led138a=0;led138b=0;led138c=0;break;               
  53.                 case 1:led138a=1;led138b=0;led138c=0;break;       
  54.                 case 2:led138a=0;led138b=1;led138c=0;break;       
  55.                 case 3:led138a=1;led138b=1;led138c=0;break;       
  56.                 case 4:led138a=0;led138b=0;led138c=1;break;       
  57.                 case 5:led138a=1;led138b=0;led138c=1;break;
  58.                 case 6:led138a=0;led138b=1;led138c=1;break;       
  59.                 case 7:led138a=1;led138b=1;led138c=1;break;       
  60.         }
  61.         P0=dis_buf[i];
  62.         i++;
  63.         i%=8;
  64. }
  65. /********************************
  66.                      主程序
  67. ********************************/
  68. void main()
  69. {
  70.         uchar i;
  71.         for(i=0;i<8;i++)//緩存載入初始值
  72.         {
  73.                 dis_buf[i]=table[i];
  74.         }
  75.         while(1)
  76.         {
  77.                 shift();
  78.                 display();
  79.                 delayms(1);
  80.         }
  81. }

復制代碼





作者: 懶懶的627    時間: 2019-5-14 10:43
數碼管的位選是控制8個數碼管亮滅的。段選是控制一個數碼管內部顯示什么數字的。你對應38譯碼器的真值表,應該可以實現數碼管滾動顯示。
作者: 笨笨兔    時間: 2019-5-14 13:01
弄個顯示緩沖區,數碼管就顯示"顯示緩沖區數據".
隔一定時間改變顯示緩沖區數據,就實現了數碼管顯示數字的滾動.
作者: bazingaqzc    時間: 2019-5-14 14:25
懶懶的627 發表于 2019-5-14 10:43
數碼管的位選是控制8個數碼管亮滅的。段選是控制一個數碼管內部顯示什么數字的。你對應38譯碼器的真值表, ...

嗯,謝謝,您說的這些我了解,我卡在了位選和段選的關系上,C語言不過關。難受啊。。
作者: bazingaqzc    時間: 2019-5-15 10:57
wulin 發表于 2019-5-14 15:12
給你一個示例程序,0~F循環左移。

i%=8;。。。。。由衷感謝大佬幫我解惑!!!謝謝謝!!!
作者: bazingaqzc    時間: 2019-5-15 10:59
笨笨兔 發表于 2019-5-14 13:01
弄個顯示緩沖區,數碼管就顯示"顯示緩沖區數據".
隔一定時間改變顯示緩沖區數據,就實現了數碼管顯示數字的 ...

數據處理了后,達不到效果,哈哈哈,我太菜了C語言基礎沒打好,謝謝大佬的解答!




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