//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文件中,如下
/********************************
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文件。