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

📄 keyboard.c

📁 小区可视对讲键盘检测程序.利用pt6964芯片.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<stc12c5410ad.h>
#include<buzzer.h>
#include<main.h>
#include<uart.h>
#define KEY_601 	0x61
#define KEY_501 	0x51
#define KEY_401 	0x41
#define KEY_301 	0x31
#define KEY_201 	0x21
#define KEY_101 	0x11
#define KEY_602 	0x62
#define KEY_502 	0x52
#define KEY_402 	0x42
#define KEY_302 	0x32
#define KEY_202 	0x22
#define KEY_102 	0x12
#define KEY_SURE 	0x01
#define KEY_CANCLE 	0x02
#define KEY_CENTER 	0x03
#define KEY_SET 	0x04
#define KEY_NULL 	0x00
//----------------------------------
//extern variables
//-----------------------------------
extern unsigned char buzzer_timer;
extern unsigned char buzzer_timer_trigger;
extern unsigned char display_buffer[4];
extern unsigned char current_state;
extern unsigned char send_buffer[4];

void free_state_process(unsigned char key_codea)   ;
void funcselect_state_process(unsigned char key_codeb);
void fourthfunc_process(unsigned char key_codec);
void callingcenter_process(unsigned char key_coded);
void eighteenthfunc_process(unsigned char key_codee);
/*-----------------------------------
golbal variables
-------------------------------------*/
unsigned char keyboard_busy = 0; 
unsigned char last_key = 0;
unsigned char last_key_times = 0;
unsigned char function_index = 0;

unsigned char psw_buffer[6]={0,0,0,0,0,0};
unsigned char psw_index = 0;
//---------------------------------------------
//functions about keyboard
//--------------------------------------------- 

//---------------------------------------------
//keyboard initial so that we can test keyboard
//---------------------------------------------
void keyboard_initial(void)
{
	P3M0 = P3M0 | 0x30; //P34  P35输入PM0=1,PM1=0
	P3M1 = P3M1 & 0xcf;
   	P2M0 = P2M0 | 0x30;	 //P24  P25输入PM0=1,PM1=0
	P2M1 = P2M1 & 0xcf;
}
//----------------------------------------------
//scan key board ,and return the key code
//-----------------------------------------------
unsigned char keyscan(void)
{  
	unsigned char key_code = 0;
	unsigned char seg_temp = 0;
	unsigned char bit_temp = 0;
	unsigned char return_value =0;
//save current pin values 
	if(P21 == 1)seg_temp=seg_temp|0x80;
	if(P12 == 1)seg_temp=seg_temp|0x40;
	if(P15 == 1)seg_temp=seg_temp|0x20;
	if(P16 == 1)seg_temp=seg_temp|0x10;
	if(P17 == 1)seg_temp=seg_temp|0x08;
	if(P20 == 1)seg_temp=seg_temp|0x04;
	if(P14 == 1)seg_temp=seg_temp|0x02;
	if(P23 == 1)bit_temp = bit_temp | 0x80;
	if(P22 == 1)bit_temp = bit_temp | 0x40;
	if(P11 == 1)bit_temp = bit_temp | 0x20;
	if(P13 == 1)bit_temp = bit_temp | 0x10;
// test if any key pressed
	P21 = 1;
	P12	= 1;
	P15	= 1;
	P16	= 1;
	P17	= 1;
	P20 = 1;
	P14 = 1;

 
	P23	= 0;
	P22	= 1;
	P11	= 1;
	P13	= 1;
	if(P34 == 1){key_code = 0x61;	  goto con; }
	if(P35 == 1){key_code = KEY_501;   goto con; }
	if(P24 == 1){key_code = KEY_401;   goto con; }
	if(P25 == 1){key_code = KEY_301;  goto con; }



	P23	= 1;
	P22	= 1;
	P11	= 0;
	P13	= 1;
	if(P34 == 1)key_code = KEY_602;
	if(P35 == 1)key_code = KEY_502;
	if(P24 == 1)key_code = KEY_402; 
	if(P25 == 1){key_code = KEY_302; }

con:

   if(key_code != 0)goto con2;

	P23	= 1;
	P22	= 1;
	P11	= 1;
	P13	= 0;
	if(P34 == 1){key_code = KEY_202; goto con2; }
	if(P35 == 1){key_code = KEY_102; goto con2; } 
	if(P24 == 1){key_code = KEY_CANCLE;  goto con2; }
	if(P25 == 1){key_code = KEY_SURE;  goto con2; } 








	P23	= 1;
	P22	= 0;
	P11	= 1;
	P13	= 1;
	if(P34 == 1)key_code = KEY_201;  
	if(P35 == 1)key_code = KEY_101;   
	if(P24 == 1)key_code = KEY_CENTER;
	if(P25 == 1)key_code = KEY_SET;  
con2:

//restore pins about
	if(bit_temp&0x80) P23 = 1;else P23 = 0;
	if(bit_temp&0x40) P22 = 1;else P22 = 0;
	if(bit_temp&0x20) P11 = 1;else P11 = 0;
	if(bit_temp&0x10) P13 = 1;else P13 = 0;
	if(seg_temp&0x80) P21 = 1;else P21 = 0;
	if(seg_temp&0x40) P12 = 1;else P12 = 0;
	if(seg_temp&0x20) P15 = 1;else P15 = 0;
	if(seg_temp&0x10) P16 = 1;else P16 = 0;
	if(seg_temp&0x08) P17 = 1;else P17 = 0;
	if(seg_temp&0x04) P20 = 1;else P20 = 0;
	if(seg_temp&0x02) P14 = 1;else P14 = 0;



//judge if any key definitely pressed
//situation 1: keyboard is busy
	if(keyboard_busy&&(key_code == 0)){keyboard_busy = 0;last_key = 0;return_value = key_code;}
	if(keyboard_busy&&(key_code != 0)){return_value = 0; }
//situation 2:keyboard is not busy
	if(!keyboard_busy&&(key_code == 0)){last_key_times = 0;last_key = 0;return_value = KEY_NULL;}	 //key_code ==0
	if(!keyboard_busy&&(key_code != 0))					 //key code !=0
	{									 
	if(key_code != last_key){	


	last_key = key_code;last_key_times =1;return_value = KEY_NULL;}
	else{	

								last_key_times++;
							   	if(last_key_times >= 4){
														last_key_times = 0;
														keyboard_busy = 1;
													
														return_value = key_code;
														}
								else return_value = KEY_NULL;
		 }
	}
	return return_value;
}

