【STM32CubeMX+Keil+PROTEUS】之---4*4键盘仿真驱动

5 篇文章 0 订阅
4 篇文章 0 订阅

一、proteus设计

注:测试上4*4键盘直接接到控制器,读值出错,加驱动测试成功。

二、CubeMX设计

注:输入端的设置

三、KEIL程序设计

int KEY_SCAN(void)
{

      int KEY_Value= 0x00ff;
	    int KEY_Read;
	

	    HAL_GPIO_WritePin(GPIOE,KEY_X1_Pin|KEY_X2_Pin|KEY_X3_Pin|KEY_X4_Pin,GPIO_PIN_SET);  
	    if((GPIOE->IDR & 0x00f0) == 0x0000)
			{
					return -1;
			}
			else
			{
					HAL_Delay(5);
				
					if((GPIOE->IDR & 0x00f0) == 0x0000)
					{
							return -1;
					}
			}
	
		  HAL_GPIO_WritePin(GPIOE,KEY_X2_Pin|KEY_X3_Pin|KEY_X4_Pin,GPIO_PIN_RESET); 
			HAL_GPIO_WritePin(GPIOE,KEY_X1_Pin,GPIO_PIN_SET); 
			
			if( GPIOE->IDR & 0x00f0 )
			{
				 KEY_Read = GPIOE->IDR & 0x00f0 ;
			   switch( KEY_Read )
			  {
						case 0x0010: KEY_Value= 7;   break;
						case 0x0020: KEY_Value= 8;    break;
						case 0x0040: KEY_Value= 9;   break;
						case 0x0080: KEY_Value= 10;  	break;		
				}
				 return KEY_Value;
			}
			
			HAL_GPIO_WritePin(GPIOE,KEY_X1_Pin|KEY_X3_Pin|KEY_X4_Pin,GPIO_PIN_RESET); 
			HAL_GPIO_WritePin(GPIOE,KEY_X2_Pin,GPIO_PIN_SET); 
			
			if( GPIOE->IDR & 0x00f0 )
			{
				KEY_Read = GPIOE->IDR & 0x00f0 ;
				switch( KEY_Read )
				{
					case 0x0010: KEY_Value= 4;    break;
					case 0x0020: KEY_Value= 5;    break;
					case 0x0040: KEY_Value= 6;    break;
					case 0x0080: KEY_Value= 11;  	break;	
				}
				 return KEY_Value;
			}	
			
			HAL_GPIO_WritePin(GPIOE,KEY_X1_Pin|KEY_X2_Pin|KEY_X4_Pin,GPIO_PIN_RESET); 
			HAL_GPIO_WritePin(GPIOE,KEY_X3_Pin,GPIO_PIN_SET); 
			if( GPIOE->IDR & 0x00f0 )
			{
				KEY_Read = GPIOE->IDR & 0x00f0 ;
				switch( KEY_Read )
				{
					case 0x0010: KEY_Value= 1;    break;
					case 0x0020: KEY_Value= 2;    break;
					case 0x0040: KEY_Value= 3;    break;
					case 0x0080: KEY_Value= 12;  	break;	
				}
				return KEY_Value;	
			}		

			HAL_GPIO_WritePin(GPIOE,KEY_X1_Pin|KEY_X2_Pin|KEY_X3_Pin,GPIO_PIN_RESET); 
			HAL_GPIO_WritePin(GPIOE,KEY_X4_Pin,GPIO_PIN_SET); 
				
      if( GPIOE->IDR & 0x00f0 )
			{
				KEY_Read = GPIOE->IDR & 0x00f0 ;
				switch( KEY_Read )
				{
					case 0x0010: KEY_Value= 14;   break;
					case 0x0020: KEY_Value= 0;    break;
					case 0x0040: KEY_Value= 15;   break;
					case 0x0080: KEY_Value= 13;  	break;	
				}
	            return KEY_Value;	
			}		
			return KEY_Value;	
}

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值