找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)+74HC595控制數(shù)碼管最后一位特別亮

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
大家好,

我用兩片74HC595D 控制8位數(shù)碼管動(dòng)態(tài)掃描,一片做8位段碼的控制,另一片做8位位碼的控制。
因?yàn)橹笆侵苯佑脝纹瑱C(jī)IO連接數(shù)碼管來(lái)控制的,代碼里面需要有消隱和延時(shí)程序,用起來(lái)沒(méi)啥問(wèn)題,現(xiàn)在改用74HC595后,發(fā)現(xiàn)不需要消隱和延時(shí)了,加了消隱和延時(shí)發(fā)現(xiàn)反而無(wú)法正常顯示了,我不知道為啥是這樣,代碼里我就直接放顯示部分了。

顯示是沒(méi)啥問(wèn)題,但是現(xiàn)在有一個(gè)小問(wèn)題,就是前面7位亮度一致,最后一位比較亮,也就是最后一位比前7位都亮。這個(gè)應(yīng)該是最后一位掃描到的時(shí)間比前面長(zhǎng)造成的,但是我不知道如何解決。

各位大神有解決這個(gè)問(wèn)題的比較成熟的方法么?

顯示程序大概如下:

void SendData595(uint8_t  DataSendH15_8, uint8_t DataSendL7_0);  // 74HC595數(shù)據(jù)發(fā)送

uint8_t  weima_table[]= {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}  //8位位碼
uint8_t  duanma_table[]={0xd7,0x82,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f} //段碼,0~9

void SHG_DISPLAY()  // 數(shù)碼管顯示,此處無(wú)需消隱和延時(shí)

{
         SendData_hc595(weima_table[0],  duanma_table[5]);
         SendData_hc595(weima_table[1],  duanma_table[2]);
         SendData_hc595(weima_table[2],  duanma_table[1])
         SendData_hc595(weima_table[3],  duanma_table[4])
         SendData_hc595(weima_table[4],  duanma_table[0]);
         SendData_hc595(weima_table[5],  duanma_table[8])
         SendData_hc595(weima_table[6],  duanma_table[3]); //以上7位顯示亮度均勻一致
         SendData_hc595(weima_table[7],  duanma_table[7]);  //這一位特別亮,比前7位都亮
}


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

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2022-1-18 23:43 | 只看該作者
不知到你其它代碼是如何寫(xiě)滴
  1. void SHG_DISPLAY()  // 數(shù)碼管顯示,此處無(wú)需消隱和延時(shí)
  2. {
  3.         static uchar mode = 0;
  4.         switch(mode)
  5.         {
  6.         case 0:
  7.                 SendData_hc595(weima_table[0],  duanma_table[5]);
  8.                 break;
  9.         case 1:
  10.                 SendData_hc595(weima_table[1],  duanma_table[2]);
  11.                 break;
  12.         case 2:
  13.                 SendData_hc595(weima_table[2],  duanma_table[1]);
  14.                 break;
  15.         case 3:
  16.                 SendData_hc595(weima_table[3],  duanma_table[4]);
  17.                 break;
  18.         case 4:
  19.                 SendData_hc595(weima_table[4],  duanma_table[0]);
  20.                 break;
  21.         case 5:
  22.                 SendData_hc595(weima_table[5],  duanma_table[8]);
  23.                 break;
  24.         case 6:
  25.                 SendData_hc595(weima_table[6],  duanma_table[3]); //以上7位顯示亮度均勻一致
  26.                 break;
  27.         case 7:
  28.                 SendData_hc595(weima_table[7],  duanma_table[7]);  //這一位特別亮,比前7位都亮
  29.                 break;
  30.         }
  31.         mode = ++mode % 8;
  32. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:857072 發(fā)表于 2022-1-19 00:05 來(lái)自觸屏版 | 只看該作者
寫(xiě)個(gè)case 8:把595所有數(shù)據(jù)清零不就完事了。
回復(fù)

使用道具 舉報(bào)

地板
ID:332444 發(fā)表于 2022-1-19 08:41 | 只看該作者
早上剛想寫(xiě)這方面的內(nèi)容巧了就看到這帖,有些類(lèi)似的提問(wèn),回復(fù)要硬消隱+軟消隱,可是有些人就是愛(ài)鉆牛角尖說(shuō)已經(jīng)消隱了,有些人看了回復(fù)就去試看結(jié)果就解決了,就有這樣人的區(qū)別,對(duì)于愛(ài)鉆牛角尖的不撞南墻不回頭的怎么辦,佛門(mén)有個(gè)典故說(shuō)佛菩薩教眾生長(zhǎng)富財(cái)寶十善法有人信行果長(zhǎng)富財(cái)寶,有人不信認(rèn)為只有損人利己有財(cái)寶,佛菩薩對(duì)于不聽(tīng)的眾生只好暫時(shí)遠(yuǎn)離,因?yàn)橹谰壏治吹蕉嗾f(shuō)無(wú)益,已為說(shuō)明只能暫時(shí)做個(gè)遠(yuǎn)緣分,待緣分到了成熟了才能明白才能回頭是岸才能知錯(cuò)投路徑反遠(yuǎn)知回頭才能達(dá)目的地。今天得閑就做個(gè)荔枝演示取消硬消隱和取消軟消隱會(huì)造成什么現(xiàn)象,稍后發(fā)動(dòng)畫(huà)。首先取消軟消隱看現(xiàn)象,次取消硬消隱看現(xiàn)象。
回復(fù)

使用道具 舉報(bào)

5#
ID:332444 發(fā)表于 2022-1-19 08:42 | 只看該作者

回復(fù)

使用道具 舉報(bào)

6#
ID:332444 發(fā)表于 2022-1-19 08:50 | 只看該作者

