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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+4位數碼管怎么驅動合理?

  [復制鏈接]
跳轉到指定樓層
樓主
各位好:4位數碼管怎么驅動合理呢?我是按照普中A2開發板原理圖焊了一個電路,是可以運行的。但他是用了2個4位共陰數碼管,用了74H245八線雙向收發器接P0口,74HC138接P2.2,P2.3,P2.4,實現3個IO控制8位數碼管陽極的功能。

我的問題是,在我的電路中只用了1個4位的數碼管,也需要加38譯碼器嗎?假如數碼管的陽極直連單片機4個IO口可以嗎,還是每路需要加三極管驅動?若加三極管也可以,那跟38譯碼器的方案相比哪個成本和穩定性上更有優勢呢(畢竟一個38譯碼器價格也不貴)?再或者我考慮換個別的IC驅動數碼管陰極?

我也查了以前的帖子,有很多電路仿真都是單片機和數碼管直連的,也有人說沒問題可以驅動,可我這是實際項目,跟仿真一樣處理可行嗎?是不是無論怎樣都要用個器件隔離單片機和數碼管,以免兩者互相影響?


第一次做項目,太多的問題,請大家不吝賜教。


        

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

使用道具 舉報

沙發
ID:624769 發表于 2022-10-2 18:21 來自觸屏版 | 只看該作者
用tm1650吧,兩個io就可以了。限流電阻都省了。
回復

使用道具 舉報

板凳
ID:332444 發表于 2022-10-2 20:53 | 只看該作者
硬件基礎差了點,正確應該查單片機IO驅動電流,看描述未觸及問題根本。
回復

使用道具 舉報

地板
ID:1044091 發表于 2022-10-2 21:07 | 只看該作者
188610329 發表于 2022-10-2 18:21
用tm1650吧,兩個io就可以了。限流電阻都省了。

感謝指點,我這就去查資料。
我本來想89C52的IO這么多,用不上也得閑著,現在看來可以再找款IO少的MCU了。
回復

使用道具 舉報

5#
ID:88256 發表于 2022-10-2 21:23 | 只看該作者
188610329 發表于 2022-10-2 18:21
用tm1650吧,兩個io就可以了。限流電阻都省了。

是啊,還帶按鍵處理功能,還能調亮度的
回復

使用道具 舉報

6#
ID:57657 發表于 2022-10-2 21:52 | 只看該作者
IO口配置為強推挽即可直接驅動 (STC89、90除外)
回復

使用道具 舉報

7#
ID:997011 發表于 2022-10-3 07:00 | 只看該作者
ningsy 發表于 2022-10-2 21:07
感謝指點,我這就去查資料。
我本來想89C52的IO這么多,用不上也得閑著,現在看來可以再找款IO少的MCU了 ...

最簡單低成本就用公陰4位數碼管和一只1K排阻就能驅動,因為現在的數碼管都是高亮的2,3毫安就很亮了。
回復

使用道具 舉報

8#
ID:213173 發表于 2022-10-3 07:56 | 只看該作者
設計學習(開發)板的目的是讓初學者用有限的資源學習掌握更多的外圍硬件操控。但就某一項功能而言,學習板上的硬件配置未必是最佳。MCU的IO口輸出能力畢竟有限,直接驅動數碼管等其它功耗器件有點不堪重負,74H245、74HC138等外圍IC既可以提高驅動力,又可以擴展應用范圍。仿真只要邏輯正確基本都能成功。與實際電路還是有較大差距。做實際項目首先要考慮安全、可靠。玩具、民用、工控及醫療電器的行業安全標準不同,設計方案選擇有所區別。高規格產品還要考慮冗余、抗擾、容錯。單就怎么合理驅動4位數碼管而言,使用專用集成電路TM1650的方案較佳,還能附加16個按鍵。當然MCU直接驅動數碼管,只要在設計、選材和軟件上用點心也完全可能。
回復

使用道具 舉報

