找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

怎么實(shí)現(xiàn)用51單片機(jī)3個(gè)I/O口顯示8位數(shù)碼管?有代碼但看不懂,求教。

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  1. /**************************************************************************************
  2. *                              動(dòng)態(tài)數(shù)碼管顯示實(shí)驗(yàn)                                                                                                  *
  3. 實(shí)現(xiàn)現(xiàn)象:下載程序后數(shù)碼管從右至左顯示0-7。
  4. 注意事項(xiàng):如果不想讓點(diǎn)陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。                                                                                                                                                                  
  5. ***************************************************************************************/

  6. #include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

  7. typedef unsigned int u16;          //對數(shù)據(jù)類型進(jìn)行聲明定義
  8. typedef unsigned char u8;

  9. sbit LSA=P2^2;
  10. sbit LSB=P2^3;
  11. sbit LSC=P2^4;

  12. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  13.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值

  14. /*******************************************************************************
  15. * 函 數(shù) 名         : delay
  16. * 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
  17. *******************************************************************************/
  18. void delay(u16 i)
  19. {
  20.         while(i--);        
  21. }

  22. /*******************************************************************************
  23. * 函 數(shù) 名         : DigDisplay
  24. * 函數(shù)功能                   : 數(shù)碼管動(dòng)態(tài)掃描函數(shù),循環(huán)掃描8個(gè)數(shù)碼管顯示
  25. *******************************************************************************/
  26. void DigDisplay()
  27. {
  28.         u8 i;
  29.         for(i=0;i<8;i++)
  30.         {
  31.                 switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,(主要就是這里看不懂,3個(gè)I/O口是怎樣控制8位數(shù)顯示的)
  32.                 {
  33.                         case(0):
  34.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  35.                         case(1):
  36.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  37.                         case(2):
  38.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  39.                         case(3):
  40.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  41.                         case(4):
  42.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  43.                         case(5):
  44.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  45.                         case(6):
  46.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  47.                         case(7):
  48.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位        
  49.                 }
  50.                 P0=smgduan[i];//發(fā)送段碼
  51.                 delay(100); //間隔一段時(shí)間掃描        
  52.                 P0=0x00;//消隱
  53.         }
  54. }

  55. /*******************************************************************************
  56. * 函 數(shù) 名       : main
  57. * 函數(shù)功能                 : 主函數(shù)
  58. * 輸    入       : 無
  59. * 輸    出             : 無
  60. *******************************************************************************/
  61. void main()
  62. {        
  63.         while(1)
  64.         {        
  65.                 DigDisplay();  //數(shù)碼管顯示函數(shù)        
  66.         }               
  67. }
復(fù)制代碼

實(shí)驗(yàn)6:動(dòng)態(tài)數(shù)碼管顯示.rar

17.05 KB, 下載次數(shù): 13

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

使用道具 舉報(bào)

沙發(fā)
ID:351097 發(fā)表于 2019-9-27 23:01 | 只看該作者
數(shù)碼管的選通是用譯碼器控制的,比如74HC138,只要三個(gè)地址輸入,就可以控制哪個(gè)數(shù)碼管選通
回復(fù)

使用道具 舉報(bào)

板凳
ID:453974 發(fā)表于 2019-9-27 23:19 | 只看該作者
這個(gè)是位選端用的74HC138譯碼器驅(qū)動(dòng)的,另外的數(shù)據(jù)端使用P0口進(jìn)行的數(shù)據(jù)傳送,當(dāng)位選通時(shí),輸入對應(yīng)數(shù)據(jù)。
回復(fù)

使用道具 舉報(bào)

地板
ID:425825 發(fā)表于 2019-9-27 23:21 | 只看該作者
采用了74LS138, 3線-8線譯碼器
回復(fù)

使用道具 舉報(bào)

5#
ID:149144 發(fā)表于 2019-9-27 23:22 | 只看該作者
三個(gè)位碼 不是直接控制的 數(shù)碼管,應(yīng)該是 通過 3-8 譯碼器 將000 --- 111 轉(zhuǎn)換成 0000 0001 --- 1000 0000
百度  74138
如果想用三根線 個(gè)人建議用 74595
回復(fù)

使用道具 舉報(bào)

6#
ID:462827 發(fā)表于 2019-9-28 00:59 | 只看該作者
3個(gè)引腳通過74HC138譯碼器來進(jìn)行位選唄
回復(fù)

使用道具 舉報(bào)

7#
ID:235200 發(fā)表于 2019-9-28 02:10 | 只看該作者
程序只用到兩個(gè)IO口,P0和P2口,P0輸出段顯碼,P2的3位輸出到74138進(jìn)行譯碼進(jìn)行位選,每次選中8位數(shù)碼管的1位,輪流使每1位數(shù)碼管顯示2ms左右達(dá)到掃描顯示
回復(fù)

