找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2553|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)數(shù)碼管滾動(dòng),找不清位選和輸出數(shù)碼管的關(guān)系,求個(gè)程序思路

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
20黑幣
用51讓8位數(shù)碼管滾動(dòng)顯示0~f,初始顯示0~7,依次左移,
用到38譯碼器來(lái)位選,我找不清位選和輸出數(shù)碼管的關(guān)系。。?艘惶炝
求大佬給個(gè)思路,

最佳答案

查看完整內(nèi)容

給你一個(gè)示例程序,0~F循環(huán)左移。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2019-5-14 08:39 | 只看該作者
給你一個(gè)示例程序,0~F循環(huán)左移。


  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[]={        //共陰極數(shù)碼管段碼0~F數(shù)組
  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延時(shí)程序
  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)//移動(dòng)速度:計(jì)數(shù)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.                 數(shù)碼管顯示程序
  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. }

復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

板凳
ID:370657 發(fā)表于 2019-5-14 10:43 | 只看該作者
數(shù)碼管的位選是控制8個(gè)數(shù)碼管亮滅的。段選是控制一個(gè)數(shù)碼管內(nèi)部顯示什么數(shù)字的。你對(duì)應(yīng)38譯碼器的真值表,應(yīng)該可以實(shí)現(xiàn)數(shù)碼管滾動(dòng)顯示。
回復(fù)

使用道具 舉報(bào)

地板
ID:158375 發(fā)表于 2019-5-14 13:01 | 只看該作者
弄個(gè)顯示緩沖區(qū),數(shù)碼管就顯示"顯示緩沖區(qū)數(shù)據(jù)".
隔一定時(shí)間改變顯示緩沖區(qū)數(shù)據(jù),就實(shí)現(xiàn)了數(shù)碼管顯示數(shù)字的滾動(dòng).
回復(fù)

使用道具 舉報(bào)

5#
ID:474216 發(fā)表于 2019-5-14 14:25 | 只看該作者
懶懶的627 發(fā)表于 2019-5-14 10:43
數(shù)碼管的位選是控制8個(gè)數(shù)碼管亮滅的。段選是控制一個(gè)數(shù)碼管內(nèi)部顯示什么數(shù)字的。你對(duì)應(yīng)38譯碼器的真值表, ...

嗯,謝謝,您說(shuō)的這些我了解,我卡在了位選和段選的關(guān)系上,C語(yǔ)言不過(guò)關(guān)。難受啊。。
回復(fù)

使用道具 舉報(bào)

6#
ID:474216 發(fā)表于 2019-5-15 10:57 | 只看該作者
wulin 發(fā)表于 2019-5-14 15:12
給你一個(gè)示例程序,0~F循環(huán)左移。

i%=8;。。。。。由衷感謝大佬幫我解惑。!謝謝謝!!
回復(fù)

使用道具 舉報(bào)

7#
ID:474216 發(fā)表于 2019-5-15 10:59 | 只看該作者
笨笨兔 發(fā)表于 2019-5-14 13:01
弄個(gè)顯示緩沖區(qū),數(shù)碼管就顯示"顯示緩沖區(qū)數(shù)據(jù)".
隔一定時(shí)間改變顯示緩沖區(qū)數(shù)據(jù),就實(shí)現(xiàn)了數(shù)碼管顯示數(shù)字的 ...

數(shù)據(jù)處理了后,達(dá)不到效果,哈哈哈,我太菜了C語(yǔ)言基礎(chǔ)沒(méi)打好,謝謝大佬的解答!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表