天天看點

avr單片機動态數位管c語言,AVR單片機8位數位管顯示的程式實作

//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檔案。