//--------------------------------------------------
//process the key code ,come from key scan function
//--------------------------------------------------
void key_process(unsigned char key_codex) 
{
 if((current_state&0xf8 )== STATE_FREE)free_state_process(key_codex);
 else if((current_state&0xf8) == STATE_FUNCSELECT) funcselect_state_process(key_codex);
 else if((current_state&0xf8) == STATE_FOURTHFUNC){fourthfunc_process(key_codex);}
 else if((current_state&0xf8) == STATE_CALLINGCENTER){callingcenter_process(key_codex);}
 else if((current_state&0xf8) == STATE_EIGHTEENTHFUNC){eighteenthfunc_process(key_codex);}
 else {open_buzzer();	 //BEEP
								 buzzer_timer = 125;
								 buzzer_timer_trigger = 1;}
}
//--------------------------------------------------
//process the key code ,come from key process function
//--------------------------------------------------
void free_state_process(unsigned char key_codea)
{
	if(current_state&0x07 == STATE_FREE_CALLING)
	{
	if(key_codea == KEY_CANCLE){ current_state = STATE_FREE|STATE_FREE_NOCALL;
								 open_buzzer();	 //BEEP
								 buzzer_timer = 225;
								 buzzer_timer_trigger = 1;
								 display_buffer[0]=10; //CLEAR SCREEN
								 display_buffer[1]=10;
								 display_buffer[2]=10;
								 display_buffer[3]=10;
								 send_buffer[0] = COMMAND_HEADER;
								 send_buffer[1] = CALLGUEST_CANCLE;
								 rs232_send_command();
								 return;
								}
								else return;
	}else ;
	switch(key_codea)
	{
	case KEY_601:
		current_state = STATE_FREE|STATE_FREE_CALLING;
		open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=6;
		display_buffer[2]=0;
		display_buffer[3]=1;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();

	 	break;
	case KEY_602:
		current_state = STATE_FREE|STATE_FREE_CALLING;
		open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=6;
		display_buffer[2]=0;
		display_buffer[3]=2;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_501:
		current_state = STATE_FREE|STATE_FREE_CALLING;
		open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=5;
		display_buffer[2]=0;
		display_buffer[3]=1;
				send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_502:
		current_state = STATE_FREE|STATE_FREE_CALLING;
		open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=5;
		display_buffer[2]=0;
		display_buffer[3]=2;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_401:
		current_state = STATE_FREE|STATE_FREE_CALLING;
		open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=4;
		display_buffer[2]=0;
		display_buffer[3]=1;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_402:
	current_state = STATE_FREE|STATE_FREE_CALLING;
			open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=4;
		display_buffer[2]=0;
		display_buffer[3]=2;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_301:
	current_state = STATE_FREE|STATE_FREE_CALLING;
			open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=3;
		display_buffer[2]=0;
		display_buffer[3]=1;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_302:
	current_state = STATE_FREE|STATE_FREE_CALLING;
			open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=3;
		display_buffer[2]=0;
		display_buffer[3]=2;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_201:
	current_state = STATE_FREE|STATE_FREE_CALLING;
			open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=2;
		display_buffer[2]=0;
		display_buffer[3]=1;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_202:
	current_state = STATE_FREE|STATE_FREE_CALLING;
			open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=2;
		display_buffer[2]=0;
		display_buffer[3]=2;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_101:
	current_state = STATE_FREE|STATE_FREE_CALLING;
			open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=1;
		display_buffer[2]=0;
		display_buffer[3]=1;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_102:  
		current_state = STATE_FREE|STATE_FREE_CALLING;
		open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=0;
		display_buffer[1]=1;
		display_buffer[2]=0;
		display_buffer[3]=2;
		send_buffer[0] = COMMAND_HEADER;
		send_buffer[1] = CALLGUEST_BEGIN;
		send_buffer[2] = display_buffer[1];
		send_buffer[3] = display_buffer[3];
		rs232_send_command();
	 	break;
	case KEY_SET:
		current_state = STATE_FUNCSELECT;
		open_buzzer();
		buzzer_timer = 225;
		buzzer_timer_trigger = 1;
		display_buffer[0]=SYMBLE_F;
		display_buffer[1]=1;
		display_buffer[2]=SYMBLE_SUBM;
		display_buffer[3]=SYMBLE_SUBM;
		function_index = 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -