mcb0632
級別: *
![]() |
各位大俠,請幫我 想用s7-200驅動(dòng)數碼管,數碼管使用74595驅動(dòng),74595是一個(gè)移位寄存鎖存IC。 我是新手,水平太差,在網(wǎng)上找了幾個(gè)程序,都用不了,估計是時(shí)序配合不好。 請各位大俠指點(diǎn),如能直接給出程序,就太好了。只要將“123456”顯示出來(lái)就行(我買(mǎi)的板子是成品的,6位顯示)。 關(guān)鍵是移位輸出和時(shí)序配合上,搞不明白。 謝謝! 以下74595資料來(lái)自網(wǎng)上: 74LS595,74HC595中文資料 74595的數據端: QA--QH: 八位并行輸出端,可以直接控制數碼管的8個(gè)段。 QH': 級聯(lián)輸出端。我將它接下一個(gè)595的SI端。 SI: 串行數據輸入端。 74595的控制端說(shuō)明: /SCLR(10腳): 低點(diǎn)平時(shí)將移位寄存器的數據清零。通常我將它接Vcc。 SCK(11腳):上升沿時(shí)數據寄存器的數據移位。Q1-->Q2-->Q3-->...-->Q7;下降沿移位寄存器數據不變。(脈沖寬度:5V時(shí),大于幾十納秒就行了。我通常都選微秒級) RCK(12腳):上升沿時(shí)移位寄存器的數據進(jìn)入數據存儲寄存器,下降沿時(shí)存儲寄存器數據不變。通常我將RCK置為低電平,當移位結束后,在RCK端產(chǎn)生一個(gè)正脈沖(5V時(shí),大于幾十納秒就行了。我通常都選微秒級),更新顯示數據。 /G(13腳): 高電平時(shí)禁止輸出(高阻態(tài))。如果單片機的引腳不緊張,用一個(gè)引腳控制它,可以方便地產(chǎn)生閃爍和熄滅效果。比通過(guò)數據端移位控制要省時(shí)省力。 注:74164和74595功能相仿,都是8位串行輸入轉并行輸出移位寄存器。74164的驅動(dòng)電流(25mA)比74595(35mA)的要小,14腳封裝,體積也小一些。 74595的主要優(yōu)點(diǎn)是具有數據存儲寄存器,在移位的過(guò)程中,輸出端的數據可以保持不變。這在串行速度慢的場(chǎng)合很有用處,數碼管沒(méi)有閃爍感。 與164只有數據清零端相比,595還多有輸出端時(shí)能/禁止控制端,可以使輸出為高阻態(tài)。 74HC595是具有8位移位寄存器和一個(gè)存儲器,三態(tài)輸出功能。 移位寄存器和存儲器是分別的時(shí)鐘。數據在SCHcp的上升沿輸入,在STcp的上升沿進(jìn)入的存儲寄存器中去。如果兩個(gè)時(shí)鐘連在一起,則移位 寄存器總是比存儲寄存器早一個(gè)脈沖。移位寄存器有一個(gè)串行移位輸入(Ds),和一個(gè)串行輸出(Q7’),和一個(gè)異步的低電平復位,存儲寄存器有一個(gè)并行8位的,具備三態(tài)的總線(xiàn)輸出,當使能OE時(shí)(為低電平),存儲寄存器的數據輸出到總線(xiàn)。 74HC595各個(gè)引腳的功能: Q1~7 是并行數據輸出口,即儲寄存器的數據輸出口 Q7' 串行輸出口,其應該接SPI總線(xiàn)的MISO接口 STcp 存儲寄存器的時(shí)鐘脈沖輸入口 SHcp 移位寄存器的時(shí)鐘脈沖輸入口 OE的非 輸出使能端 MR的非 芯片復位端 Ds 串行數據輸入端 程序說(shuō)明: 每當spi_shcp上升沿到來(lái)時(shí),spi_ds引腳當前電平值在移位寄存器中左移一位,在下一個(gè)上升沿到來(lái)時(shí)移位寄存器中的所有位都會(huì )向左移一位, 同時(shí)Q7'也會(huì )串行輸出移位寄存器中高位的值, 這樣連續進(jìn)行8次,就可以把數組中每一個(gè)數(8位的數)送到移位寄存器; 然后當spi_stcp上升沿到來(lái)時(shí),移位寄存器的值將會(huì )被鎖存到鎖存器里,并從Q1~7引腳輸出 void hc595send_data(uint8 data)//要傳輸的數據,建議用數組的方法來(lái)查詢(xún) { uint8 i; IO0CLR = spi_stcp; for(i=0;i<8;i++) { IO0CLR = spi_shcp; if((data&0x80)!=0)IO0SET = spi_ds; else IO0CLR = spi_ds; data <<= 1; IO0SET = spi_shcp; } IO0SET = spi_stcp; } |
---|---|
|
mcb0632
級別: *
![]() |
這兩天,一邊看手冊,一邊試著(zhù)寫(xiě)了個(gè)測試程序。大體如下: LD SM0.0 MOVB 16#FF, MB0 //將16進(jìn)制數 FF 放入MB0中 LD SM0.1 FOR VW100, +1, +8 //設置一個(gè)8次的循環(huán),只執行一次 LD SM0.0 SRB MB0, 1 //右移MB0中的數據,將每一位移到M0.0中 LD M0.0 =I Q0.0 //將M0.0立即輸出到Q0.0 LD SM0.0 LD SM0.0 =I Q0.1 //Q0.1輸出1,時(shí)鐘信號上升 LD SM0.0 LD SM0.0 NOT =I Q0.1 //Q0.1輸出0,時(shí)鐘信號下降 LD SM0.0 NEXT //結束8次的循環(huán) LD SM0.1 =I Q0.2 //Q0.2輸出鎖存使能信號,只執行1次 LD SM0.0 LD SM0.0 END //程序結束 由幾個(gè)問(wèn)題需請教: 1 用右移還是左移,才能將MB0中的數據逐位移到M0.0中 2 整個(gè)過(guò)程的時(shí)序,對不對? 3 我剛接觸PLC,整個(gè)思路由不符合規則或不規范的,請指出來(lái)。 謝謝! [ 此帖被mcb0632在2010-12-05 17:07重新編輯 ] |
---|---|
|