蓝桥杯单片机第十一届第一场省赛-多功能电压测量装置
九层妖塔 起于垒土
● 改编自国信长天蓝桥杯官方蓝皮书例程,按照自己的习惯进行了补充和修改
蓝桥杯单片机第十一届第一场省赛-多功能电压测量装置
- Notes1:矩阵按键的灵活使用
- Notes2:AT24C02-EEPROM写入周期是否需要软件延时
- Notes3:参数边界范围 防止出现参数越界
- Notes4:PCF8591上电初始值0x80
- Notes5:计数问题
2021.4.3
源码题目0积分下载
Notes1:矩阵按键的灵活使用
只用到S12,S13,S16,S17四个按键,即2乘2的矩阵按键。此时再使用4*4的程序模板有点臃肿。
按键处理部分的算法依旧是三行代码。改的只是按键扫描部分:
uchar Key_Read(void)
{uchar Key_Value = 0;uchar Key_temp = 0;P35=0;P34=1;P33=1;P32=1;Key_temp = P3&0x0c;P35=1;P34=0;P33=1;P32=1;Key_temp = Key_temp | ((P3&0x0c)>>2) ;switch(~Key_temp){case 0xf8:Key_Value=12;break;case 0xf4:Key_Value=13;break;case 0xf2:Key_Value=16;break;case 0xf1:Key_Value=17;break;default: Key_Value = 0;}return Key_Value;
}
Notes2:AT24C02-EEPROM写入周期是否需要软件延时
刚开时按照模板的写法是加了的,测试时候发现,按键变得不灵敏了。将5ms的软件延时(写入周期)删除后,按键依旧灵敏。
其实大部分情况下是不需要延时来等待写入周期的。除非在写入EEPROM后马上读取,或者写入后马上对EEPROM进行读写操作。
本届赛题中,只有在上电初始化时,未进入死循环前从EEPROM中读取了一个字节。写入是在退出参数界面时候写入。除此之外没有任何对EEPROM的操作。
本届赛题中,要求在退出参数界面时候将电压参数P写入EEPROM,在参数界面有按键的加减功能,那怎么才算退出参数界面?我选择的是在进入下一个页面—计数界面的时候将数据写入EEPROM。各个界面之间依次循环,进入下一个界面也就是退出这一个页面。
Notes3:参数边界范围 防止出现参数越界
1、加操作
Value 是最大值+1,是暂态。
if(++num == Value) num = 0
2、减操作
if(!num) num = max;
else num--;
Notes4:PCF8591上电初始值0x80
由于本届ADC是放在循环里移植读取刷新的,并且进入死循环前还需要对ADC的电压值进行判断来决定L1灯的亮灭。于是在死循环前加入以下代码。
uc_ADC_Value = PCF8591_ADC();
while(uc_ADC_Value == 0x80)
{uc_ADC_Value = PCF8591_ADC();
}
如果是在数码管处理函数中显示:
uc_ADC_Value = PCF8591_ADC();
if(uc_ADC_Value != 0x80)
sprintf(puc_SEG_Buf,"%05.2f",(float)uc_ADC_Value/255.0*5);
Notes5:计数问题
1、先用定时器对电压值进行离散化采样。
100ms保存一次电压值,100ms后再保存一次。只保存两次的电压值。本次的采样电压值ADC_temp
,100ms前的采样电压值ADC_Old
。
2、判断
如果100ms前的采样电压值ADC_Old
比参数Vp大,而本次的采样电压值ADC_temp
比参数Vp小,即可推出电压曲线向下穿过参数Vp,即满足计数条件。
ADC_temp = uc_ADC_Value*10;if( (ADC_temp < c_V_p*51) && (ADC_Old > c_V_p*51) ) //下降沿{ADC_State = 'D';uc_jishu_num++;ul_ms_ADC = ul_ms;}if( (ADC_temp > c_V_p*51) && (ADC_Old < c_V_p*51) ) //上升沿{ADC_State = 'G';}
这个思路来自三行代码按键消抖的算法。
uc_ADC_Value = PCF8591_ADC(); //三行代码第一行
if( (ADC_temp < c_V_p*51) && (ADC_Old > c_V_p*51) ) //三行代码第二行 {//下降沿…… }
ADC_Old = ADC_temp; //三行代码第三行
用 定时器三行代码 的按键算法,是因为看的官方例程(蓝色指导书)。没想到又会应用到这儿。使用这种算法判断ADC的电压值,可以达到小数点后第二位的精度。
总之,官方代码永远的神!!!
蓝桥杯单片机第十一届第一场省赛-多功能电压测量装置相关推荐
- 蓝桥杯单片机第十四届省赛题目和程序答案
目录 1.前言 2.题目 3.程序架构 3.1 display.c 3.2 ds1302.c 3.3 iic.c 3.4 onewire.c 3.5 main.c 主函数文件 3.6 环境配置 4. ...
- 第十三届 蓝桥杯 单片机设计与开发项目 省赛
目录 题目分析 代码分析 代码链接 题目分析 就在前不久第十三届蓝桥杯比赛结束,我就把单片机的题目拿过来看了看,下面是我对题目的分析和本次题目的代码.项目工程在文章的末尾,欢迎大家参考和指正. 在看到 ...
- 第十一届 蓝桥杯 单片机设计与开发项目 省赛 程序设计试题及源码
一.试题 1. 基本要求 1.1 使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计 与调试. 1.2 选手在程序设计与调试过程中,可参考组委会提供的"资源数据包" ...
- 蓝桥杯单片机第十一届国赛客观题(深夜学习——单片机)
(1)电路-->RLC串联电路的谐振 随着f的增加,容抗(ω L)减小,感抗(1/(ω×C))增大,所以整个电路呈电感性. (2)模电-->三极管 NPN型,发射极流出电流,集电极和基极流 ...
- 蓝桥杯单片机12届第二场
这是第三次写了,都挺顺畅的,就是长按键那里卡了一下,就是发现还可以把按键写在定时器里,这样就方便多了,我之前写的长按键确实麻烦了些. main.c #include "sys.h" ...
- 蓝桥杯单片机第十一届代码(省一)
//结果出来了,省一,感觉还是稍有点瑕疵 //main.c #include<i2c.h> #include<ds18b20.h> #include<key.h> ...
- 【蓝桥杯单片机组第六届省赛】— “温度记录器”设计任务书
1.试题 (1)功能简述 设备按照用户通过按键设定的时间间隔自动采集并存储温度数据,并具有采集完成提醒.数码管显示等功能,系统硬件部分主要由按键电路.电源供电电路. RTC 时钟.传感器电路和显示 ...
- 第十一届蓝桥杯大赛(2020年)软件类省赛第二场 Python大学组 真题+个人解答
试题A:门牌制作 本题总分:5分 [问题描述] 小蓝要为一条街的住户制作门牌号. 这条街一共有2020位住户,门牌号从1到2020编号. 小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将 ...
- 蓝桥杯单片机省赛第十一届赛题二
文章目录 前言 一.题目 二.代码部分 1.IIC.C 2.IIC.H 3.onewire.h 4.onewire.h 5. main.c 总结 前言 蓝桥杯单片机--第十一届省赛赛题二解析 今年 ...
最新文章
- 关于大脑未必是破解智能和意识之谜的钥匙探讨
- 我的Linux生涯之文件链接
- 业务系统设计之一:系统菜单设计
- 64位汇编之linux系统调用
- 文末福利 | 国际前沿算法峰会报名进行中,几大亮点抢先看
- SLAM学习策略和前期准备
- OpenCv颜色直方图
- ups容量计算和配置方法_UPS电源选择与电池容量计算
- 原声php 读取excel乱码_php读取excel文件,输出的值乱码解决方法
- 概念区分:灰度发布、蓝绿发布、滚动发布
- linux打印机无法识别usb设备,佳能LBP2900打印机驱动安装使用 USB无法识别的解决方法步骤...
- 程序员面试总结 (非原创)
- 入职要求提供上家公司的工资银行流水?
- 将静态html网页部署至华为云
- go 变量与json相互转换
- 长芯微32位MCU LCM32F103C8T6可P2P替换STM32F103C8T6,无需改动软件直接替代
- POJ 2385: Apple Catching
- php 黄页,PHPCMS企业黄页
- Linux下编译安装python
- 单片机入门资料,按键消抖方式,按键怎么消抖
热门文章
- [DIP]客观保真度准则与主观保真度准则
- python图形界面化编程GUI(一)窗口管理和常用的组件(Label、Button、Entry)
- 聚焦Open Infrastructure丹佛峰会,九州云分享边缘计算新技术
- ssm+java基于HTML5的网上跳蚤市场353i0(程序+lw+源码+远程部署)
- 关于SSL/TLS最新漏洞“受戒礼”
- 幸运大转盘-jQuery+PHP实现的抽奖程序
- java:关于错误 需要<标识符>
- 从传统IT到云原生(一)基础设施的演进
- 分布式文件系统—FastDFS
- ANDROID JNI 智能指针