9#
ID:1044091 發表于 2022-10-3 10:24 | 只看該作者
xianfajushi 發表于 2022-10-2 20:53
硬件基礎差了點,正確應該查單片機IO驅動電流,看描述未觸及問題根本。

有道理,還沒怎么想過驅動電流這個問題。
回復

使用道具 舉報

10#
ID:1044091 發表于 2022-10-3 10:26 | 只看該作者
npn 發表于 2022-10-2 21:52
IO口配置為強推挽即可直接驅動 (STC89、90除外)

總是看到“強推挽”這種用法,一直沒弄明白具體怎么用,原來是我的STC89C52不支持啊
回復

使用道具 舉報

11#
ID:1044091 發表于 2022-10-3 11:02 | 只看該作者
lwq1947 發表于 2022-10-3 07:00
最簡單低成本就用公陰4位數碼管和一只1K排阻就能驅動,因為現在的數碼管都是高亮的2,3毫安就很亮了。

這個應該要整體考慮程序、單片機、數碼管的選型匹配吧!我這方面的功力還不夠,客戶端的環境和用戶習慣千差萬別,如果一旦客戶抱怨(我能想到的:比如亮度不夠,抗干擾不行等等)就很麻煩了。
回復

使用道具 舉報

12#
ID:1044091 發表于 2022-10-3 11:10 | 只看該作者
wulin 發表于 2022-10-3 07:56
設計學習(開發)板的目的是讓初學者用有限的資源學習掌握更多的外圍硬件操控。但就某一項功能而言,學習板 ...

綜合您和以上老師的建議,我決定采用TM1650的方案驅動。還有一種AIP650應該是同一種IC,我在論壇里已經找到了這兩種IC的驅動代碼和原理圖,下一步準備買元件來測試了。
非常感謝!






回復

使用道具 舉報

13#
ID:88256 發表于 2022-10-3 12:39 | 只看該作者
ningsy 發表于 2022-10-3 11:10
綜合您和以上老師的建議,我決定采用TM1650的方案驅動。還有一種AIP650應該是同一種IC,我在論壇里已經找 ...

TM1650用的地方很多,很可能你拆一個電磁爐的控制板就是用的TM1650
回復

使用道具 舉報

