蓝桥杯嵌入式——扩展板ADC按键

        只能说之前用了双路ADC是真香,光敏电阻和ADC按键都不用改引脚配置,只需改跳线帽

目录

一. 原理

二. 代码编写

三. 注意事项

结语


一. 原理

        扩展板上的按键是通过ADC来判断是哪个按键按下

        下图是我实际读到的值,通过这些值就可以确定是哪个按键按下

二. 代码编写

        其他配置全和双路ADC一致,只有main.c有些许不同,放部分关键代码

#include "main.h"
#include "stdio.h"
#include "lcd.h"
#include "tim.h"
#include "adc.h"

//模块计时
__IO uint32_t Lcd_uwTick=0;

// 扩展板ADC
float AO1;
float AO2;
/*------------------------------------------------------------------------------*/


/*函数声明------------------------------------------------------------------------------*/

void lcd(void);
uint8_t Akey(void);

/*主函数------------------------------------------------------------------------------*/
int main(void)
{
  HAL_Init();
  SystemClock_Config();//系统时钟设置
	
  TIM2_Init();//定时器2初始化 100ms
  HAL_TIM_Base_Start_IT(&htim2);//启动定时器2中断工作模式
  MX_ADC2_Init();
	
  LCD_Init();//LCD初始化
  LCD_Clear(Black);//清屏
  LCD_SetBackColor(Black);//背景颜色
  LCD_SetTextColor(White);//文本颜色

  while (1)
  {
		

  }
}
/*常用函数------------------------------------------------------------------------------*/
void lcd()//LCD显示模块
{
	if (uwTick - Lcd_uwTick < 200) return; 
	Lcd_uwTick = uwTick;

	//扩展板ADC电压值显示
	AO1=get_adc2();	//读IN17
	AO2=get_adc2();	//读IN13
	sprintf(a," KEY:S%d  ",Akey());
	LCD_DisplayStringLine(Line0,(unsigned char *)a);

}


uint8_t Akey()
{
	if(AO2<200) return 1;
	if(AO2<800) return 2;
	if(AO2<1400) return 3;
	if(AO2<2000) return 4;
	if(AO2<2600) return 5;
	if(AO2<3200) return 6;
	if(AO2<3700) return 7;
	if(AO2<3970) return 8;
	else return 0;
}

//定时器中断处理
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM2)
	{
		lcd();//屏幕显示
		led();//LED显示
		
	}
}

        

三. 注意事项

(1)PA5-AKEY

(2)按自己实际读到的ADC值来编写按键判断程序最好

结语

        有必要说一下我遇到的问题,把AO1、AO2赋值的语句放在200ms的定时器里会让程序卡住,放在200ms的lcd里倒是可以,但问题是lcd不也在定时器里吗,应该就是采集时间问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值