九层妖塔 起于垒土


改编自国信长天蓝桥杯官方蓝皮书例程,按照自己的习惯进行了补充和修改


蓝桥杯单片机第十一届第一场省赛-多功能电压测量装置

  • 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. 蓝桥杯单片机第十四届省赛题目和程序答案

    目录 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. ...

  2. 第十三届 蓝桥杯 单片机设计与开发项目 省赛

    目录 题目分析 代码分析 代码链接 题目分析 就在前不久第十三届蓝桥杯比赛结束,我就把单片机的题目拿过来看了看,下面是我对题目的分析和本次题目的代码.项目工程在文章的末尾,欢迎大家参考和指正. 在看到 ...

  3. 第十一届 蓝桥杯 单片机设计与开发项目 省赛 程序设计试题及源码

    一.试题 1. 基本要求 1.1 使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计 与调试. 1.2 选手在程序设计与调试过程中,可参考组委会提供的"资源数据包" ...

  4. 蓝桥杯单片机第十一届国赛客观题(深夜学习——单片机)

    (1)电路-->RLC串联电路的谐振 随着f的增加,容抗(ω L)减小,感抗(1/(ω×C))增大,所以整个电路呈电感性. (2)模电-->三极管 NPN型,发射极流出电流,集电极和基极流 ...

  5. 蓝桥杯单片机12届第二场

    这是第三次写了,都挺顺畅的,就是长按键那里卡了一下,就是发现还可以把按键写在定时器里,这样就方便多了,我之前写的长按键确实麻烦了些. main.c #include "sys.h" ...

  6. 蓝桥杯单片机第十一届代码(省一)

    //结果出来了,省一,感觉还是稍有点瑕疵 //main.c #include<i2c.h> #include<ds18b20.h> #include<key.h> ...

  7. 【蓝桥杯单片机组第六届省赛】— “温度记录器”设计任务书

    1.试题 (1)功能简述   设备按照用户通过按键设定的时间间隔自动采集并存储温度数据,并具有采集完成提醒.数码管显示等功能,系统硬件部分主要由按键电路.电源供电电路. RTC 时钟.传感器电路和显示 ...

  8. 第十一届蓝桥杯大赛(2020年)软件类省赛第二场 Python大学组 真题+个人解答

    试题A:门牌制作 本题总分:5分 [问题描述] 小蓝要为一条街的住户制作门牌号. 这条街一共有2020位住户,门牌号从1到2020编号. 小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将 ...

  9. 蓝桥杯单片机省赛第十一届赛题二

    文章目录 前言 一.题目​​ 二.代码部分 1.IIC.C 2.IIC.H 3.onewire.h 4.onewire.h 5. main.c 总结 前言 蓝桥杯单片机--第十一届省赛赛题二解析 今年 ...

最新文章

  1. 关于大脑未必是破解智能和意识之谜的钥匙探讨
  2. 我的Linux生涯之文件链接
  3. 业务系统设计之一:系统菜单设计
  4. 64位汇编之linux系统调用
  5. 文末福利 | 国际前沿算法峰会报名进行中,几大亮点抢先看
  6. SLAM学习策略和前期准备
  7. OpenCv颜色直方图
  8. ups容量计算和配置方法_UPS电源选择与电池容量计算
  9. 原声php 读取excel乱码_php读取excel文件,输出的值乱码解决方法
  10. 概念区分:灰度发布、蓝绿发布、滚动发布
  11. linux打印机无法识别usb设备,佳能LBP2900打印机驱动安装使用 USB无法识别的解决方法步骤...
  12. 程序员面试总结 (非原创)
  13. 入职要求提供上家公司的工资银行流水?
  14. 将静态html网页部署至华为云
  15. go 变量与json相互转换
  16. 长芯微32位MCU LCM32F103C8T6可P2P替换STM32F103C8T6,无需改动软件直接替代
  17. POJ 2385: Apple Catching
  18. php 黄页,PHPCMS企业黄页
  19. Linux下编译安装python
  20. 单片机入门资料,按键消抖方式,按键怎么消抖

热门文章

  1. [DIP]客观保真度准则与主观保真度准则
  2. python图形界面化编程GUI(一)窗口管理和常用的组件(Label、Button、Entry)
  3. 聚焦Open Infrastructure丹佛峰会,九州云分享边缘计算新技术
  4. ssm+java基于HTML5的网上跳蚤市场353i0(程序+lw+源码+远程部署)
  5. 关于SSL/TLS最新漏洞“受戒礼”
  6. 幸运大转盘-jQuery+PHP实现的抽奖程序
  7. java:关于错误 需要<标识符>
  8. 从传统IT到云原生(一)基础设施的演进
  9. 分布式文件系统—FastDFS
  10. ANDROID JNI 智能指针