14#
ID:16255 發表于 2022-10-3 15:18 | 只看該作者
TM1650驅動,使用51單片機。
  1. /*--------------------------------------------------------------------------
  2. TM1650.H
  3. 四位數碼管驅動 TM1650 讀寫程序
  4. --------------------------------------------------------------------------*/
  5. #ifndef __TM1650_H__
  6. #define __TM1650_H__

  7. sbit CLK = P3^7;
  8. sbit DIO = P3^6;

  9. void Set1650(uchar add,uchar dat);
  10. uchar Scan_Key(void);

  11. uchar BL = 1;          //亮度等級
  12. uchar CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9顯示代碼
  13.                                 // 0    1    2    3    4    5    6    7    8    9

  14. void Init1650(){
  15.         Set1650(0x48,(BL*16+0x01));//設定亮度,開顯示八段顯示方式,后一個字節中高位用于亮度,低位用于七段或八段顯示方式和開關顯
  16.                                                                 //如:0x71為七級亮度,八段顯示方式,開顯示;0x79為為七級亮度,七段顯示方式,開顯示
  17. }

  18. void Delay_us(uint i){ //us延時
  19.         for(;i>0;i--){
  20.                 _nop_();
  21.                 _nop_();
  22.                 _nop_();
  23.                 _nop_();
  24.                 _nop_();
  25.         }
  26. }

  27. void Start1650(void){//開始信號
  28.         CLK = 1;
  29.         DIO = 1;
  30.         Delay_us(5);
  31.         DIO = 0;
  32. }

  33. void Ask1650(void){ //ACK信號
  34.         uchar timeout = 1;
  35.         CLK = 1;
  36.         Delay_us(5);
  37.         CLK = 0;
  38.         while((DIO)&&(timeout<=100)){
  39.                 timeout++;
  40.         }
  41.         Delay_us(5);
  42.         CLK = 0;
  43. }

  44. void Stop1650(void){ //停止信號
  45.         CLK = 1;
  46.         DIO = 0;
  47.         Delay_us(5);
  48.         DIO = 1;
  49. }

  50. void WrByte1650(uchar oneByte){//寫一個字節高位在前,低位在后
  51.         uchar i;
  52.         CLK = 0;
  53.         Delay_us(1);
  54.         for(i=0;i<8;i++){
  55.                 oneByte = oneByte<<1;
  56.                 DIO = CY;
  57.                 CLK = 0;
  58.                 Delay_us(5);
  59.                 CLK = 1;
  60.                 Delay_us(5);
  61.                 CLK = 0;
  62.         }
  63. }

  64. uchar Scan_Key(void){  // 按鍵掃描
  65.         uchar i;
  66.         uchar rekey;
  67.         Start1650();
  68.         WrByte1650(0x49);//讀按鍵命令
  69.         Ask1650();
  70.         //DIO = 1;
  71.         for(i=0;i<8;i++){
  72.                 CLK = 1;
  73.                 rekey = rekey<<1;
  74.                 if(DIO){
  75.                 rekey++;
  76.                 }
  77.                 Delay_us(5);
  78.                 CLK = 0;
  79.         }
  80.         Ask1650();
  81.         Stop1650();
  82.         return(rekey);
  83. }

  84. void Set1650(uchar add,uchar dat){ //數碼管顯示
  85.                                                                 //寫顯存必須從高地址開始寫
  86.         Start1650();
  87.         WrByte1650(add); //第一個顯存地址
  88.         Ask1650();
  89.         WrByte1650(dat);
  90.         Ask1650();
  91.         Stop1650();
  92. }

  93. #endif
復制代碼
注意:TM1650不是IIC器件!!!不能接在IIC線路上
回復

使用道具 舉報

15#
ID:272119 發表于 2022-10-3 20:37 | 只看該作者
ningsy 發表于 2022-10-2 21:07
感謝指點,我這就去查資料。
我本來想89C52的IO這么多,用不上也得閑著,現在看來可以再找款IO少的MCU了 ...

看MCU還要什么功能,用多少PIN,基本都是STC15或者STC8系列,89系列已經很老很少用在產品上了.關于顯示驅動我也偏向于用TM1650專業芯片,我用TM1650還幾年沒有給我惹過禍,升級固件和換硬件都不用管那一塊,根本不用考慮顯示時基和刷新率.
回復

使用道具 舉報

16#
ID:1046594 發表于 2022-10-4 10:28 | 只看該作者
使用1650 IIC通信
回復

使用道具 舉報

17#
ID:1044091 發表于 2022-10-4 11:17 | 只看該作者
mengsiu 發表于 2022-10-3 15:18
TM1650驅動,使用51單片機。
注意:TM1650不是IIC器件!!!不能接在IIC線路上。

非常感謝您的驅動代碼!器件到了試一下
回復

使用道具 舉報

18#
ID:1044091 發表于 2022-10-4 11:40 | 只看該作者
qq603599910 發表于 2022-10-3 20:37
看MCU還要什么功能,用多少PIN,基本都是STC15或者STC8系列,89系列已經很老很少用在產品上了.關于顯示驅動 ...

您說的有道理,我用的89C52內存8K已經快滿了!還有很多功能沒有加。這幾天在重新選MCU,想一步到位換成STC32G12K128 DIP40,價格便宜量又足。

再請教一下:我這是個蠕動泵控制器,原理也不復雜,準備做基礎版(數碼管顯示),高級版(12864及TFT顯示),其實功能一樣的,就是操作體驗不同,顏值不一樣。想做成向下兼容的,用同一塊板子同一款U同時留出數碼管和顯示屏接口,燒寫不同的軟件,能否可行?

