|
單片機 74ls164 IO 口驅動程序 串入并出 源代碼(C語言 附源文件及仿真程序) 因為89c2051總共才有20個引腳 所以在實現復雜功能的單片機應用中 節約針腳的使用顯得尤為重要 我最近在做 單片機項目時已開始客戶要求的功能少 所以采用 89c2051的p1口直接驅動 兩個led數碼管(外加兩個掃描控制腳 p3_3 p3_4)這樣光顯示部分就占用了9個腳 開始的幾個控制系統還可以滿足需要 可是后來 客戶要一次加 三個功能 1.水平開關輸入 2.缺水開關輸入 3.狀態報警輸出 因為之前做的程序 20個腳正好全部用上 所以這次再加功能 再不更換單片機芯片的情況下 就只能 把顯示電路 改為其他方式考慮到成本問題 采用常用的 74ls164驅動led比較實用 (74LS164 是TTL 八位串行入/并行輸出移位寄存器) 經過兩天的研究 現在終于完成了該項目的程序編寫工作再此次編寫過程中 我發現 網上講的大多數都是 74ls164 匯編程序的例子 c語言的 幾乎沒有 所以在此奉上74ls164的c語言的源代碼 其中驅動共陰數碼管 和驅動共陽數碼管時 程序是不同的 這一點 其他地方 還有書上并未 明確說明 所以在這要重點提一下。 c51源碼和 Proteus仿真程序下載請點擊下面鏈接(壓縮包包括 共陰、共陽源文件 及仿真文件) #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; } }
|