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

QQ登錄

只需一步,快速開始

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

我的單片機(jī)流水燈程序不知道為什么無法很好的顯示?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:972866 發(fā)表于 2021-10-17 23:24 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 sophist 于 2021-10-18 09:05 編輯

剛學(xué)51,按郭天祥的那本紅書和那個(gè)配套的單片機(jī)做的,芯片是89C52RC
具體就是我剛學(xué)流水燈,然后自己寫了一個(gè)程序,我想讓一共六個(gè)數(shù)碼管輪流顯示0——9,a——f的功能,就是第一個(gè)顯示1,第二個(gè)顯示2,這樣輪流下去,第六個(gè)管子顯5,第一個(gè)顯6,這樣輪下去。

接下來是一些問題
① 不太明白為什么前面4個(gè)數(shù)碼管總是一起變化,后兩個(gè)數(shù)碼管卻可以單獨(dú)變化,

②有時(shí)候數(shù)碼管會(huì)顯示錯(cuò)誤,這里本應(yīng)該顯示8的,包括后面字符的顯示也有很多有問題。有時(shí)候能顯示0,有時(shí)候又不能了

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. sbit dula=P2^6;  //送段選數(shù)據(jù)的那個(gè)鎖存端,對(duì)應(yīng)U1鎖存器(后面有圖)
  4. sbit wela=P2^7;   //送位選數(shù)據(jù)的鎖存端,對(duì)應(yīng)U2鎖存器
  5. unsigned char code table[]={0X3F,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,0X77,0X7c,0X39,0X5e,0X79,0X71};                                          unsigned char aa;            //  ↑這個(gè)是數(shù)碼管的字母表,分別實(shí)現(xiàn)0—9,a--f的字符顯示,下面的變量j與之對(duì)應(yīng)。
  6. void delayms(unsigned int xms);    //實(shí)現(xiàn)延遲

  7. void main()
  8. {
  9.         unsigned int i=0,j=0;
  10. while(1)
  11. {
  12.          aa=0XFE;            //每次for語句前重啟aa地址
  13.          for(i=0;i<6;i++)
  14.          {
  15.                  dula=1;                 
  16.                  P0=table[j++];  
  17.                 dula=0;
  18.                  P0=0Xff;

  19.                  wela=1;
  20.                  P0=aa;     //共陰極接法,0的時(shí)候?qū)?yīng)的數(shù)碼管亮
  21.                  wela=0;
  22.                  aa=_crol_(aa,1);                 
  23.                  delayms(1000);
  24.          }
  25. if(j>15)
  26.          j=0;         //防j越界
  27. }
  28. }
  29. void delayms(unsigned int xms)
  30. {unsigned int p,q;
  31.         for(p=xms;p>0;p--)
  32.         for(q=110;q>0;q--);
  33. }
復(fù)制代碼


圖1.jpg (1.26 MB, 下載次數(shù): 83)

前四個(gè)管子一起顯示數(shù)字

前四個(gè)管子一起顯示數(shù)字

圖2.jpg (1.21 MB, 下載次數(shù): 87)

后兩個(gè)管子可以單獨(dú)顯示數(shù)字

后兩個(gè)管子可以單獨(dú)顯示數(shù)字

圖3.jpg (1.18 MB, 下載次數(shù): 89)

本該是8的

本該是8的

4572322a14f352f114b63ea80f55d51.jpg (1.03 MB, 下載次數(shù): 86)

書上的電路

書上的電路
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:956872 發(fā)表于 2021-10-18 07:39 來自手機(jī) | 只看該作者
給你推薦bilibili 金善愚老師的視頻,我是跟他視頻自學(xué)的。 先點(diǎn)亮一個(gè),一個(gè)的程序理順了,多個(gè)也跟一個(gè)一樣
回復(fù)

使用道具 舉報(bào)

板凳
ID:332444 發(fā)表于 2021-10-18 08:28 | 只看該作者
本帖最后由 xianfajushi 于 2021-10-18 16:43 編輯

如果按每6個(gè)顯示的話,數(shù)組個(gè)數(shù)是希望分3次顯示還是分2次顯示?分3次顯示顯然數(shù)組個(gè)數(shù)不足,不足的部分就要另外處理,第一次顯示后切換下一次顯示應(yīng)該按6步進(jìn)才對(duì).
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2021-10-18 08:50 | 只看該作者
天祥板子只有6位數(shù)碼管,樓主初學(xué)單片機(jī)寫這個(gè)程序有點(diǎn)難度。給你稍改一下基本可以滿足設(shè)計(jì)目標(biāo)。
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. sbit dula=P2^6;  //送段選數(shù)據(jù)的那個(gè)鎖存端,對(duì)應(yīng)U1鎖存器(后面有圖)
  4. sbit wela=P2^7;   //送位選數(shù)據(jù)的鎖存端,對(duì)應(yīng)U2鎖存器
  5. unsigned char code table[]={//數(shù)碼管字庫
  6. //         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  7.         0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  8. //   H    J          K         L           N          o    P            U
  9.    0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E};
  10. unsigned char aa;//  ↑這個(gè)是數(shù)碼管的字母表,分別實(shí)現(xiàn)0—9,a--f的字符顯示,雖然我實(shí)在不明白a 怎么顯示。。。
  11. void delayms(unsigned int xms);    //實(shí)現(xiàn)延遲

  12. void main()
  13. {
  14.         unsigned int i=0,j=0;
  15.         while(1)
  16.         {
  17. //                aa=0XFE;            //每次for語句前重啟aa地址
  18. //                for(i=0;i<16;i++)
  19. //                {
  20.                         dula=1;                 
  21.                         P0=table[i];  
  22.                         dula=0;
  23. //                        P0=0Xff;
  24.        
  25.                         aa=~(0x01<<i%6);
  26.                         wela=1;
  27.                         P0=aa;     //共陰極接法,0的時(shí)候?qū)?yīng)的數(shù)碼管亮
  28.                         wela=0;
  29.                         delayms(1000);
  30.                         i=++i%24;
  31. //                        aa=_crol_(aa,1);                 

  32. //                }
  33. //                if(j>15)
  34. //                        j=0;         //防j越界
  35.         }
  36. }
  37. void delayms(unsigned int xms)
  38. {
  39.         unsigned int p,q;
  40.         for(p=xms;p>0;p--)
  41.                 for(q=110;q>0;q--);
  42. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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