還有我感覺基礎版用STC32G12K128+數碼管,U的性能可能過剩了,有啥影響么?
回復

使用道具 舉報

19#
ID:272119 發表于 2022-10-6 08:28 | 只看該作者
ningsy 發表于 2022-10-4 11:40
您說的有道理,我用的89C52內存8K已經快滿了!還有很多功能沒有加。這幾天在重新選MCU,想一步到位換成ST ...

完全可行啊,燒錄口后期當通訊口用,隨時想升級就升級. STC32了解過還沒有買回來體驗,后期好的話共享下體驗,謝謝!
回復

使用道具 舉報

20#
ID:624769 發表于 2022-10-6 15:58 | 只看該作者
ningsy 發表于 2022-10-2 21:07
感謝指點,我這就去查資料。
我本來想89C52的IO這么多,用不上也得閑著,現在看來可以再找款IO少的MCU了 ...

確實,IO空著不用也是浪費, 但是,提議 TM1650 是基于,你打算用 HC24+ HC138 的前提下,建議你用 TM1650  更經濟,以及更方便。 如果要 IO 直接驅動, 自然是可以的,但是動態掃描這個工作,負擔會加在 MCU上,同時,還牽涉到 限流電阻等等的額外電路。這就要考慮“必要性”的問題了。畢竟成本來講 TM1650 實在是太便宜了……,便宜到,我覺得 限流電阻太貴了。

最后,看你打算用 STC32,  雖然STC32本身不錯,但是,基于你 單片機基礎還薄弱,不建議 步子一下子邁那么大, 先STC8 系列 過渡一下,可能會更好。
以上,純屬個人建議。
回復

使用道具 舉報

21#
ID:1044091 發表于 2022-10-6 23:03 | 只看該作者
188610329 發表于 2022-10-6 15:58
確實,IO空著不用也是浪費, 但是,提議 TM1650 是基于,你打算用 HC24+ HC138 的前提下,建議你用 TM165 ...

感謝大佬指導!我已經準備使用TM1650了,只是這兩天商家放假,發貨很慢,還沒收到。

至于STC32,我今天實在忍不住下單買了一個,心想早晚要用上的吧(以后接12864或TFT屏)。如果看到您的建議,我可能會同時入一個STC8,不過沒關系,我再買一次就是了。
回復

使用道具 舉報

22#
ID:685684 發表于 2022-10-7 10:02 | 只看該作者
TM1650確實好用,又便宜又省引腳。IIC驅動到處都有例程能用,自己刷新還不用占用程序時間
回復

使用道具 舉報

23#
ID:401564 發表于 2022-10-8 10:10 | 只看該作者
如果條件允許,最好是IO直接控制,有強推挽模式的就串聯,沒有這個模式的就上拉
在實際項目中,是完全可以用IO直接驅動的
245和138都是多余的
這是最優先選擇的方案,首先是程序簡單,對于不是很精通編程的人來說,代碼簡單易懂比很多東西都重要
最怕就是出了問題,你找半天都不知道是你自己的代碼有問題還是別人的驅動代碼有問題
但TM1650之類的外圍你是肯定要學會使用的,畢竟,TM1650的優點就擺在那,當你的PCB是主控和顯示是分離的,它的好處就顯現了,IO直接驅動要12根線.....
回復

使用道具 舉報

24#
ID:1044091 發表于 2022-10-8 14:09 | 只看該作者
零件已到,成功點亮,效果完美!電路真的是太簡潔了!

不過第一次加載了一個官方例程竟然是黑屏!害的我檢查了近一個鐘頭,最后換了個例程,啥毛病也沒有。下步就是匹配代碼了。

在此感謝各位老師的建議!





回復

使用道具 舉報

