📄 key.c
字号:
#ifndef MSP430F449_H
#include <msp430x44x.h>
#endif
#define LEDLen 12
#define led9 BIT0
#define led10 BIT1
#define led11 BIT2
#define led12 BIT3
#define led13 BIT4
#define led14 BIT5
#define led15 BIT6
#define led16 BIT7
#define led17 BIT0
#define led18 BIT1
#define led19 BIT2
#define led20 BIT3
#define led21 BIT4
#define led22 BIT5
#define led23 BIT6
#define led24 BIT7
#define led25 BIT0
#define led26 BIT1
#define led27 BIT2
#define led28 BIT3
#define led29 BIT4
#define led30 BIT5
#define led31 BIT6
#define led32 BIT7
#define led33 BIT0
#define led34 BIT1
#define led35 BIT2
#define led36 BIT3
#define led37 BIT4
#define led38 BIT5
#define CONFIRM 0x0E //KEY14
#define LOAD 0x0D //KEY13
#define ROMOTE 0x0C //KEY12
#define FUNC 0x0B //KEY11
#define SWITCH 0x0A //KEY10
#define MODE 0x09 //KEY09
#define THREAD 0x08 //KEY08
#define DIAMETER 0x07 //KEY07
#define CURRENT 0x06 //KEY06
#define CONTROL 0x05 //KEY05
#define SENDGAS 0x04 //KEY04
#define GAS 0x03 //KEY03
#define VOLTAGE 0x02 //KEY02
#define SAVE 0x01 //KEY01
#define FLASHL_ADR 0x1080 //LAST Address
#define FLASH1_ADR 0xFC00 //1 Address
#define FLASH2_ADR 0xFA00 //2 Address
#define FLASH3_ADR 0xF800 //3 Address
//define variable
unsigned char CurrentLed_Flag; //Led flag
unsigned char VoltageLed_Flag;
unsigned char Confirm_Flag;
unsigned char DiameterLed_Flag;
unsigned char GasLed_Flag;
unsigned char FuncLed_Flag;
unsigned char ModeLed_Flag;
unsigned char Thread_Flag;
unsigned char SendGas_Flag;
unsigned char Save_Flag;
unsigned char Load_Flag;
unsigned char Switch_Flag;
unsigned char Control_Flag;
unsigned char Romote_Flag;
unsigned char OC_Flag,UV_Flag,OT_Flag;
extern unsigned char CURT_SELT,VOLE_SELT,CHAN_SELT;
unsigned char LEDBuf[LEDLen]; // 显示缓冲
/*
LEDBuf[0] = CURT1_H_DISP, LEDBuf[1] = CURT1_T_DISP, LEDBuf[2] = CURT1_D_DISP,
LEDBuf[3] = VOLE1_H_DISP, LEDBuf[4] = VOLE1_T_DISP, LEDBuf[5] = VOLE1_D_DISP,
LEDBuf[6] = FREQ_T , LEDBuf[7] = FREQ_D ,
LEDBuf[8] = LED1, LEDBuf[9] =LED2, LEDBuf[10] =LED3, LEDBuf[11] = LED4.
*/
unsigned char current[6];
unsigned char voltage[9];
extern unsigned char channel[2];
unsigned char smallLed[4];
unsigned char write_Buf[22];
unsigned char read_Buf[22];
extern const unsigned char NUM_LED[10];
//extern const unsigned char pianxuan[12]=
// {0x10,0x20,0x30,0x40,
// 0x50,0x60,0x70,0x80,
// 0x90,0xA0,0xB0,0xC0};
/*
pianxuan[0] = CURT1, pianxuan[1] = CURT2, pianxuan[2] = CURT3, pianxuan[3] = VOLE1, pianxuan[4] = VOLE2,
pianxuan[5] = VOLE3, pianxuan[6] = CHAN1, pianxuan[7] = CHAN2, pianxuan[8] = LED9~16,
pianxuan[9] = LED17~24, pianxuan[10] = LED25~32, pianxuan[11] = LED33~38.
*/
//define function
void LedDisply(void);
void Save(char* add);
void Load(char* add);
//void No_first_use(void);
//void Set_Flag(void);
void Kill_Coder_Flag(void)
{
CURT_SELT = 0;
VOLE_SELT = 0;
//FREQ_SELT = 0;
CHAN_SELT = 0;
smallLed[0] = smallLed[0]&(~led9);
LEDBuf[8] = smallLed[0];
Load_Flag=0;
Save_Flag=0;
}
void delay(unsigned int cnt);
unsigned char key_Pressed, // 是否有键值按下
key_val, // 存放键值
key_Flag; // 是否一个按下的按键已经松开,
// 即是按键的键值可以读取
const unsigned char key_Map[16]={ //设置键盘逻辑键值与程序计算键值的映射
0x01,0x05,0x09,0x0D,
0x02,0x06,0x0A,0x0E,
0x03,0x07,0x0B,0x00,
0x04,0x08,0x0C,0x00
};
/********************************************************
* 初始化键盘设备
********************************************************/
void init_Keyboard(void)
{
key_Flag = 0;// 初始化key_Flag
key_Pressed = 0;// 初始化key_Pressed
}
/*********************************************
* Check_Key(),检查按键,确认键值
*********************************************/
void check_Key(void)
{
unsigned char row ,col,tmp1,tmp2;
// tmp1用来设置P1OUT的值,使P1.4~P1.7中有一个为1
tmp1 = 0x10;
for(row=0;row<4;row++)
{
P1OUT &= 0x00; // p1.4~P1.7=0
P1OUT += tmp1; // P1.4~p1.7中有一个为1
tmp1 = 2*tmp1; // tmp1左移一位
if ((P1IN & 0x0F) > 0x00) // 是否P1IN的P1.0~P1.3中有一位为1
{
tmp2 = 0x01; // tmp2用于检测出那一位为1
for(col =0;col<0x04;col++) // 列检测
{
if((P1IN & tmp2)!=0x00) // 是否是该列
{
key_val =key_Map[ row*4 +col] ; // 获取键值
return; // 退出循环
}
tmp2 *= 2; // tmp2左移
}
}
}
P1OUT=0xf0;
}
/************************************************************
* key_Event(),检测键盘是否有键按下,如果有获取键值
*************************************************************/
void key_Event(void){
unsigned char tmp;
P1OUT |= 0xF0; // 设置P1OUT输出值
tmp = P1IN; // 获取 p1IN
if ((key_Pressed ==0x00)&&((tmp & 0x0F) > 0x00))
{ //是否有键按下
key_Pressed = 1; // 如果有按键按下,设置key_Pressed标识
delay(65500); //消除抖动
check_Key(); // 调用check_Key(),获取键值
delay(65500);
delay(65500);
//}
// else if ((key_Pressed ==1)&&((tmp & 0x0F) == 0x00))
//{ //是否按键已经释放
key_Pressed = 0; // 清除key_Pressed标识
key_Flag = 1; // 设置key_Flag标识
}
}
/********************************************************/
/*************************************************************
* Key_Process(),按键处理
*************************************************************/
void Key_Process(void)
{
unsigned char jianzhi,Chan_Num;
jianzhi=key_val;
P1OUT=0xf0;
switch( jianzhi )
{
case VOLTAGE:
if(VoltageLed_Flag==0)
{
LEDBuf[3] = NUM_LED[voltage[0]];
LEDBuf[4] = NUM_LED[voltage[1]]&0x7F;
LEDBuf[5] = NUM_LED[voltage[2]];
smallLed[0] = smallLed[0]&(~led14)&(~led13)&(~led11)&(~led10)|led12;
LEDBuf[8] = smallLed[0];
delay(500);
VoltageLed_Flag=1;
delay(500);
LedDisply();
}
else if(VoltageLed_Flag==1)
{
LEDBuf[3] = NUM_LED[voltage[3]];
LEDBuf[4] = NUM_LED[voltage[4]]&0x7F;
LEDBuf[5] = NUM_LED[voltage[5]];
smallLed[0] = smallLed[0]&(~led14)&(~led13)&(~led12)&(~led10)|led11;
LEDBuf[8] = smallLed[0];
delay(500);
VoltageLed_Flag=2;
delay(500);
LedDisply();
}
else
{
LEDBuf[3] = NUM_LED[voltage[6]];
LEDBuf[4] = NUM_LED[voltage[7]]&0x7F;
LEDBuf[5] = NUM_LED[voltage[8]];
smallLed[0] = smallLed[0]&(~led14)&(~led13)&(~led12)&(~led11)|led10;
LEDBuf[8] = smallLed[0];
delay(500);
VoltageLed_Flag=0;
delay(500);
LedDisply();
}
CURT_SELT = 0;
VOLE_SELT = 1;
CHAN_SELT = 0;
key_Flag = 0;
break;
case CURRENT:
if(CurrentLed_Flag==0)
{
LEDBuf[0] = NUM_LED[current[0]];
LEDBuf[1] = NUM_LED[current[1]];
LEDBuf[2] = NUM_LED[current[2]];
smallLed[0] = smallLed[0]&(~led12)&(~led11)&(~led10)&(~led13)|led14;
LEDBuf[8] = smallLed[0];
delay(500);
CurrentLed_Flag=1;
delay(500);
LedDisply();
}
else
{
LEDBuf[0] = NUM_LED[current[3]];
LEDBuf[1] = NUM_LED[current[4]];
LEDBuf[2] = NUM_LED[current[5]];
smallLed[0] = smallLed[0]&(~led12)&(~led11)&(~led10)&(~led14)|led13;
LEDBuf[8] = smallLed[0];
delay(500);
CurrentLed_Flag=0;
delay(500);
LedDisply();
}
CURT_SELT = 1;
VOLE_SELT = 0;
CHAN_SELT = 0;
key_Flag = 0;
break;
case DIAMETER:
if(DiameterLed_Flag==0)
{
smallLed[1] = smallLed[1]&(~led17)&(~led18)&(~led19)&(~led20)&(~led21)|led24;
LEDBuf[9] = smallLed[1];
delay(500);
DiameterLed_Flag=1;
delay(500);
LedDisply();
}
else if(DiameterLed_Flag==1)
{
smallLed[1] = smallLed[1]&(~led17)&(~led18)&(~led19)&(~led20)&(~led24)|led21;
LEDBuf[9] = smallLed[1];
delay(500);
DiameterLed_Flag=2;
delay(500);
LedDisply();
}
else if(DiameterLed_Flag==2)
{
smallLed[1] = smallLed[1]&(~led17)&(~led18)&(~led19)&(~led21)&(~led24)|led20;
LEDBuf[9] = smallLed[1];
delay(500);
DiameterLed_Flag=3;
delay(500);
LedDisply();
}
else if(DiameterLed_Flag==3)
{
smallLed[1] = smallLed[1]&(~led17)&(~led18)&(~led20)&(~led21)&(~led24)|led19;
LEDBuf[9] = smallLed[1];
delay(500);
DiameterLed_Flag=4;
delay(500);
LedDisply();
}
else if(DiameterLed_Flag==4)
{
smallLed[1] = smallLed[1]&(~led17)&(~led19)&(~led20)&(~led21)&(~led24)|led18;
LEDBuf[9] = smallLed[1];
delay(500);
DiameterLed_Flag=5;
delay(500);
LedDisply();
}
else
{
smallLed[1] = smallLed[1]&(~led18)&(~led19)&(~led20)&(~led21)&(~led24)|led17;
LEDBuf[9] = smallLed[1];
delay(500);
DiameterLed_Flag=0;
delay(500);
LedDisply();
}
//Kill_Coder_Flag();
key_Flag = 0;
break;
case GAS:
if(GasLed_Flag==0)
{
smallLed[1] = smallLed[1]&(~led23)|led22;
LEDBuf[9] = smallLed[1];
delay(500);
GasLed_Flag=1;
delay(500);
LedDisply();
}
else
{
smallLed[1] = smallLed[1]&(~led22)|led23;
LEDBuf[9] = smallLed[1];
delay(500);
GasLed_Flag=0;
delay(500);
LedDisply();
}
//Kill_Coder_Flag();
key_Flag = 0;
break;
case THREAD:
if(Thread_Flag==0)
{
smallLed[0] = smallLed[0]|led15;
LEDBuf[8] = smallLed[0];
delay(500);
Thread_Flag=1;
delay(500);
LedDisply();
}
else
{
smallLed[0] = smallLed[0]&(~led15);
LEDBuf[8] = smallLed[0];
delay(500);
Thread_Flag=0;
delay(500);
LedDisply();
}
//Kill_Coder_Flag();
key_Flag = 0;
break;
case SENDGAS:
if(SendGas_Flag==0)
{
smallLed[0] = smallLed[0]|led16;
LEDBuf[8] = smallLed[0];
delay(500);
SendGas_Flag=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -