久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9591|回復: 24
打印 上一主題 下一主題
收起左側

怎么實現用51單片機3個I/O口顯示8位數碼管?有代碼但看不懂,求教。

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

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

  7. typedef unsigned int u16;          //對數據類型進行聲明定義
  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. * 函 數 名         : delay
  16. * 函數功能                   : 延時函數,i=1時,大約延時10us
  17. *******************************************************************************/
  18. void delay(u16 i)
  19. {
  20.         while(i--);        
  21. }

  22. /*******************************************************************************
  23. * 函 數 名         : DigDisplay
  24. * 函數功能                   : 數碼管動態掃描函數,循環掃描8個數碼管顯示
  25. *******************************************************************************/
  26. void DigDisplay()
  27. {
  28.         u8 i;
  29.         for(i=0;i<8;i++)
  30.         {
  31.                 switch(i)         //位選,選擇點亮的數碼管,(主要就是這里看不懂,3個I/O口是怎樣控制8位數顯示的)
  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];//發送段碼
  51.                 delay(100); //間隔一段時間掃描        
  52.                 P0=0x00;//消隱
  53.         }
  54. }

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

實驗6:動態數碼管顯示.rar

17.05 KB, 下載次數: 13

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

使用道具 舉報

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

使用道具 舉報

板凳
ID:453974 發表于 2019-9-27 23:19 | 只看該作者
這個是位選端用的74HC138譯碼器驅動的,另外的數據端使用P0口進行的數據傳送,當位選通時,輸入對應數據。
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

6#
ID:462827 發表于 2019-9-28 00:59 | 只看該作者
3個引腳通過74HC138譯碼器來進行位選唄
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

14#
ID:94031 發表于 2019-9-28 08:50 | 只看該作者
要看懂這程序,先要弄清楚數碼管顯示一個數的原理,就是公共端導通時,段碼要送相應碼。
回復

使用道具 舉報

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

使用道具 舉報

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

8位數碼管 按順序先亮第一個再第二個再最后一個
循環的速度很快
看起來就是一起亮的

回復

使用道具 舉報

17#
ID:294737 發表于 2019-9-28 09:43 | 只看該作者
網上視頻很多,可以看看
回復

使用道具 舉報

18#
ID:617572 發表于 2019-9-28 13:55 | 只看該作者
這個要通過74LS138譯碼器來實現I/O口對數碼管的控制
回復

使用道具 舉報

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

使用道具 舉報

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

回復

使用道具 舉報

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

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

HC595 是八位元個移位暫存器,其目的是將串列傳輸的值,轉換為並列傳輸,減少資料線,以數碼管為例接A~G角位,要解釋這個需要的是時序圖 


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並行資料輸出,例如街數碼管的8個腳位。
  • QH′:串聯輸出端,與下一個74HC595的DS相連,實現多個595晶片之間的串聯
  • 輸入
  • DS:序列資料,也就是你要傳出的值
  • SH_CP:移位暫存器的時序輸入。上升沿時移位暫存器中的資料依次移動一位元,即Q0中的資料移到Q1中,Q1中的資料移到Q2中,依次類推;下降沿時移位暫存器中的資料保持不變。
  • ST_CP:存儲寄存器的時序輸入。上升沿時移位暫存器中的資料進入存儲寄存器,下降沿時存儲寄存器中的資料保持不變。應用時通常將ST_CP置為低點平,移位結束後再在ST_CP端產生一個正脈衝更新顯示資料。
  • MR:重置(RESET),低電平時將移位暫存器中的資料清零.
  • OE:輸出允許,高電平時禁止輸出(高阻態)


回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一级黄色片 | 成人在线精品视频 | 男人天堂手机在线视频 | 精品视频在线播放 | 精品一区二区三区四区在线 | 玖操| 国产亚洲一区二区三区在线观看 | 99re6热在线精品视频播放 | 国产精品久久久久久婷婷天堂 | 国产精品美女久久久久久不卡 | 第一福利社区1024 | 一级一级毛片免费看 | 亚洲精品视频在线 | 成人精品一区二区三区 | 日本在线精品视频 | 成人在线视频免费观看 | 中文字幕91 | 91久久精品国产91久久 | 一区二区三区精品在线视频 | 免费观看黄色一级片 | 黑人巨大精品欧美一区二区免费 | 国产欧美精品一区二区色综合朱莉 | 国产精品不卡一区 | 欧美精品1区2区 | 91中文 | 国产乱精品一区二区三区 | 亚洲精品久久久 | 亚洲一区二区三区高清 | 久久免费香蕉视频 | 精品一区免费 | 精品欧美激情在线观看 | 成人在线精品视频 | 毛片一区二区三区 | 在线观看深夜视频 | 国产福利网站 | 精品一区二区三区91 | 国产高清精品一区 | 精品成人av | 亚洲影音先锋 | 国产精品二区三区在线观看 | 精品中文视频 |