熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2021-12-31 19:50
正文摘要:定時(shí)器的代碼風(fēng)格參考了金沙灘宋老師的寫(xiě)法,74HC595的驅(qū)動(dòng)代碼參考了B站up主金善愚的寫(xiě)法(他沒(méi)用到定時(shí)器去實(shí)現(xiàn)流水燈,只是不停的用延時(shí))我看了一下論壇好像沒(méi)有這個(gè)方面的東西,我想分享出來(lái)給大家參考參考。也希 ... |
lkc8210 發(fā)表于 2023-7-3 10:00 測(cè)試可以用,非常感謝 ![]() |
lxm41577 發(fā)表于 2023-6-12 11:41 原理圖呢? 按你的代碼推斷 單片機(jī)每次只輸出8位數(shù)據(jù) 以你的描述來(lái)看 你用了并聯(lián)的接線方法 應(yīng)改用串聯(lián)的接線方法并在代碼中輸出16位數(shù)據(jù) ![]()
|
lkc8210 發(fā)表于 2023-6-10 15:28 大蝦幫幫忙看看,指導(dǎo)指導(dǎo)一下 |
lkc8210 發(fā)表于 2023-6-10 15:28 我這個(gè)程序在運(yùn)行時(shí),2片的燈同時(shí)運(yùn)行一樣的結(jié)果,2片同時(shí)在流水,不會(huì)是第1片運(yùn)行完,第1片不運(yùn)行,第2片運(yùn)行 SDATA_595 EQU P1.0 ;串行數(shù)據(jù)輸入 SCLK_595 EQU P1.2 ;移位時(shí)鐘脈沖 RCK_595 EQU P1.1 ;輸出鎖存器控制脈沖 ;================================================ ORG 0000H LJMP MAIN ORG 0030H ;================================================ MAIN:MOV SP,#60H MOV R0,#0FEH MAIN1: CALL OUT_595 CALL DELAY MOV A,R0 RL A MOV R0,A JMP MAIN1 ;--------------------------------------------------------------- ;輸出鎖存器輸出數(shù)據(jù)子程序 ;--------------------------------------------------------------- OUT_595: MOV R4,#08H MOV A,R0 WR_LOOP: RLC A MOV SDATA_595,C SETB SCLK_595 ;上升沿發(fā)生移位 NOP NOP CLR SCLK_595 DJNZ R4,WR_LOOP CLR RCK_595 NOP NOP SETB RCK_595 ;上升沿將數(shù)據(jù)送到輸出鎖存器 NOP NOP NOP CLR RCK_595 RET ;-------------------------------------------------------------- ;延時(shí)子程序 ;-------------------------------------------------------------- DELAY:MOV R5,#03H DEL0:MOV R6,#0FFH DEL1:MOV R7,#0FFH DJNZ R7,$ DJNZ R6,DEL1 DJNZ R5,DEL0 RET ;--------------------------------------------------------------- END |
lxm41577 發(fā)表于 2023-6-8 16:45 先把你懂的寫(xiě)出來(lái) |
各位前輩大蝦,能不能給個(gè) 2塊74HC595實(shí)現(xiàn)16只LED流水燈 程序是匯編的,本人只會(huì)匯編,C有些看不了,麻煩一下 |
能達(dá)到目的就用延時(shí)好了,干嘛非得給自己找難題用定時(shí)器,就這么簡(jiǎn)單的程序等定時(shí)器定時(shí)的時(shí)候 單片機(jī)不也是在空轉(zhuǎn)白費(fèi)力氣嗎,不要為了問(wèn)題給自己找麻煩。編程是個(gè)循序漸進(jìn)的修煉過(guò)程, 等真正需要定時(shí)器時(shí)候再說(shuō) |
這個(gè)問(wèn)題太簡(jiǎn)單,其實(shí)只是控制16個(gè)LED1一片595就可以了,更簡(jiǎn)單一點(diǎn)直接用8個(gè)IO口控制也行(4*4=16) |
shuisherr 發(fā)表于 2023-2-10 20:25 不知道玩什么需要那么多輸出,而且還要占空比,2片串聯(lián)595就有時(shí)差,2片并聯(lián)可以消除時(shí)差; 要595弄占空比頻率允許的話可以實(shí)現(xiàn),就是發(fā)送的時(shí)間時(shí)空比,是要荔枝? |
xianfajushi 發(fā)表于 2023-2-10 09:09 感謝老師的回復(fù),我用數(shù)組和switch寫(xiě)出來(lái)了,現(xiàn)在碰到新的問(wèn)題了,就是595怎么輸出pwm信號(hào),595是串輸入并輸出,那么應(yīng)該一次輸出一個(gè)波形,如果占空比50%就應(yīng)該前16個(gè)燈亮,后16個(gè)燈滅。這個(gè)怎么用代碼輸出的?找遍了全網(wǎng)沒(méi)找到。。。 |
我用兩只595驅(qū)動(dòng)過(guò)8位數(shù)碼管,就是動(dòng)態(tài)掃描。 |
shuisherr 發(fā)表于 2022-6-20 09:26 用環(huán)移指令。 _crol_ int LED_data=0x0003; while(1) { hc595_sent_data(LED_data&0xff); hc595_sent_data(LED_data>>8); hc595_LE_on(); LED_data= _irol_(LED_data,1); } |
![]() |
shuisherr 發(fā)表于 2023-2-9 23:51 我寫(xiě)的一組荔枝擴(kuò)展就是3組4組都可以的如法炮制. |
shuisherr 發(fā)表于 2023-2-9 23:51 就寫(xiě)一個(gè)運(yùn)行驗(yàn)證過(guò)的荔枝
|
shuisherr 發(fā)表于 2023-2-9 23:51 修改一下sl=3;P3=sl;if((sl*=2)>128)sl=3;這個(gè)計(jì)算公式就實(shí)現(xiàn)循環(huán)點(diǎn)亮相鄰2個(gè)燈了. |
shuisherr 發(fā)表于 2023-2-9 23:51 很簡(jiǎn)單,IO組送值3則引腳1和2高電平類推送6則引腳2和3高電平... |
xianfajushi 發(fā)表于 2022-6-20 20:49 你這個(gè)邏輯沒(méi)看懂,初學(xué)者 ![]() |
shuisherr 發(fā)表于 2022-6-20 09:26 簡(jiǎn)單得很,如果能通常IO實(shí)現(xiàn),595也一樣道理,不過(guò)就是把數(shù)據(jù)發(fā)送而已。簡(jiǎn)述:sl=3;P3=sl;if((sl*=2)==128)sl=3; |
如果一次亮兩個(gè)燈,一直往前亮應(yīng)該怎么寫(xiě),比如32個(gè)燈,第一次亮1,2。第二次亮2,3。第三次亮3,4。。。。一直往前亮怎么寫(xiě)比較合理 |
假定,你是真的想知道更好的寫(xiě)法, 如果,僅僅只是流水燈的話,HC595 應(yīng)該這樣用: void InterruptTimer0() interrupt 1 { static uint cnt = 0; static uchar j = 0; uchar i; TH0 = T0RH; TL0 = T0RL; if(++cnt>=500) { cnt = 0; for(i=0;i<16;i++) { if(i == j) HC595_DS = 1; else HC595_DS = 0; HC595_SH_CP = 1; HC595_SH_CP = 0; } HC595_ST_CP = 1; HC595_ST_CP = 0; j++; j &= 0x0f; } } |
Powered by 單片機(jī)教程網(wǎng)