回復(fù)

使用道具 舉報(bào)

7#
ID:879809 發(fā)表于 2022-1-19 21:15 | 只看該作者
每個(gè) SendData_hc595后面都加delay可以讓每個(gè)位顯示時(shí)間均勻一些。
回復(fù)

使用道具 舉報(bào)

8#
ID:824490 發(fā)表于 2022-1-21 09:18 | 只看該作者
這是你的代碼邏輯問(wèn)題:
顯示的前7個(gè)數(shù)據(jù),會(huì)被緊接的下一個(gè)數(shù)據(jù)代替,所以它們的亮度是一致的,而第8個(gè)數(shù)據(jù)顯示完了之后,并沒(méi)有第9個(gè)數(shù)據(jù)來(lái)頂它 ,所以會(huì)一直存活,直到下一輪的顯示掃描的第一個(gè)數(shù)據(jù)來(lái)頂它,存活時(shí)間很長(zhǎng),看上去就比前面7個(gè)亮了!
如同板凳所說(shuō),最后清數(shù)據(jù)就OK了
。

。
。
SendData_hc595(weima_table[7],  duanma_table[7]);
SendData_hc595(0x00, 0x00); //<===加入此行或者直接把595的OE關(guān)了。
回復(fù)

使用道具 舉報(bào)

9#
ID:824490 發(fā)表于 2022-1-21 09:21 | 只看該作者
lkc8210 發(fā)表于 2022-1-18 23:43
不知到你其它代碼是如何寫(xiě)滴

順序掃顯而已,不需要用分支來(lái)走。顯得累贅、臃腫。。
回復(fù)

使用道具 舉報(bào)

10#
ID:161164 發(fā)表于 2022-1-21 13:31 | 只看該作者
名字不是重點(diǎn) 發(fā)表于 2022-1-21 09:21
順序掃顯而已,不需要用分支來(lái)走。顯得累贅、臃腫。。

細(xì)心一點(diǎn)
不是順序的
回復(fù)

使用道具 舉報(bào)

11#
ID:824490 發(fā)表于 2022-1-21 16:00 | 只看該作者
lkc8210 發(fā)表于 2022-1-21 13:31
細(xì)心一點(diǎn)
不是順序的

樓主是“兩片74HC595D 控制8位數(shù)碼管動(dòng)態(tài)掃描,一片做8位段碼的控制,另一片做8位位碼的控制”
而且他給出的代碼也確實(shí)是從位0-位7依次送顯,變的只是段碼,
如果把段碼做一個(gè)顯示BUF,整個(gè)顯示函數(shù)只要一個(gè)語(yǔ)句:
for(i=0;i<8;i++)
{
。。。
}
不就可以了?短小精干。。

回復(fù)

使用道具 舉報(bào)

12#
ID:161164 發(fā)表于 2022-1-21 16:16 | 只看該作者
名字不是重點(diǎn) 發(fā)表于 2022-1-21 16:00
樓主是“兩片74HC595D 控制8位數(shù)碼管動(dòng)態(tài)掃描,一片做8位段碼的控制,另一片做8位位碼的控制”
而且他給 ...

for循環(huán)不能解決最后一位特別亮的問(wèn)題
回復(fù)

使用道具 舉報(bào)

13#
ID:824490 發(fā)表于 2022-1-21 16:22 | 只看該作者
lkc8210 發(fā)表于 2022-1-21 16:16
for循環(huán)不能解決最后一位特別亮的問(wèn)題

。。。。。
for完了再加一個(gè)條發(fā)送空數(shù)據(jù),或是在顯存中多開(kāi)一個(gè)字節(jié),最后一個(gè)成員直接賦值為0:
for(i=0;i<9;i++)
{
。。。
}
就OK了
回復(fù)

使用道具 舉報(bào)

14#
ID:161164 發(fā)表于 2022-1-21 16:44 | 只看該作者
名字不是重點(diǎn) 發(fā)表于 2022-1-21 16:22
。。。。。
for完了再加一個(gè)條發(fā)送空數(shù)據(jù),或是在顯存中多開(kāi)一個(gè)字節(jié),最后一個(gè)成員直接賦值為0:
for( ...

這樣也可以
char Phone[8] = "52140837";
void SHG_DISPLAY()  // 數(shù)碼管顯示,此處無(wú)需消隱和延時(shí)
{
        static unsigned char mode = 0;
        SendData_hc595(weima_table[mode],  duanma_table[Phone[mode] - '0']);   
        mode = ++mode % 8;
}
回復(fù)

使用道具 舉報(bào)

15#
ID:824490 發(fā)表于 2022-1-21 17:19 | 只看該作者
lkc8210 發(fā)表于 2022-1-21 16:44
這樣也可以
char Phone[8] = "52140837";
void SHG_DISPLAY()  // 數(shù)碼管顯示,此處無(wú)需消隱和延時(shí)

你這個(gè)沒(méi)有循環(huán)哦
回復(fù)

使用道具 舉報(bào)

16#
ID:161164 發(fā)表于 2022-1-21 17:42 | 只看該作者
名字不是重點(diǎn) 發(fā)表于 2022-1-21 17:19
你這個(gè)沒(méi)有循環(huán)哦

利用main while來(lái)循環(huán)
回復(fù)

使用道具 舉報(bào)

17#
ID:824490 發(fā)表于 2022-1-21 21:06 | 只看該作者
lkc8210 發(fā)表于 2022-1-21 17:42
利用main while來(lái)循環(huán)


字?jǐn)?shù)補(bǔ)丁、、、、、
回復(fù)

使用道具 舉報(bào)

18#
ID:883031 發(fā)表于 2022-1-23 11:03 | 只看該作者
時(shí)間停留問(wèn)題
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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