IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 蓝桥杯嵌入式11届省赛程序题 -> 正文阅读

[嵌入式]蓝桥杯嵌入式11届省赛程序题

题目分析

主要用到了

  • 按键:按键扫描,消抖处理 + 每个按键执行的任务
  • LCD:按照要求实现两个显示界面即可
  • LED:在按键按下的条件下,点亮或熄灭某个灯
  • ADC:获取R37输出的电压值,并以此控制PWM输出信号占空比
  • PWM:通过PA6和PA7引脚输出频率和占空比一定的波
    功能模块

key

创建工程
按键刷新时间不大于100MS
按键扫描函数

LCD

添加lcd.c文件
刷新时间100ms
首先编写符合题目要求的LCD的两个显示界面

void task_display(void)
{
	if(LCD_show==1)
	{ 
		LCD_SetBackColor(Black);
		LCD_SetTextColor(White);

		LCD_DisplayStringLine(Line0,(unsigned char *)"      Data          ");	
		LCD_DisplayStringLine(Line1,(unsigned char *)"                    ");		
		sprintf((char *)str, "   V:%.2fV          ", R37_Value * 3.3 / 4096);
		LCD_DisplayStringLine(Line2, (uint8_t *)str);	
		LCD_DisplayStringLine(Line3,(unsigned char *)"                    ");			
		sprintf((char *)str, "   Mode:%s        ",mode_str);
		LCD_DisplayStringLine(Line4, (uint8_t *)str);	
		LCD_DisplayStringLine(Line5,(unsigned char *)"                    ");	
		LCD_DisplayStringLine(Line6,(unsigned char *)"                    ");	
		LCD_DisplayStringLine(Line7,(unsigned char *)"                    ");	
		LCD_DisplayStringLine(Line8,(unsigned char *)"                    ");	
		LCD_DisplayStringLine(Line9,(unsigned char *)"                    ");			
	}		
	else if(LCD_show==2)
	{
		LCD_SetBackColor(Black);
		LCD_SetTextColor(White);

		LCD_DisplayStringLine(Line0,(unsigned char *)"      Para          ");	
		LCD_DisplayStringLine(Line1,(unsigned char *)"                    ");		
		sprintf((char *)str, "   PA6:%d%%          ", PA6_Duty);
		LCD_DisplayStringLine(Line2, (uint8_t *)str);	
		LCD_DisplayStringLine(Line3,(unsigned char *)"                    ");			
		sprintf((char *)str, "   PA7:%d%%          ", PA7_Duty);
		LCD_DisplayStringLine(Line4, (uint8_t *)str);	
		LCD_DisplayStringLine(Line5,(unsigned char *)"                    ");	
		LCD_DisplayStringLine(Line6,(unsigned char *)"                    ");	
		LCD_DisplayStringLine(Line7,(unsigned char *)"                    ");	
		LCD_DisplayStringLine(Line8,(unsigned char *)"                    ");	
		LCD_DisplayStringLine(Line9,(unsigned char *)"                    ");		
	}
}

按键and LED

先对按键进行扫描
接着编写按键对应的任务函数

  • 按下B1

初始模式是数据界面,数据界面LD2点亮。按下B1,切换至参数界面,且LD2熄灭。
if(key_value== 1)
{
if(LCD_show== 1)
{
LCD_show=2;
LEDx_on(2);
}
else if(LCD_show==2)
{
LCD_show=1;
LEDx_off(2);
}
}

  • 按下B2

在手动模式下,每按一下B2,占空比增加10%,占空比在10%到90%范围内变化。且仅在参数界面,B2起作用。
key_value=0;
if(LCD_show== 2)
{
PA6_Duty+=10;
if(PA6_Duty>=100)PA6_Duty=10;
if(mode== 1) __HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, 10000*PA6_Duty/PA6_Freq);
}

  • 按下B3
    同B2
  • 按下B4

切换手动模式和自动模式。手动模式LED1熄灭
key_value=0;
if(mode== 0)
{
mode=1;
LEDx_off(1);
mode_str=“MANU”;
__HAL_TIM_SET_COMPARE(&htim16,TIM_CHANNEL_1,10000PA6_Duty/PA6_Freq);
__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,10000
PA7_Duty/PA7_Freq); //恢复初始数据
}
else if(mode== 1)
{
mode=0;
mode_str=“AUTO”;
LEDx_on(1);
}

  1. ADC更新时间小于等于100ms
  2. 配置PA6 PA7管脚输出PWM波的频率和占空比
    在这里插入图片描述

自动模式

在这里插入图片描述
解读:当ADC可访问且处于自动模式时,占空比D与R37的电压满足一定关系

结果演示

自动模式:随着R37电位器的变化,输出PWM波的占空比也在变化
在这里插入图片描述
在这里插入图片描述
手动模式:
在这里插入图片描述
此为PA7输出的波形
在这里插入图片描述
此为PA6输出的波形
在这里插入图片描述

未完待续

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:46:35  更:2022-03-22 20:47:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:51:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码