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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

用5個74hc595芯片級聯,控制27位數碼管,數碼管顯示閃爍問題

查看數: 5490 | 評論數: 52 | 收藏 1
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2024-4-12 15:49

正文摘要:

用了5個74hc595芯片級聯,控制27位數碼管,數碼管閃爍,懷疑是寫入74HC595數據的時間太長導致的,現在很怕是本來硬件設計的缺陷。   我的程序大概是這樣的,先用定時器0來計時,再用定時器1來刷新數碼管 ...

回復

ID:1110448 發表于 2024-7-29 14:46
27位8段是216段,開方是14.9,不用開方也知道接近256,就是16*16,所以用4片就可以了;
如果不想用4片,也要用少的行列值分頻吧,,用8C * 32S 可以降低要求了,其實總數據量是差不多的,只是降低了中斷次數
ID:491577 發表于 2024-7-29 12:06
595的額定電流為35ma,大部分應用都是不加限流電阻的,所以595位電流是大于35ma的,短時間不斷刷595是沒有問題的,如果因為程序卡住595刷新不及時造成某一位長時間超電流導通就會燒595,樓主發現數碼管閃爍就是刷新不及時的表現,樓主的程序效率太低,無法及時刷新595造成的,要改程序提高效率。如果樓主在8個595段碼腳加上300歐姆以上的限流電阻保證大部分595都好用了。595數據可以同步刷新所以不需要消隱。
ID:1109793 發表于 2024-7-27 15:08
cy009 發表于 2024-7-27 12:55
一、消隱與否,是數碼管決定,而不是芯片決定。凡是使用動態掃描的多位數碼管顯示,都必須消隱。HC164因 ...

可能還是我水平太菜,嘗試各種方法,不好使的就是不好使。只用一片都沒有問題。級聯就各種奇怪現象。用價格較高的就沒問題。實際上在嘉立創買過一種,那個LOGO我以前沒用過,也就那樣吧。級聯偶爾也會出現不該有的輸出跳動一下。
ID:619259 發表于 2024-7-27 12:55
xiaobendan001 發表于 2024-4-13 07:12
595不是有控制端嗎?怎么還消隱?164才需要消隱吧。我用2片595級聯輸出,發現市場上大部分595都不能用,只 ...