使用道具 舉報(bào)

8#
ID:617327 發(fā)表于 2019-9-28 02:14 | 只看該作者
可以看一下開發(fā)板原理圖嗎
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2019-9-28 05:35 | 只看該作者
本帖最后由 wulin 于 2019-9-28 10:12 編輯

利用38譯碼器74HC138輸入二進(jìn)制輸入000~111,輪流輸出11111110~01111111八位驅(qū)動(dòng)低電平
你可以把顯示函數(shù)DigDisplay()里的“delay(100); //間隔一段時(shí)間掃描”改為10000,在低速下觀察動(dòng)態(tài)掃描過程
回復(fù)

使用道具 舉報(bào)

10#
ID:332444 發(fā)表于 2019-9-28 06:49 | 只看該作者
https://baike.baidu.com/item/譯碼器/4882151 注釋很清楚,蝦米不懂沒說出來?3個(gè)口分別控制8位數(shù)碼管通過譯碼器,P0送數(shù)碼管的段。
回復(fù)

使用道具 舉報(bào)

11#
ID:332444 發(fā)表于 2019-9-28 06:59 | 只看該作者
電路圖?發(fā)出電路圖看看。
回復(fù)

使用道具 舉報(bào)

12#
ID:86450 發(fā)表于 2019-9-28 08:11 | 只看該作者
你后面可能接了 38譯碼器。 你要看硬件電路,而不是程序。
回復(fù)

使用道具 舉報(bào)

13#
ID:586438 發(fā)表于 2019-9-28 08:47 | 只看該作者
2的3次方 ,3個(gè)IO口可以檢測出八種不同的狀態(tài),每個(gè)狀態(tài)控制一個(gè)位選信號(hào)。
回復(fù)

使用道具 舉報(bào)

14#
ID:94031 發(fā)表于 2019-9-28 08:50 | 只看該作者
要看懂這程序,先要弄清楚數(shù)碼管顯示一個(gè)數(shù)的原理,就是公共端導(dǎo)通時(shí),段碼要送相應(yīng)碼。
回復(fù)

使用道具 舉報(bào)

15#
ID:544092 發(fā)表于 2019-9-28 08:55 | 只看該作者
硬件電路上有74LS138之類的譯碼器,3線-8線
回復(fù)

使用道具 舉報(bào)

16#
ID:155507 發(fā)表于 2019-9-28 09:02 | 只看該作者
74138譯碼器控制的數(shù)碼管
這個(gè)數(shù)字芯片屬于3線-8線譯碼器,輸入3位,輸出8位。
因?yàn)?位2進(jìn)制數(shù)可以組成8個(gè)狀態(tài),即000,001,010,011,100,101,110,111。然后沒一種狀態(tài)的輸出是唯一的,8位輸出中有一位為0。舉個(gè)例子:輸入假如輸入為000,那么輸出就是01111111,假如數(shù)碼管是共陽型,這時(shí)第一位數(shù)碼管就被點(diǎn)亮;假如輸入為001,那么輸出就是10111111,
這時(shí)點(diǎn)亮的數(shù)碼管就是第二位了;以此類推,輸入010時(shí)輸出就為11011111……一直到輸入111,輸出11111110。
就是這8種組合。

8位數(shù)碼管 按順序先亮第一個(gè)再第二個(gè)再最后一個(gè)
循環(huán)的速度很快
看起來就是一起亮的

回復(fù)

使用道具 舉報(bào)

17#
ID:294737 發(fā)表于 2019-9-28 09:43 | 只看該作者
網(wǎng)上視頻很多,可以看看
回復(fù)

使用道具 舉報(bào)

18#
ID:617572 發(fā)表于 2019-9-28 13:55 | 只看該作者
這個(gè)要通過74LS138譯碼器來實(shí)現(xiàn)I/O口對數(shù)碼管的控制
回復(fù)

使用道具 舉報(bào)

19#
ID:529540 發(fā)表于 2019-9-28 15:34 | 只看該作者
也可以用專門的led驅(qū)動(dòng)芯片, tm1628 之類的,也是3個(gè)io口控制,可以控制很多數(shù)碼管或led燈
回復(fù)

使用道具 舉報(bào)

20#
ID:575020 發(fā)表于 2019-10-4 10:32 | 只看該作者
怎么上面都推薦74ls138,我買了幾個(gè)74hc138,不知有啥不一樣,還買了幾個(gè)595也不知道咋用呢

回復(fù)

使用道具 舉報(bào)

