下面是本實例中模塊化程序設計的.h文件 /***************************** 74hc595.h ***********************************/ /*74hc595與單片機的引腳連接 /MR(10腳) VCC 低點平時將移位寄存器的數據清零。通常將它接Vcc /OE(13腳) PG4 高電平時禁止輸出(高阻態)。 如果單片機的引腳不緊張,用一個引腳控制它, 可以方便地產生閃爍和熄滅效果。比通過數據端移位控制要省時省力。 ST_CP(12腳) PG1 上升沿時移位寄存器的數據進入數據存儲寄存器, 下降沿時存儲寄存器數據不變。通常將RCK置為低電平, 當移位結束后,在RCK端產生一個正脈衝(5V時,大於幾十納秒就行了。 通常都選微秒級),更新顯示數據。 SH_CP(11腳) PG0 上升沿時數據寄存器的數據移位。QA-->QB-->QC-->...-->QH; 下降沿移位寄存器數據不變。(脈衝寬度:5V時,大於幾十納秒就行了。 通常都選微秒級) DS(14) PG2 串列數據輸入端。 */ #ifndef __HC595_H__ #define __HC595_H__ #include <avr/io.h> //io埠寄存器配置文件,必須包含 #include <util/delay.h> //GCC中的延時函數頭文件 #define HC595_latch (1 << PG1) //上升沿數據打入8位鎖存器,下降沿鎖存器數據不變 #define HC595_sclk (1 << PG0) //上升沿數據移位,下降沿數據不變 #define HC595_oe (1 << PG4) //低電平,8位數據鎖存器輸出,高電平輸出高組態 #define HC595_data (1 << PG2) //串列數據輸入端 #define SET_HC595_latch (PORTG |= (1 << PG1)) #define CLR_HC595_latch (PORTG &= ~(1 << PG1)) #define SET_HC595_sclk (PORTG |= (1 << PG0)) #define CLR_HC595_sclk (PORTG &= ~(1 << PG0)) #define SET_HC595_data (PORTG |= (1 << PG2)) #define CLR_HC595_data (PORTG &= ~(1 << PG2)) #define SET_HC595_oe (PORTG |= (1 << PG4)) #define CLR_HC595_oe (PORTG &= ~(1 << PG4)) void HC595_port_init(void); //595埠初始化 void HC595_Send_Data(unsigned char byte); //發送一個位元組 void HC595_Output_Data(unsigned char data); //發送字元串 #endif
/******************************** 74hc595.c **************************************/ #include "hc595.h" //595埠初始化 void HC595_port_init(void) { PORTG = 0x00; DDRG |= (1 << PG0) | (1 << PG1) | (1 << PG2) | (1 << PG4); } //發送一個位元組 void HC595_Send_Data(unsigned char byte) { unsigned char i; //CLR_HC595_latch; for(i = 0;i < 8;i++) { if(byte & 0x80) { SET_HC595_data; } else { CLR_HC595_data; } byte <<=1; SET_HC595_sclk; //上升沿數據移位 CLR_HC595_sclk; } SET_HC595_latch; CLR_HC595_latch; } //發送字元串 void HC595_Output_Data(unsigned char data) { CLR_HC595_latch; //下降沿鎖存器數據不變 HC595_Send_Data(data); SET_HC595_latch; //上升沿數據打入8位鎖存器 } 在主程序中我們使用預定義語句將.h文件包含到了主程序文件中,那麼我們怎樣實現將.c文件編譯到整個項目程序中呢?在這裡我們只要在makefile文件中將這個.c文件加進去就可以了,如下圖所示,在SRC = $(TARGET).C的後面空一格,然後輸入我們所定義的.c文件的名稱,然後保存makefile文件的更改。最後進行編譯就可以了,編譯的時候如果我們仔細觀察編譯器的輸出信息,會發現不但編譯了main.c文件,同時也編譯了74hc595.c文件。 |