?? main.c
字號:
/******************************************************************************
*
* 通過鍵盤、LCD來進行超低功耗實驗
* 在一段時間內,如果用戶沒有進行按鍵操作,系統將進入“睡眠”--低功耗狀態
* 用戶按鍵后,系統從低功耗狀態轉到正常的工作狀態
* 在非低功耗狀態下,程序接收鍵盤按鍵執行加法器操作(因為鍵盤和LCD限制不能實現復雜
* 的功能,如乘法、減法、除法等).
*
*******************************************************************************/
#include <msp430x44x.h>
#include "lcd.c"
#include "keyBoard12.c"
/*******************************************************************************/
unsigned int wait_Time;
unsigned long num1,num2;
/*******************************************************************************/
extern void sleep_Mode();
void init_BT();
void show_Data(unsigned long);
/*******************************************************************************
* main()函數
********************************************************************************/
void main(void)
{
char len=0;
WDTCTL = WDTHOLD + WDTPW; //停止看門狗
init_BT(); //初始化Basic Timer
init_Keyboard(); //鍵盤初始化
init_LCD(); //LCD初始化
_EINT(); //開中斷
while(1)
{
lcd_Display(); // LCD顯示
key_Event(); // 檢測鍵盤事件
if(key_Flag==1)
{
switch (key_val)
{
case 10: //對應 清零
num1=0;
num2=0;
len=0;
show_Data(num2); // 填寫0到LCD緩沖區
break;
case 11: // 對應 +
num1= num1 + num2;
show_Data(num1); // 顯示上次運算結果
num2=0;
len=0;
break;
default: // 數字 0到9
len += 1;
if(len>7) break; // 限制輸入數字個數
num2=num2*10+key_val;
show_Data(num2); // 顯示當前輸入數字
break;
}
key_Flag = 0;
wait_Time = 0; // 重新設置wait_Time
}
}
}
/********************************************************************
*
* 按鍵觸發中斷后,設置CPU、LCD、鍵盤的正常工作
*
*********************************************************************/
#pragma vector = PORT1_VECTOR
__interrupt void active_mode()
{
P1IFG &= 0x00; //清除標識
LCDCTL |= 0x01; // 重新初始化LCD,LCDON = 1
P1IE &= 0x01; //取消中斷使能
init_Keyboard();
IE2 |= 0x80; // 使能bt中斷
__bic_SR_register_on_exit(LPM0_bits); // 退出低功耗模式
}
/********************************************************************
*
* Basic Timer 中斷向量
*********************************************************************/
#pragma vector = BASICTIMER_VECTOR
__interrupt void get_Time()
{
wait_Time += 1; // 計數器加1
if(wait_Time >= 40000) // 是否等待時間到10s
{ //
wait_Time = 0; // 等待時間計數器清零
sleep_Mode(); // 處理設備進入適當狀態
__bis_SR_register_on_exit(LPM0_bits);// cpu進入低功耗
}
}
/********************************************************************
*
* 初始化Basic Timer
*
********************************************************************/
void init_BT()
{
BTCTL =BT_MDLY_0_25; // Basic Timer 1 中斷頻率
IE2 |= 0x80; // 使能bt中斷
}
/********************************************************************
*
* 把十進制數的每一位都填充到LCD緩沖
*
*********************************************************************/
void show_Data(unsigned long num)
{
char tmp1;
for(tmp1=0;tmp1<7;tmp1++)
{
lcd_Buf[tmp1] = num%10; // 依次取數
num = num/10; // 數字除以10
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -