|
本程序是《MSP430系列單片機系統(tǒng)工程設(shè)計與實踐》書里面的源碼,(包含工程文件 (例3.1.6))完整例程下載:http://www.zg4o1577.cn/bbs/dpj-46245-1.html

關(guān)于本程序的詳細(xì)解說大家可以點擊上圖下載電子書
main.c上面程序的調(diào)用方法:
- #include <msp430x42x.h>
- #include "BasicTimer.h"
- #define LED1_ON P1OUT |= BIT1
- #define LED1_OFF P1OUT &=~ BIT1
- unsigned char LED1_Status=0;
- /********************************************************************
- * 名 稱:LED1_SetStatus()
- * 功 能:設(shè)置LDE1的狀態(tài)
- * 入口參數(shù): 0:滅 1:亮 2:慢閃 3:快閃
- * 出口參數(shù):無
- ********************************************************************/
- void LED1_SetStatus (unsigned char Status)
- {
- LED1_Status= Status;
- }
- /********************************************************************
- * 名 稱:LED1_Process()
- * 功 能:LED1處理任務(wù)
- * 入口參數(shù):Ticks: 該函數(shù)每秒被調(diào)用的次數(shù)。
- * 出口參數(shù):無
- * 說 明: 該函數(shù)需要被周期性地調(diào)用。可放于主循環(huán)或定時中斷內(nèi)
- ********************************************************************/
- void LED1_Process (Ticks)
- {
- static unsigned int LED1_TimerS;
- static unsigned int LED1_TimerF;
- LED1_TimerS++; if(LED1_TimerS >= Ticks ) LED1_TimerS=0;
- LED1_TimerF++; if(LED1_TimerF >= Ticks/4) LED1_TimerF=0;
- switch(LED1_Status)
- {
- case 0: LED1_OFF; break;
- case 1: LED1_ON; break;
- case 2: if(LED1_TimerS >= Ticks/2) LED1_ON;
- else LED1_OFF;
- break;
- case 3: if(LED1_TimerF >= Ticks/8) LED1_ON;
- else LED1_OFF;
- break;
- }
- }
- void main( void )
- {
- unsigned int Timer=0;
- WDTCTL = WDTPW + WDTHOLD; // 停止看門狗
- FLL_CTL0 |= XCAP18PF; // 配置晶振負(fù)載電容
- P1DIR |= BIT1 + BIT3 + BIT4; // 三個LED所在IO口設(shè)為輸出
- P1OUT =0; // 全滅
- BT_Init(16); // BasicTimer設(shè)為1/16秒中斷一次
- while(1)
- {
- Cpu_SleepWaitBT(); //休眠,等待BT喚醒,以下代碼1/16秒執(zhí)行一次
- LED1_Process (16); //LED1狀態(tài)處理任務(wù)
- Timer++;
- if(Timer==80) LED1_SetStatus(0); //滅5秒
- if(Timer==160) LED1_SetStatus(1); //亮5秒
- if(Timer==240) LED1_SetStatus(2); //慢閃5秒
- if(Timer==320) {LED1_SetStatus(3); Timer=0;} //快閃5秒
- }
- }
復(fù)制代碼
|
|