21#
ID:619205 發(fā)表于 2019-10-5 03:46 | 只看該作者
關(guān)於原主題的問題,要回答這跟問題還是得看你的開發(fā)版,依據(jù)程式碼來看,他有很大的可能是使用了編碼器.這你可以找出你的開發(fā)版的資料手冊,來看看它到底是則麼做的,如果使用的是編碼,它的原理我和  singrain 的問題一起解答74ls138 HC595是完全不同的東西使用的目的也不一樣,要解釋這兩個(gè)的區(qū)別,最好還是看它們的資料手冊.

74ls138 是3對8編碼器主要是用來選擇位址,使用編碼器的主要目的,是在有許多元件時(shí),可以只通過N調(diào)控制線,控制2^n不同的器件,減少控制線,你可以把它當(dāng)成開關(guān)來看待,解釋這個(gè)最快的方式就是上真值表
可以在真值表中看出  74ls138 在使用終將使能角位,以HLL接好後(在電路直接接好就行),可以通過C,B,A 三個(gè)角位來控制對應(yīng)輸出為低準(zhǔn)位 000 對應(yīng) Y0 , 001 對應(yīng)Y1  ,010 對應(yīng)  ,Y2  011對應(yīng)Y3 以此類推
,而其他沒有被選擇的輸出都為高準(zhǔn)位.
如果你的器件是低準(zhǔn)位有響應(yīng)你就可以使用74ls138來擴(kuò)充你的位址.數(shù)碼管為例便是共陰極的共同端
, 另外如果你打算使用串利傳輸 可以將G1A與G1B邊連起來當(dāng)作資料線,這樣你就能控制他的輸出高底準(zhǔn)位,而沒有被選中的位址
依然維持高準(zhǔn)位.

HC595 是八位元個(gè)移位暫存器,其目的是將串列傳輸?shù)闹,轉(zhuǎn)換為並列傳輸,減少資料線,以數(shù)碼管為例接A~G角位,要解釋這個(gè)需要的是時(shí)序圖 


PINS 1-7, 15QA " QHOutput Pins
PIN 8GNDGround, Vss
PIN 9QH"Serial Out
PIN 10MRMaster Reclear, active low
PIN 11SH_CPShift register clock pin
PIN 12ST_CPStorage register clock pin (latch pin)
PIN 13OEOutput enable, active low
PIN 14DSSerial data input
PIN 16VccPositive supply voltage
  • 輸出
  • Q0~Q7:8bit並行資料輸出,例如街?jǐn)?shù)碼管的8個(gè)腳位。
  • QH′:串聯(lián)輸出端,與下一個(gè)74HC595的DS相連,實(shí)現(xiàn)多個(gè)595晶片之間的串聯(lián)
  • 輸入
  • DS:序列資料,也就是你要傳出的值
  • SH_CP:移位暫存器的時(shí)序輸入。上升沿時(shí)移位暫存器中的資料依次移動(dòng)一位元,即Q0中的資料移到Q1中,Q1中的資料移到Q2中,依次類推;下降沿時(shí)移位暫存器中的資料保持不變。
  • ST_CP:存儲(chǔ)寄存器的時(shí)序輸入。上升沿時(shí)移位暫存器中的資料進(jìn)入存儲(chǔ)寄存器,下降沿時(shí)存儲(chǔ)寄存器中的資料保持不變。應(yīng)用時(shí)通常將ST_CP置為低點(diǎn)平,移位結(jié)束後再在ST_CP端產(chǎn)生一個(gè)正脈衝更新顯示資料。
  • MR:重置(RESET),低電平時(shí)將移位暫存器中的資料清零.
  • OE:輸出允許,高電平時(shí)禁止輸出(高阻態(tài))


回復(fù)

使用道具 舉報(bào)

22#
ID:618842 發(fā)表于 2019-10-6 15:05 | 只看該作者
你可以百度搜一下38譯碼器  3個(gè)io口控制八個(gè)  原理就是  給這三個(gè)口不同的電平  剛好就是 8個(gè)
回復(fù)

使用道具 舉報(bào)

23#
ID:591676 發(fā)表于 2019-10-6 17:33 | 只看該作者
需要使用譯碼器,比如74h138或者其他的但是要注意帶電平類型
回復(fù)

使用道具 舉報(bào)

24#
ID:524818 發(fā)表于 2019-10-6 18:21 | 只看該作者
樓上說的都對,是通過38譯碼器實(shí)現(xiàn)三根線控制8種狀態(tài),以實(shí)現(xiàn)數(shù)碼管顯示內(nèi)容
回復(fù)

使用道具 舉報(bào)

25#
ID:555516 發(fā)表于 2019-10-7 14:39 | 只看該作者
好的  謝謝各位的解答了   問題已經(jīng)解決了  用3-8線譯碼器就可以了。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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