一、消隱與否,是數碼管決定,而不是芯片決定。凡是使用動態掃描的多位數碼管顯示,都必須消隱。HC164因芯片內部無鎖存功能,在聯級驅動數碼管時只能通過復位端清零來實現消隱,屬于硬件消隱。HC595內部有鎖存功能,可以采用軟件消隱,即通過程序關段電平或位電平的方法,也可以采用硬件消隱,即通過復位端清零來實現消隱,但得多用一個IO口。
二、“市場上大部分595都不能用”,這樣的結論過于草率,在做案例時遇到問題,應該先考慮程序的問題。我個人做了很多學生競賽的題目,多次購買并使用了很多的595芯片,驅動流水燈、數碼管、LED點陣等,未遇到595損壞不能用的情況。
ID:292903 發表于 2024-7-27 01:11
zhuls 發表于 2024-4-13 09:23
switch(i) //逐位輸入數據
        {
        case 0:

哈哈,我也是這樣覺得的,第一眼都看麻了
ID:298743 發表于 2024-4-16 19:06
神奇,把long拆分成4個unchar ,12MHZ現在又可以了,之前要用到33MHZ才可以的
ID:298743 發表于 2024-4-16 16:29
yqs138168 發表于 2024-4-15 15:21
24個共陰數碼管+5個74HC595,仿真軟件為Proteus8.11版本,,,可以正常顯示。

真是奇怪了,我將你的8位一組數碼管換成兩個四位一組的數碼管就顯示不出來了
ID:332444 發表于 2024-4-16 09:17
很簡單的,取消延時語句,測量時間是多少,若時間剛好則可取消延時,若還是時間過多則要考慮修改電路。
ID:57657 發表于 2024-4-16 08:48
27個數碼管每個8段共有216段,使用16行16列掃描只需要4個74HC595 最多驅動256個點陣(16*16或32*8)或32位8段數碼管。
如果單片機有16個IO口空閑,那么只需要2片74HC595就能驅動,32個IO口空閑一片都不需要(需要IO口支持強推挽模式)。
仿真的動態掃描閃爍可以調整 Minimum Trigger Time 的毫秒參數,具體是否閃爍需要實物驗證。
ID:213173 發表于 2024-4-15 17:04
給你一個仿真示例,如果實物效果不好就按10樓建議處理,以留給主函數足夠時間運行其它代碼。




  1. #include <reg51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define ulong unsigned long
  5. sbit P_HC595_SER   = P2^0;
  6. sbit P_HC595_SRCLK = P2^1;
  7. sbit P_HC595_RCLK  = P2^2;
  8. sbit A0=P2^3;
  9. sbit B0=P2^4;
  10. sbit C0=P2^5;
  11. uchar code table[]={
  12. // 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  13.   0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  14. //  G   H    J    K    L    M    N    o    P     Q    r   t   
  15.   0x3d,0x76,0x1E,0x70,0x38,0x37,0x54,0x5C,0x73,0x67,0x50,0x78};
  16. ulong num=0xfffffffe;
  17. bit flag;//標志

  18. /**************** 向HC595發送一個字節函數 ******************/
  19. void Send_595(uchar dat)
  20. {               
  21.         uchar i;
  22.         for(i=0;i<8;i++)
  23.         {
  24.                 dat <<= 1;
  25.                 P_HC595_SER  = CY; //溢出位賦值數據輸出端
  26.                 P_HC595_SRCLK = 1; //移位時鐘
  27.                 P_HC595_SRCLK = 0;
  28.         }
  29. }
  30. /**************** 向HC595發送5個字節驅動碼 ******************/
  31. void DisplayScan()
  32. {       
  33.         static uchar i;

  34.         Send_595(num>>24);//向HC595發送位碼
  35.         Send_595(num>>16);//向HC595發送位碼
  36.         Send_595(num>>8);//向HC595發送位碼
  37.         Send_595(num);   //向HC595發送位碼
  38.         Send_595(table[i]);//向HC595發送段碼
  39.         P_HC595_RCLK = 1;//鎖存輸出數據
  40.         P_HC595_RCLK = 0;
  41.         num=num<<1|0x01;
  42.         if(++i>=27)
  43.         {
  44.                 num=0xFFFFFFFE;
  45.                 i=0;
  46.         }
  47. }

  48. void InitTimer0(void)//740us
  49. {
  50.     TMOD = 0x01;
  51.     TH0 = 0x0FD;
  52.     TL0 = 0x1C;
  53.     EA = 1;
  54.     ET0 = 1;
  55.     TR0 = 1;
  56. }

  57. void main()
  58. {
  59.         P_HC595_SRCLK = 0;//初始化移位時鐘端
  60.         P_HC595_RCLK  = 0;//初始化鎖存輸出端
  61.         InitTimer0();
  62.         while(1)
  63.         {
  64.                 if(flag)
  65.                 {
  66.                         flag=0;
  67.                         DisplayScan();
  68.                         //其它程序
  69.                 }
  70.         }
  71. }
  72. void Timer0Interrupt(void) interrupt 1
  73. {
  74.         TH0 = 0xFD;
  75.         TL0 = 0x1C;
  76.         flag=1;
  77. }
復制代碼




ID:33145 發表于 2024-4-15 15:58
數碼管仿真模型參數修改

數碼管仿真模型參數修改.jpg (142.7 KB, 下載次數: 238)

數碼管仿真模型參數修改.jpg
ID:33145 發表于 2024-4-15 15:49
yqs138168 發表于 2024-4-15 15:26
看看我的程序,新思路,與你的寫法不一樣,效率高很多

還有一種方案,使用專用顯示驅動芯片,例如MAX7219
ID:384109 發表于 2024-4-15 15:34
看代碼,你是對595的使用有誤解吧
ID:33145 發表于 2024-4-15 15:28
asdadqw2 發表于 2024-4-15 15:22
大佬能不能指點一下想法嗎,我覺得我的switch雖然累贅,但是應該不影響程序執行效率,然后就到消隱和寫入 ...

51單片機處理大的數值(特別是32位)或浮點數,效率都很低,盡可能使用char數據或位數據,提高效率,,,
ID:33145 發表于 2024-4-15 15:26
asdadqw2 發表于 2024-4-15 15:22
大佬能不能指點一下想法嗎,我覺得我的switch雖然累贅,但是應該不影響程序執行效率,然后就到消隱和寫入 ...

看看我的程序,新思路,與你的寫法不一樣,效率高很多
ID:298743 發表于 2024-4-15 15:22
yqs138168 發表于 2024-4-15 15:16
可以嘗試提高程序的效率,我用仿真24個數碼管,沒問題。

大佬能不能指點一下想法嗎,我覺得我的switch雖然累贅,但是應該不影響程序執行效率,然后就到消隱和寫入595的程序了,寫入595的程序,我在網上找資料也只找到我這種寫法,實在沒什么頭緒了
ID:33145 發表于 2024-4-15 15:21
24個共陰數碼管+5個74HC595,仿真軟件為Proteus8.11版本,,,可以正常顯示。

24位數碼管顯示_74HC595X5.rar

93.32 KB, 下載次數: 10

ID:33145 發表于 2024-4-15 15:16
可以嘗試提高程序的效率,我用仿真24個數碼管,沒問題。
ID:1109793 發表于 2024-4-15 14:22
asdadqw2 發表于 2024-4-15 13:37
怎么用軟件模擬,我也去試下,能說一下怎么模擬的嗎

就是在keil里面進入調試狀態,設好斷點,記錄時間。
ID:298743 發表于 2024-4-15 13:37
xiaobendan001 發表于 2024-4-15 09:27
剛軟件模擬了一下,連續輸出5片的數據時間小于250us,完全可以用的。

怎么用軟件模擬,我也去試下,能說一下怎么模擬的嗎
ID:298743 發表于 2024-4-15 13:27
  1. void led_hc595_drive(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4,unsigned char datL)
  2. {
  3.         unsigned char i;
  4.         unsigned char temp;
  5.         unsigned char temp2;
  6.         temp = dat1;
  7.         for(i = 0;i<8;i++)
  8.         {
  9.                 if(temp >= 0x80)   
  10.                 {
  11.                         HC595_DS = 1;
  12.                 }
  13.                 else
  14.                 {
  15.                         HC595_DS = 0;
  16.                 }
  17.                 HC595_SH_CP = 0;
  18.                 HC595_SH_CP = 1;
  19.                 temp  <<=1;
  20.         }
  21.         temp = dat2;
  22.         for(i = 0;i<8;i++)
  23.         {
  24.       
  25.                 if(temp >= 0x80)   
  26.                 {
  27.                         HC595_DS = 1;
  28.                 }
  29.                 else
  30.                 {
  31.                         HC595_DS = 0;
  32.                 }
  33.                 HC595_SH_CP = 0;
  34.                 HC595_SH_CP = 1;
  35.                 temp  <<=1;
  36.         }
  37.         temp = dat3;
  38.         for(i = 0;i<8;i++)
  39.         {
  40.          
  41.                 if(temp >= 0x80)   
  42.                 {
  43.                         HC595_DS = 1;
  44.                 }
  45.                 else
  46.                 {
  47.                         HC595_DS = 0;
  48.                 }
  49.                 HC595_SH_CP = 0;
  50.                 HC595_SH_CP = 1;
  51.                 temp  <<=1;
  52.         }
  53.         temp = dat4;
  54.         for(i = 0;i<8;i++)
  55.         {
  56.      
  57.                 if(temp >= 0x80)   
  58.                 {
  59.                         HC595_DS = 1;
  60.                 }
  61.                 else
  62.                 {
  63.                         HC595_DS = 0;
  64.                 }
  65.                 HC595_SH_CP = 0;
  66.                 HC595_SH_CP = 1;
  67.                 temp  <<=1;
  68.         }
  69.         temp2 = datL;
  70.         for(i = 0;i<8;i++)
  71.         {
  72.   
  73.                 if(temp2 >= 0x80)
  74.                 {
  75.                         HC595_DS = 1;
  76.                 }
  77.                 else
  78.                 {
  79.                         HC595_DS = 0;
  80.                 }
  81.                 HC595_SH_CP = 0;
  82.                 HC595_SH_CP = 1;
  83.                 temp2  <<=1;
  84.         }
  85.         HC595_ST_CP = 0;
  86.         HC595_ST_CP = 1;

  87.         HC595_SH_CP = 0;
  88.         HC595_ST_CP = 0;
  89.         HC595_DS = 0;

復制代碼
ID:1109793 發表于 2024-4-15 13:22
asdadqw2 發表于 2024-4-15 11:40
這個的寫法,跟我的差不多一樣把,我沒看出什么區別,原諒我新手不太懂

應該是可以的,我這用22.1184的晶振
ID:161164 發表于 2024-4-15 13:20
asdadqw2 發表于 2024-4-15 11:27
我也是小白,剛剛試過改了一下long的數據分成四個,再把頻率改為33.1776 就顯示正常了

貼上來看看
ID:298743 發表于 2024-4-15 11:49
zhuls 發表于 2024-4-13 09:23
switch(i) //逐位輸入數據
        {
        case 0:

我的想法 是switch的執行效率應該不低吧,只是占用的代碼位置多而已,執行起來應該直接到相應的case里,效率來說應該還行吧。(純新手,剛接觸,希望大佬能解答一下)
ID:298743 發表于 2024-4-15 11:40
xiaobendan001 發表于 2024-4-15 09:32
這是另外一個用了3片,一片顯示數據,2片輸出驅動。但是這個顯示的位選是用IO的。為了配合,還是加了消隱的 ...

這個的寫法,跟我的差不多一樣把,我沒看出什么區別,原諒我新手不太懂
ID:298743 發表于 2024-4-15 11:31
xiaobendan001 發表于 2024-4-15 09:27
剛軟件模擬了一下,連續輸出5片的數據時間小于250us,完全可以用的。

難道是仿真軟件的問題?我在仿真軟件運行這個就有閃爍
ID:298743 發表于 2024-4-15 11:27
xiaoyao166ny 發表于 2024-4-12 22:00
小白一個 高手勿噴     增加時鐘頻率 可以嗎

我也是小白,剛剛試過改了一下long的數據分成四個,再把頻率改為33.1776 就顯示正常了
ID:298743 發表于 2024-4-15 11:26

能說一下怎么補償的思路嗎,我在網上找不到相關資料
ID:1109793 發表于 2024-4-15 09:32
這是另外一個用了3片,一片顯示數據,2片輸出驅動。但是這個顯示的位選是用IO的。為了配合,還是加了消隱的,先關了COM,更新數據后再打開。
  1. OP = 0;                                        //鎖定輸入輸出
  2. dqd(OUT[0]);                //顯示
  3. dqd(OUT[1]);                //OUT_1-8=>7-0
  4. dqd(OUT[2]);                //OUT_9-16=>7-0
  5. OP = 1;                                //更新輸出,上升沿有效
復制代碼
  1. void dqd(uchar da){
  2. //SBUF = da;
  3. //while(!TI){};
  4. //TI = 0;
  5. uchar i = 8;
  6. while(i){
  7.         MC = 0;
  8.         if(da&0x01 == 1){
  9.                 MD = 1;
  10.                 }else{
  11.                 MD = 0;
  12.                 }
  13.         da>>=1;
  14.         _nop_();_nop_();
  15.         _nop_();_nop_();
  16.         MC = 1;
  17.         _nop_();_nop_();
  18.         _nop_();_nop_();
  19.         i--;
  20.         }
  21. }
復制代碼
ID:1109793 發表于 2024-4-15 09:27
剛軟件模擬了一下,連續輸出5片的數據時間小于250us,完全可以用的。
ID:1109793 發表于 2024-4-15 09:19
cy009 發表于 2024-4-15 08:47
1.595兩片聯級,一片傳段碼,一片傳位碼,可以不用消隱。樓主的案例是5個595,段碼共用,不消隱不行呵。
...

1,兩片顯示8位和5片顯示32位難道不一樣嗎?為啥2片不用消隱,5片就要?
2,你說的是那個二極管嗎?當然有啊
ID:1109793 發表于 2024-4-15 09:16
asdadqw2 發表于 2024-4-15 08:38
我在仿真上面的結果595級聯是可以正常輸出,有異常的話,你可以用keil單步調試,查看各個變量的值是怎么 ...

都說了,好的芯片是沒問題的,板子不是很多,10多年前一次性買了一整盤,用了10多年,一直正常的。好不容易用完了,再買就出問題了,后級某個輸出會偶爾跳動。并且幾個月后會完全損壞。于是重新購買,包括在立創商城也買過,結果都不行,有的甚至直接錯位輸出,最后買到一種,上面的LOGO類似><的。就沒問題了。我也是納悶,這樣古老的一個東西,而且大量被使用在LED點陣上面,居然還有問題。
ID:619259 發表于 2024-4-15 08:47
xiaobendan001 發表于 2024-4-15 07:30
大哥,我不是用來顯示的,我是用來擴展輸出的,2片級聯16個輸出推動三極管+繼電器。這個有使能端,還有RC ...

1.595兩片聯級,一片傳段碼,一片傳位碼,可以不用消隱。樓主的案例是5個595,段碼共用,不消隱不行呵。
2.你用595擴展輸出驅動三極管+繼電器,繼電器電路有反峰保護嗎?
ID:298743 發表于 2024-4-15 08:38
xiaobendan001 發表于 2024-4-13 07:12
595不是有控制端嗎?怎么還消隱?164才需要消隱吧。我用2片595級聯輸出,發現市場上大部分595都不能用,只 ...

我在仿真上面的結果595級聯是可以正常輸出,有異常的話,你可以用keil單步調試,查看各個變量的值是怎么變化的,來查出原因
ID:1109793 發表于 2024-4-15 07:30
cy009 發表于 2024-4-14 22:27
不能怪595不好,是你沒消隱造成

大哥,我不是用來顯示的,我是用來擴展輸出的,2片級聯16個輸出推動三極管+繼電器。這個有使能端,還有RCK,就算顯示也沒必要消隱吧,把數據更新到芯片,然后RCK給個上升沿,把每個芯片的數據更新到輸出腳上去,這樣不行嗎?消隱我覺得是比如164沒有RCK這種功能,在更新數據過程中每個腳都被實時更新,狀態不是想要的,此時先關閉顯示,等更新完成再打開,這樣顯示比較干凈。
ID:619259 發表于 2024-4-14 22:27
xiaobendan001 發表于 2024-4-13 07:12
595不是有控制端嗎?怎么還消隱?164才需要消隱吧。我用2片595級聯輸出,發現市場上大部分595都不能用,只 ...

不能怪595不好,是你沒消隱造成
ID:619259 發表于 2024-4-14 17:19
27個數碼管采用動態掃描,理論上是可以實現無閃顯示。動態掃描刷新頻率理論上不低于50Hz,能達到100Hz為最佳,掃描周期即為20-10ms。若取中間值15ms,每個數碼管刷新時間為0.56ms,經仿真可以成功穩定顯示,因多位數碼管共用段端口,程序必須加上消隱。
ID:1109793 發表于 2024-4-14 10:33
Hephaestus 發表于 2024-4-14 10:25
大面積敷地可以改善問題。

截圖里面藍色就是鋪地啊,實際上之前的板子是沒有的,就是因為芯片問題才鋪了,結果沒什么卵用
ID:1109793 發表于 2024-4-14 10:32
perseverance51 發表于 2024-4-14 10:17
74hc595也是分型號的,例如74HC595A和75HC595D,它們使用都是存在差異,外部的硬件電路可能都不同,具體參 ...

百度了一下,只是封裝不一樣而已。而且幾個品牌如果只用一片都好使,其中最差的一個大概在幾個月后會壞掉。較好的則針對自己同品牌可以用級聯,但是也不穩定,偶爾出現意外的跳動,時間短的只能在LED上看到,但是繼電器沒有動作,長的就能聽到繼電器有聲音,雖然強電輸出也看不到,但是我認為這會影響繼電器的壽命。只有一個牌子的可以,級聯信號送個其他品牌都能正常穩定的輸出。用示波器看了,實在看不出來問題。但是就是不好使,軟件上面調整了各種順序和延時,會略有改善,無法根除。
ID:883242 發表于 2024-4-14 10:25
xiaobendan001 發表于 2024-4-14 07:08
麻煩幫我看看這個要怎么改才能正常使用其他品牌的595.

大面積敷地可以改善問題。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级片在线 | 日韩精品免费一区二区夜夜嗨 | 国产免费一级片 | 国产亚洲欧美在线 | 成人免费黄色片 | 中文精品一区 | 激情久久久久 | 狼人色 | 成人羞羞网站 | 一区二区三区视频 | 国产精品一区二区不卡 | 亚洲精品社区 | 男男成人高潮片免费网站 | 欧美又大粗又爽又黄大片视频 | 中文字幕av久久爽av | 日本a网站 | 91久久国产综合久久 | 国产精品一品二区三区的使用体验 | 欧美777| 精品一区二区三区四区五区 | 亚洲午夜av| 色婷婷导航 | 一区二区精品在线 | 亚洲精品三区 | 色女人影院 | 91欧美激情一区二区三区成人 | 日韩黄色片 | 国产伦精品一区二区三毛 | 成人亚洲精品 | 久久理论片 | 日本不卡视频在线观看 | 成人午夜在线 | 在线观看av免费 | 日韩图色 | 久久日av | 欧美视频一区二区 | 男女av在线| 激情婷婷丁香 | 色播五月婷婷 | 国产激情一区二区三区 | 国产成人a亚洲精品 |