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

📄 key.c

📁 这是电池检测仪的程序
💻 C
字号:
#define KEY_X0()	{DDRE|=0X30;DDRD|=0X0C;PORTE&=0XCF;PORTD&=0XF3;}		//按键扫描的五种输出状态
#define KEY_X1()	{DDRE|=0X33;DDRD|=0X0C;PORTE=(PORTE&0XF3)|0X10;PORTD.2=0;PORTD.3=0;}
#define KEY_X2()	{DDRE|=0X33;DDRD|=0X0C;PORTE=(PORTE&0XF3)|0X20;PORTD.2=0;PORTD.3=0;}	
#define KEY_X3()	{DDRE|=0X33;DDRD|=0X0C;PORTE&=0XF3;PORTD.2=1;PORTD.3=0;}
#define KEY_X4()	{DDRE|=0X33;DDRD|=0X0C;PORTE&=0XF3;PORTD.2=0;PORTD.3=1;}   
   		
#define KEY_Y_IN()	DDRD&=0X0F;//按键采集端口为输入状态    	
#define KEY_Y()		PIND>>4                           

unsigned char key_data1;					//按键值寄存器     
unsigned char key_data2;					//按键值寄存器
unsigned char key_data3;					//按键值寄存器 
unsigned char key_timer;					//按键检测用定时器
                                                                     
/*****************************************************************************************
					按键扫描程序
采用矩阵扫描方法,同一行内只能有一个按键按下,不同行内可以有多个按键按下
*****************************************************************************************/
void key(void){   
	static unsigned char key_data1_bak=0;			//按键值寄存器         
	static unsigned char key_data2_bak=0;			//按键值寄存器        
	static unsigned char key_data3_bak=0;			//按键值寄存器        	 	
	unsigned char temp=0;  
                
	KEY_Y_IN()	
 	key_data1=0;             
	KEY_X1()
	delay_us(10);    
	temp=KEY_Y();
	if(temp!=0){ 
		delay_ms(10);  
    	if(temp==KEY_Y()){ 
			if((temp&1)!=0)key_data1=1;
			else if((temp&2)!=0)key_data1=2;   
			else if((temp&4)!=0)key_data1=3;   
			else if((temp&8)!=0)key_data1=4;   
	    }
	}  
	else {
		KEY_X2()
		delay_us(10);    
		temp=KEY_Y();
		if(temp!=0){ 
			delay_ms(10);  
    		if(temp==KEY_Y()){ 
				if((temp&1)!=0)key_data1=5;
				else if((temp&2)!=0)key_data1=6;   
				else if((temp&4)!=0)key_data1=7;   
				else if((temp&8)!=0)key_data1=8;   
	    	}
		}  
	}             
  	if(key_data1==key_data1_bak)key_data1=0;		//防止一次按键产生多次动作
  	else key_data1_bak=key_data1;             
          
	KEY_X3()             						
	delay_us(10);   
    temp=KEY_Y();
    if(temp!=key_data2_bak){
    	delay_ms(10);
    	if(temp==KEY_Y()){ 
    		key_data2_bak=temp;
    		switch(temp){
    			case 1:
    				key_data2=1;
    				break;
    			case 2:
    				key_data2=2;
    				break;
    			case 4:
    				key_data2=3;
    				break;
    			case 8:
    				key_data2=4;
    				break;
    		}
    	}
    }     
           
	KEY_X4()
	delay_us(10);   
    temp=KEY_Y();
    if(temp!=key_data3_bak){
    	delay_ms(10);
    	if(temp==KEY_Y()){ 
    		key_data3_bak=temp;
    		switch(temp){
    			case 1:
    				key_data3=1;
    				break;
    			case 2:
    				key_data3=2;
    				break;
    			case 4:
    				key_data3=3;
    				break;
    			case 8:
    				key_data3=4;
    				break;
    		}
    	}
    }
                   
	KEY_X0()

}
       
void key_stop(void){  
	static unsigned char state=0;   
	unsigned char temp;
             
 	key_data1=0;
	if(state==0){
		KEY_X2()
		delay_us(10);    
		temp=KEY_Y();
		if(temp!=0){
		   	if((temp&4)!=0){
				state=1;		   	
		   		key_timer=0;
		   	}  
		}  
		KEY_X0()
    }
    else {
    	if(key_timer>10){
    		KEY_X2()
			delay_us(10);    
			temp=KEY_Y();
	   		if(temp!=0){
		   		if((temp&4)!=0){
			   		key_data1=7;
		   		}  
	   		}
			state=0; 
 			KEY_X0()			
    	}
    }

}       
       
void key_start(void){  
	static unsigned char state=0;   
	unsigned char temp;
             
 	key_data1=0;
	if(state==0){
		KEY_X2()
		delay_us(10);    
		temp=KEY_Y();
		if((temp&2)==0){
			state=1;		   	
		   	key_timer=0; 
		}  
		KEY_X0()
    }
    else {
    	if(key_timer>10){
    		KEY_X2()
			delay_us(10);    
			temp=KEY_Y();
		 	if((temp&2)==0)key_data1=9;
			state=0; 
 			KEY_X0()			
    	}
    }

}          
       
       
/********************************************************************************
                               按键端口初始化程序
********************************************************************************/
void key_init(void){    

	KEY_X0()					
	KEY_Y_IN()
	
}

⌨️ 快捷键说明

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