25#
ID:1044091 發表于 2022-10-8 14:38 來自觸屏版 | 只看該作者
Y_G_G 發表于 2022-10-8 10:10
如果條件允許,最好是IO直接控制,有強推挽模式的就串聯,沒有這個模式的就上拉
在實際項目中,是完全可以用IO ...

有道理,1650的代碼實在有些多,不好理解。
回復

使用道具 舉報

26#
ID:867081 發表于 2022-10-8 15:10 | 只看該作者
IO可以直接控制的,但是四位數碼管驅動代碼還是比較冗長的,所以更換一下硬件選擇,這樣代碼也可以變得更加簡潔
回復

使用道具 舉報

27#
ID:624769 發表于 2022-10-9 11:38 來自觸屏版 | 只看該作者
ningsy 發表于 2022-10-8 14:38
有道理,1650的代碼實在有些多,不好理解。

tm1650的代碼其實很少,你覺得多,因為你用的89c52,就好比如果你沒有硬件串口,要軟件模擬串口,你也會覺得代碼繁瑣,其實說白了,大多網上傳的所謂的“通用庫”大多都是不利用硬件資源的,就好比ds1302,網上你能找到的范例都是用io直接驅動的,但是,如果用半雙工spi直接驅動,或者串口直接驅動,代碼就會簡單很多。tm1650也一樣,硬件驅動,代碼會少很多。
回復

使用道具 舉報

28#
ID:1044091 發表于 2022-10-9 15:32 | 只看該作者
mengsiu 發表于 2022-10-3 15:18
TM1650驅動,使用51單片機。
注意:TM1650不是IIC器件!!!不能接在IIC線路上。

已用您的代碼驅動起來了,顯示完美,非常感謝!

按鍵暫時沒用到,屏蔽了。又在函數里面加了一個數碼管地址定義數組,便于定位地址:

//數碼管位數                              1       2        3       4
u8 DIG_BIT_CODE[4]      = {  0x68,0x6a,0x6c,0x6e };




回復

使用道具 舉報

29#
ID:1044091 發表于 2022-10-9 15:47 | 只看該作者
188610329 發表于 2022-10-9 11:38
tm1650的代碼其實很少,你覺得多,因為你用的89c52,就好比如果你沒有硬件串口,要軟件模擬串口,你也會 ...

多謝大佬指導!您說的這些我還沒學到,有點暈我一定去找資料看一下。感覺這個小項目越做要學的東西越多啊。我已經入了一塊STC8,下一步準備把代碼搬過去。
回復

使用道具 舉報

30#
ID:1044091 發表于 2022-10-24 09:23 | 只看該作者
請教:還是TM1650驅動的問題。

為什么用STC8H系列(STC8H1K08,STC8H8K64U)驅動TM1650 I/O口必須要開強推挽模式才亮呢?設置成準雙向模式DAT腳電壓拉不起來只有0.6V左右導致黑屏。另外開強推挽模式需要串接電阻么?多大合適?

而用STC89C52(I/O口不用設置)和STC8G系列(STC8H1K08-16/20,STC8H1K17,設置成準雙向口模式)就能正常亮屏。


看手冊這兩種U  I/O口配置也沒啥區別啊,代碼也能通用(除了STC8H 要改下I/O配置),有前輩遇到過這個問題嗎?






回復

使用道具 舉報

31#
ID:161164 發表于 2022-10-24 09:48 | 只看該作者
ningsy 發表于 2022-10-24 09:23
請教:還是TM1650驅動的問題。

為什么用STC8H系列(STC8H1K08,STC8H8K64U)驅動TM1650 I/O口必須要開強 ...

準雙向模式的拉電流只有270~150uA
拉不動1650,要加上拉電阻(通常是4.7k)



回復

使用道具 舉報

32#
ID:1044091 發表于 2022-10-24 11:21 | 只看該作者
lkc8210 發表于 2022-10-24 09:48
準雙向模式的拉電流只有270~150uA
拉不動1650,要加上拉電阻(通常是4.7k)

