|
單片機(jī) 74ls164 IO 口驅(qū)動(dòng)程序 串入并出 源代碼(C語(yǔ)言 附源文件及仿真程序) 因?yàn)?9c2051總共才有20個(gè)引腳 所以在實(shí)現(xiàn)復(fù)雜功能的單片機(jī)應(yīng)用中 節(jié)約針腳的使用顯得尤為重要 我最近在做 單片機(jī)項(xiàng)目時(shí)已開始客戶要求的功能少 所以采用 89c2051的p1口直接驅(qū)動(dòng) 兩個(gè)led數(shù)碼管(外加兩個(gè)掃描控制腳 p3_3 p3_4)這樣光顯示部分就占用了9個(gè)腳 開始的幾個(gè)控制系統(tǒng)還可以滿足需要 可是后來(lái) 客戶要一次加 三個(gè)功能 1.水平開關(guān)輸入 2.缺水開關(guān)輸入 3.狀態(tài)報(bào)警輸出 因?yàn)橹白龅某绦?20個(gè)腳正好全部用上 所以這次再加功能 再不更換單片機(jī)芯片的情況下 就只能 把顯示電路 改為其他方式考慮到成本問(wèn)題 采用常用的 74ls164驅(qū)動(dòng)led比較實(shí)用 (74LS164 是TTL 八位串行入/并行輸出移位寄存器) 經(jīng)過(guò)兩天的研究 現(xiàn)在終于完成了該項(xiàng)目的程序編寫工作再此次編寫過(guò)程中 我發(fā)現(xiàn) 網(wǎng)上講的大多數(shù)都是 74ls164 匯編程序的例子 c語(yǔ)言的 幾乎沒有 所以在此奉上74ls164的c語(yǔ)言的源代碼 其中驅(qū)動(dòng)共陰數(shù)碼管 和驅(qū)動(dòng)共陽(yáng)數(shù)碼管時(shí) 程序是不同的 這一點(diǎn) 其他地方 還有書上并未 明確說(shuō)明 所以在這要重點(diǎn)提一下。 c51源碼和 Proteus仿真程序下載請(qǐng)點(diǎn)擊下面鏈接(壓縮包包括 共陰、共陽(yáng)源文件 及仿真文件) #include "reg52.h" #define uint unsigned int #define uchar unsigned char sbit DAT=P1^1; sbit CLK=P1^2; uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xe7f,0xff,0x00};//0-9,-,全滅 void sendbyte(uchar byte) { uchar num,c; num=tab[byte]; for(c=0;c<8;c++) { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } } void delay_50ms(unsigned int t) { unsigned int j; for(;t>0;t--) for(j=6245;j>0;j--) {;} }
main() { unsigned char h; while(1){ for(h=0;h<10;h++){ delay_50ms(1); sendbyte(h); delay_50ms(10); } h=0; } }
|