⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 这是uc/osii在msp430上移植的详细代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -