//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相關的函數定義部分放在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檔案。