多謝高手指點!經測試完全可行。手頭沒有4.7K電阻,只有10K的。設為準雙向口模式,加一個仍舊黑屏,并兩個點亮,電壓2.2V;并三個電壓2.49V。單片機電流也降了幾個mA。
那為何STC8G1K08 系列準雙向口模式可以點亮呢?難道是由于制造誤差,處在臨界值上了?
回復

使用道具 舉報

33#
ID:624769 發表于 2022-10-24 15:39 | 只看該作者
ningsy 發表于 2022-10-24 11:21
多謝高手指點!經測試完全可行。手頭沒有4.7K電阻,只有10K的。設為準雙向口模式,加一個仍舊黑屏,并兩 ...

STC8系列  有個 PnUP 寄存器  可以開啟 內部的 4.7K 上拉,你不需要外接上拉電阻, 只要 開漏模式 + 內部上拉,就可以驅動 TM1650,
有些知識,隨著使用的單片機進化,要跟著進化。
進入STC8 系列時代,如果不是對功耗有特別的需要,盡可能的用   開漏+內部上拉 取代  準雙向模式。
回復

使用道具 舉報

34#
ID:1044091 發表于 2022-10-24 23:34 | 只看該作者
188610329 發表于 2022-10-24 15:39
STC8系列  有個 PnUP 寄存器  可以開啟 內部的 4.7K 上拉,你不需要外接上拉電阻, 只要 開漏模式 + 內部 ...

大師您好!您說的“開漏模式 + 內部上拉”我試了N遍,就是不亮屏是不是我端口配置代碼寫錯了?
TM1650的引腳定義:
sbit CLK = P3^6;
sbit DIO = P3^7;

端口配置:

P3M1 = 0xff;   P3M0 = 0xff;
P3PU =0xc0; //不行

端口配置:

P3M1 = 0x00;   P3M0 = 0x00;
P3PU =0xc0; //也不行

下面一行改成P3PU =0xff; P3PU |=0xc0;//都不行

MCU型號是STC8H1K08,用什么辦法能看下內部上拉電阻起沒起作用呢?





回復

使用道具 舉報

35#
ID:624769 發表于 2022-10-25 01:36 | 只看該作者
P_SW2 |= 0x80;    //這個最好放在  void main() 的第一句,  開了就不用關了。
P3PU =0xc0;

回復

使用道具 舉報

36#
ID:1044091 發表于 2022-10-25 08:48 | 只看該作者
188610329 發表于 2022-10-25 01:36
P_SW2 |= 0x80;    //這個最好放在  void main() 的第一句,  開了就不用關了。
P3PU =0xc0;

感謝大師指點!已經完全正常了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区不卡 | 九九久久精品 | 久久精品视频在线观看 | 亚洲欧美一区二区三区1000 | 亚洲欧美另类在线观看 | 在线中文字幕视频 | 玩丰满女领导对白露脸hd | 日韩欧美网 | 久久精品亚洲国产奇米99 | 日韩中文欧美 | 亚洲精品乱码久久久久久按摩观 | 日日艹夜夜艹 | 午夜影院在线免费观看视频 | 日韩区| 日韩免费电影 | аⅴ资源新版在线天堂 | 免费一区二区三区 | 国产成人精品免高潮在线观看 | 中文福利视频 | 国产免费一区二区 | 男女视频在线观看网站 | 夜夜精品视频 | 欧美日本亚洲 | 美日韩免费| 91日b| 欧美中文字幕在线观看 | 99精品免费在线观看 | 男女羞羞视频在线免费观看 | 精品九九久久 | 久久不射电影网 | 久久精品久久精品久久精品 | 91在线播| 国产精品夜夜夜一区二区三区尤 | 国产精品免费一区二区三区四区 | 精品国产免费人成在线观看 | 国产一区二区久久 | 韩日一区二区三区 | 成人影院在线观看 | 欧美日本在线观看 | 亚洲精品一区二区三区 | 国产在线www|