本部分內(nèi)容設(shè)定了隱藏,需要回復(fù)后才能看到
OK ,到此一個簡單的工程模板就建立起來了,以后我們再新建源文件和頭文件的時候,就可以直接保存到src文件目錄下面了。
下面我們開始編寫各個模塊文件。
首先編寫Timer.c 這個文件主要內(nèi)容就是定時器初始化,以及定時器中斷服務(wù)函數(shù)。其內(nèi)容如下。
#include <reg52.h>
bit g_bSystemTime1Ms = 0 ; // 1MS系統(tǒng)時標
void Timer0Init(void)
{
TMOD &= 0xf0 ;
TMOD |= 0x01 ; //定時器0工作方式1
TH0 = 0xfc ; //定時器初始值
TL0 = 0x66 ;
TR0 = 1 ;
ET0 = 1 ;
}
void Time0Isr(
void)
interrupt 1
{
TH0 = 0xfc ; //定時器重新賦初值
TL0 = 0x66 ;
g_bSystemTime1Ms = 1 ; //1MS時標標志位置位
}
由于在Led.c文件中需要調(diào)用我們的g_bSystemTime1Ms變量。同時主函數(shù)需要調(diào)用Timer0Init()初始化函數(shù),所以應(yīng)該對這個變量和函數(shù)在頭文件里作外部聲明。以方便其它函數(shù)調(diào)用。
Timer.h 內(nèi)容如下。
#ifndef _TIMER_H_
#define _TIMER_H_
extern void Timer0Init(void) ;
extern bit g_bSystemTime1Ms ;
#endif
完成了定時器模塊后,我們開始編寫LED驅(qū)動模塊。
Led.c 內(nèi)容如下:
#include <reg52.h>
#include "MacroAndConst.h"
#include "Led.h"
#include "Timer.h"
static uint16 g_u16LedTimeCount = 0 ; //LED計數(shù)器
static uint8 g_u8LedState = 0 ; //LED狀態(tài)標志, 0表示亮,1表示熄滅
#define LED P0 //定義LED接口
#define LED_ON() LED = 0x00 ; //所有LED亮
#define LED_OFF() LED = 0xff ; //所有LED熄滅
void LedProcess(
void)
{
if(0 == g_u8LedState) //如果LED的狀態(tài)為亮,則點亮LED
{
LED_ON() ;
}
else //否則熄滅LED
{
LED_OFF() ;
}
}
void LedStateChange(
void)
{
if(g_bSystemTime1Ms) //系統(tǒng)1MS時標到
{
g_bSystemTime1Ms = 0 ;
g_u16LedTimeCount++ ; //LED計數(shù)器加一
if(g_u16LedTimeCount >= 500) //計數(shù)達到500,即500MS到了,改變LED的狀態(tài)。
{
g_u16LedTimeCount = 0 ;
g_u8LedState = ! g_u8LedState ;
}
}
}
這個模塊對外的借口只有兩個函數(shù),因此在相應(yīng)的Led.h 中需要作相應(yīng)的聲明。
Led.h 內(nèi)容:
#ifndef _LED_H_
#define _LED_H_
extern void LedProcess(
void) ;
extern void LedStateChange(
void) ;
#endif
這兩個模塊完成后,我們將其C文件添加到工程中。然后開始編寫主函數(shù)里的代碼。
如下所示:
#include <reg52.h>
#include "MacroAndConst.h"
#include "Timer.h"
#include "Led.h"
sbit LED_SEG = P1^4; //數(shù)碼管段選
sbit LED_DIG = P1^5; //數(shù)碼管位選
sbit LED_CS11 = P1^6; //led控制位
void main(
void)
{
LED_CS11 = 1 ; //74HC595輸出允許
LED_SEG = 0 ; //數(shù)碼管段選和位選禁止(因為它們和LED共用P0口)
LED_DIG = 0 ;
Timer0Init() ;
EA = 1 ;
while(1)
{
LedProcess() ;
LedStateChange() ;
}
}
整個工程截圖如下:
至此,第三章到此結(jié)束。
一起來總結(jié)一下我們需要注意的地方吧
[color=#FF0000]1. C語言源文件(*.c)的作用是什么
2. C語言頭文件(*.h)的作用是什么
3. typedef 的作用
4. 工程模板如何組織
5. 如何創(chuàng)建一個多模塊(多文件)的工程
[ 此貼被紅金龍吸味在2009-12-28 21:04重新編輯 ]