?? main.c
字號:
/*********************************************************
程序功能:用學習板上的4X4鍵盤模擬手機上按鍵輸入的功能
----------------------------------------------------------
跳線設置:
1、拔掉跳線座J3上的跳線帽
2、將跳線座J4的3腳和2腳短接(靠左邊的兩個)
3、連接好1602液晶
----------------------------------------------------------
測試說明:1.上電后,默認配置處于顯示介紹信息界面,此時按動
K1~K16中的任意一個鍵都可以退出信息界面,進入輸入
模式。在輸入模式下,液晶第一行的最右側的字母顯示
提示了當前處于的輸入狀態:默認是處于字母輸入狀態,
"BC"表示當前處于大寫字母輸入,"SC"表示當前處于小
寫字母輸入,按動一次K15鍵可以在大小寫間切換。按動
一次K14鍵,將在字母輸入與數字輸入間切換。在數字
輸入狀態,K14鍵不可用。
2.在字符輸入狀態(大/小寫均可),按動K1~K9鍵將輸
入字母,對于每個按鍵根據按鍵次數的不同將輸入不同
的字母,用戶可以自行測試。按動K10將直接輸入符號'!'
3.在數字輸入狀態,按動K1~K10鍵將輸入1~9和0,此狀態
不支持多次按鍵,每按動一次按鍵將輸入一個數字。
4.無論在何種輸入狀態下,按K11鍵將向前消除一個字符,
按K12鍵將向后消除一個字符,按K16鍵將消除輸入的全部
字符。這三個按鍵都不支持多次按鍵。
5.在輸入狀態下隨時可以按動K13鍵退出輸入狀態回到介紹
信息界面。
*********************************************************/
#include "includes.h"
#include "msp430.h"
#include "BoardConfig.h"
//<<<<<<<<<<<<<<<鍵盤掃描開啟標志>>>>>>>>>>>>>>>>>>>>>
unsigned char b_KeyScan=0; //0--不掃描;1--掃描。
extern unsigned char b_Introduce; //介紹關閉標志,當置零時,介紹就會停止顯示。
//<<<<<<<<<<<<<<<按鍵計數清除>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uc_CleanCount=0; //清除按鍵計數時間計數。
extern unsigned char b_CleanClick; //清除按鍵計數標志,定義在KeyProcess.c中
//0--不清除;1--清除。
extern unsigned char uc_ClickCount; //按鍵連續點擊計數,定義在KeyProcess.c中。
extern unsigned char uc_KeyTemp; //按鍵鍵碼暫存,定義在KeyProcess.c中。
void delay(void);
/******************主函數*****************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
BoardConfig(0xb8); //關閉74LVC4245,數碼管和流水燈
P1DIR = 0xf0;
P1IES = 0x0f; //低四位選擇下降沿中斷
P1IE = 0x0f; //使能低四位的中斷
TACCR0 = 1639; //定時50ms
TACCTL0 |= CCIE; //使能比較中斷
TACTL = TASSEL_1 + MC_1; //計數時鐘選擇ACLK,up mode
_EINT(); //使能全局中斷
LcdReset(); //復位液晶
vIntroduce(); //顯示介紹。
while(1)
{
if(b_KeyScan==1) //如果有按鍵按下,則進行按鍵掃描和鍵碼處理。
{
b_KeyScan=0;
vKeyProcess(ucKeyScan());
}
}
}
/*******************************************
函數名稱:PORT1_ISR
功 能:按鍵消抖和開啟鍵盤掃描程序
參 數:無
返回值 :無
********************************************/
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
P1IFG = 0x00;
if(b_Introduce)
b_Introduce=0;
delay();
if((P1IN&0x0f) != 0x0f)
{
b_KeyScan=1;
}
}
/*******************************************
函數名稱:Timer_A
功 能:按鍵計數及清除
參 數:無
返回值 :無
********************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
if(b_CleanClick==1)
{
if(uc_CleanCount >= 30)
{
b_CleanClick=0; //關閉改計數。
uc_CleanCount=1; //恢復計數初值。
uc_ClickCount=1; //清除按鍵計數。
uc_KeyTemp=0;
}
else
uc_CleanCount++;
}
}
/*******************************************
函數名稱:delay
功 能:用于消抖的延時
參 數:無
返回值 :無
********************************************/
void delay(void)
{
uint tmp;
for(tmp = 12000;tmp > 0;tmp--);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -