熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-5-30 14:03
正文摘要:單片機(jī)通過(guò)74HC595控制8個(gè)LED循環(huán)點(diǎn)亮,按照D16-D15-D14......D9依次循環(huán),每次亮一個(gè)。仿真看著沒(méi)問(wèn)題,實(shí)物運(yùn)行起來(lái)會(huì)有不止一個(gè)LED亮起來(lái),學(xué)藝不精,找了很久沒(méi)找到問(wèn)題根源,還請(qǐng)大佬指點(diǎn)迷津。 單片機(jī)型號(hào)STC ... |
188610329 發(fā)表于 2023-5-31 17:20 在 RCK=0; RCK=1之間插入多個(gè)_nop_()也不起作用; 單片機(jī)是STC89C52,595供電電壓是5V,萬(wàn)用表實(shí)際測(cè)下來(lái)是4.97V |
Cqzm 發(fā)表于 2023-5-30 22:55 存在的問(wèn)題是,你還沒(méi)完成下降,就開始上升了。不知道你用的什么單片機(jī),如果1T 的單片機(jī), RCLK = 0; 到 RCLK =1; 之間,你最少要插入 5個(gè) _nop_(); 如果你的 595是 3V供電的話,你甚至需要 插入12個(gè)_nop_(); 才夠。 |
pcf2000 發(fā)表于 2023-5-31 09:43 數(shù)據(jù)是串入并出的,這句是在往移位寄存器里面寫入的 |
提醒樓主一個(gè)冷知識(shí):不同廠家的595芯片,對(duì)鎖存和ENABLE的邏輯要求不完全相同,你看下你使用的595芯片對(duì)應(yīng)的手冊(cè)就明白了。 |
1、要點(diǎn),先關(guān)閉OE,這樣數(shù)據(jù)的切換就不會(huì)閃動(dòng),因?yàn)檫@時(shí)不顯示(暗,消影)。 2、給出串行數(shù)據(jù); 3、要點(diǎn):等數(shù)據(jù)穩(wěn)定后,再給出移位脈沖信號(hào)上沿。 4、待輸出穩(wěn)定后,打開OE,放出數(shù)據(jù)。 所謂穩(wěn)定,也就是插入幾個(gè)NOP指令的事。 硬件上要注意,CLK信號(hào),復(fù)位信號(hào)要做防護(hù),不能受到干擾。 |
本帖最后由 pcf2000 于 2023-5-31 09:51 編輯 SER=byte>>7; 這句代碼是什么意思,串行輸出不該是一位一位輸出的嗎,你移動(dòng)7位,高位的數(shù)據(jù)直接出位,就用0補(bǔ)位了,就出現(xiàn)LED燈亮了, 記住,你的電路是0電平點(diǎn)亮LED燈,要實(shí)現(xiàn)每次只一只LED點(diǎn)亮,595的輸出每次必須只有一位輸出為0 改為 :SER=byte>>1; 即可 |
wulin 發(fā)表于 2023-5-30 16:40 你好,我照著你的改了下代碼,進(jìn)入HC595_Send()函數(shù)時(shí)就將RCK拉低,八位寫完后在拉高RCK,能正常運(yùn)行了。 修改前HC595_Send()這個(gè)函數(shù)里面,寫入八位后RCK給一個(gè)上升沿這種做法為啥不對(duì)呢?l兩者看起來(lái)差不多啊,存在什么問(wèn)題。 void HC595_Write(unsigned char dat) { unsigned char i; RCK=0; for(i=0;i<8;i++) { SCK=0; SER=dat>>7; dat<<=1; SCK=1; _nop_(); } RCK=1; } |
程序沒(méi)有什么明顯問(wèn)題,仿真成功不等于實(shí)物就能成功。把595驅(qū)動(dòng)代碼調(diào)整一下試試。
|
Powered by 單片機(jī)教程網(wǎng)