本程序是《MSP430系列单片机系统工程设计与实践》书里面的源码,(包含工程文件 (例3.1.6))完整例程下载:http://www.51hei.com/bbs/dpj-46245-1.html
关于本程序的详细解说大家可以点击上图下载电子书
main.c上面程序的调用方法:
- #include <msp430x42x.h>
- #include "BasicTimer.h"
- #define LED1_ON P1OUT |= BIT1
- #define LED1_OFF P1OUT &=~ BIT1
- unsigned char LED1_Status=0;
- /********************************************************************
- * 名 称:LED1_SetStatus()
- * 功 能:设置LDE1的状态
- * 入口参数: 0:灭 1:亮 2:慢闪 3:快闪
- * 出口参数:无
- ********************************************************************/
- void LED1_SetStatus (unsigned char Status)
- {
- LED1_Status= Status;
- }
- /********************************************************************
- * 名 称:LED1_Process()
- * 功 能:LED1处理任务
- * 入口参数:Ticks: 该函数每秒被调用的次数。
- * 出口参数:无
- * 说 明: 该函数需要被周期性地调用。可放于主循环或定时中断内
- ********************************************************************/
- 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; // 配置晶振负载电容
- P1DIR |= BIT1 + BIT3 + BIT4; // 三个LED所在IO口设为输出
- P1OUT =0; // 全灭
- BT_Init(16); // BasicTimer设为1/16秒中断一次
- while(1)
- {
- Cpu_SleepWaitBT(); //休眠,等待BT唤醒,以下代码1/16秒执行一次
- LED1_Process (16); //LED1状态处理任务
- 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秒
- }
- }
复制代码
|