AT89C51通過74HC595鎖存器控制流水燈-------proteus模擬
阿新 • • 發佈:2018-12-11
先上圖
如圖,通過微控制器P2^0,P2^1,P2^3將控制訊號通過鎖存器傳輸到LED,從而實現流水燈小程式。
主程式如下:
#include<reg51.h> #include<intrins.h> #include<74HC595.H> void Delay1ms() //@11.0592MHz { unsigned char i, j; _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } void delays(unsigned t) //delay 500ms { t=500*t; while(t--) Delay1ms(); } void main(void) { unsigned int i; i=0x01; while(1) { Ser_IN(i); //控制訊號傳給鎖存器 Par_OUT(); //將控制訊號傳出 delays(1); i=_crol_(i,1); //迴圈左移一位 } }
標頭檔案如下:
//Note: 74HC595驅動 // __ __ //Note: MR 主復位接電源正極, OE 使能端,輸出有效接電源負極 /*--------------------------------------------*/ #ifndef __74HC595_H__ #define __74HC595_H__ /*--------------------------------------------*/ sbit SD = P2^1; //序列資料輸入 sbit ST_CK = P2^2; //儲存暫存器時鐘輸入 sbit SH_CK = P2^0; //移位暫存器時鐘輸入 /*--------------------------------------------*/ //函式宣告 void Ser_IN(unsigned char Data); //序列資料輸入 void Par_OUT(void); //序列資料輸出 //void Ser_Par(unsigned char Data); //序列輸入,並行輸出 /*--------------------------------------------*/ //序列資料輸入 void Ser_IN(unsigned char Data) { unsigned char i; for(i = 0; i < 8; i++) { SH_CK = 0; //CLOCK_MAX=100MHz SD = Data & 0x80; Data <<= 1; SH_CK = 1; } } /*--------------------------------------------*/ //並行資料輸出 void Par_OUT(void) { ST_CK = 0; ST_CK = 1; } /*--------------------------------------------*/ #endif