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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9681|回復: 24
收起左側

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

  [復制鏈接]
ID:555516 發表于 2019-9-27 22:31 | 顯示全部樓層 |閱讀模式
  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

回復

使用道具 舉報

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線譯碼器
回復

使用道具 舉報

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

使用道具 舉報

ID:462827 發表于 2019-9-28 00:59 | 顯示全部樓層
3個引腳通過74HC138譯碼器來進行位選唄
回復

使用道具 舉報

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

使用道具 舉報

ID:617327 發表于 2019-9-28 02:14 | 顯示全部樓層
可以看一下開發板原理圖嗎
回復

使用道具 舉報

ID:213173 發表于 2019-9-28 05:35 | 顯示全部樓層
本帖最后由 wulin 于 2019-9-28 10:12 編輯

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

使用道具 舉報

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

使用道具 舉報

ID:332444 發表于 2019-9-28 06:59 | 顯示全部樓層
電路圖?發出電路圖看看。
回復

使用道具 舉報

ID:86450 發表于 2019-9-28 08:11 | 顯示全部樓層
你后面可能接了 38譯碼器。 你要看硬件電路,而不是程序。
回復

使用道具 舉報

ID:586438 發表于 2019-9-28 08:47 | 顯示全部樓層
2的3次方 ,3個IO口可以檢測出八種不同的狀態,每個狀態控制一個位選信號。
回復

使用道具 舉報

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

使用道具 舉報

ID:544092 發表于 2019-9-28 08:55 | 顯示全部樓層
硬件電路上有74LS138之類的譯碼器,3線-8線
回復

使用道具 舉報

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位數碼管 按順序先亮第一個再第二個再最后一個
循環的速度很快
看起來就是一起亮的

回復

使用道具 舉報

ID:294737 發表于 2019-9-28 09:43 | 顯示全部樓層
網上視頻很多,可以看看
回復

使用道具 舉報

ID:617572 發表于 2019-9-28 13:55 | 顯示全部樓層
這個要通過74LS138譯碼器來實現I/O口對數碼管的控制
回復

使用道具 舉報

ID:529540 發表于 2019-9-28 15:34 | 顯示全部樓層
也可以用專門的led驅動芯片, tm1628 之類的,也是3個io口控制,可以控制很多數碼管或led燈
回復

使用道具 舉報

ID:575020 發表于 2019-10-4 10:32 | 顯示全部樓層
怎么上面都推薦74ls138,我買了幾個74hc138,不知有啥不一樣,還買了幾個595也不知道咋用呢

未標題-1.gif
回復

使用道具 舉報

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

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

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

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:輸出允許,高電平時禁止輸出(高阻態)


回復

使用道具 舉報

ID:618842 發表于 2019-10-6 15:05 | 顯示全部樓層
你可以百度搜一下38譯碼器  3個io口控制八個  原理就是  給這三個口不同的電平  剛好就是 8個
回復

使用道具 舉報

ID:591676 發表于 2019-10-6 17:33 | 顯示全部樓層
需要使用譯碼器,比如74h138或者其他的但是要注意帶電平類型
回復

使用道具 舉報

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

使用道具 舉報

ID:555516 發表于 2019-10-7 14:39 | 顯示全部樓層
好的  謝謝各位的解答了   問題已經解決了  用3-8線譯碼器就可以了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99reav| 农村真人裸体丰满少妇毛片 | 国产日韩精品在线 | 久久久久99 | 韩日一区二区 | 视频在线一区二区 | 亚洲精品综合一区二区 | 国产成在线观看免费视频 | 五月激情久久 | 91九色网站| 精品视频久久久久久 | 成年人在线播放 | 欧美中文视频 | 亚洲精品久久久一区二区三区 | 色噜噜亚洲男人的天堂 | 国产精品久久久久久久久久免费看 | 日韩精品一区二区三区中文字幕 | 在线一区二区三区 | 国产亚洲欧美在线 | 精品美女 | 最新国产福利在线 | 国产精品99久久久精品免费观看 | av网站免费观看 | 日本在线视频一区二区 | 特a毛片 | 国产亚洲精品a | 免费视频久久久久 | 天天操夜夜看 | 毛片免费观看 | 免费视频二区 | av黄色免费在线观看 | 精品视频久久久久久 | h视频在线免费 | 国产精品成人久久久久 | 一区二区福利视频 | 欧美日韩免费视频 | 国产精品一区三区 | 欧美日韩精品专区 | 黄色国产视频 | 激情91| 午夜小电影 |