第十三届 蓝桥杯 单片机设计与开发项目 省赛
目录
题目分析
代码分析
代码链接
题目分析
就在前不久第十三届蓝桥杯比赛结束,我就把单片机的题目拿过来看了看,下面是我对题目的分析和本次题目的代码。项目工程在文章的末尾,欢迎大家参考和指正。
在看到这道题的时候,看到了题目说按键动作不影响数码管显示和数据采集过程。说明数码管和采集过程需要在中断完成。本道题由于有单总线的存在,造成了数码管扫描时间加长,会造成最后一位数码管格外亮或者视觉暂留效果消失。为解决这一问题,我的方法是修改了DS18B20底层驱动代码,在读取温度的同时也进行了数码管的扫描操作。还得注意的是,由于定时器中断的打开,如果DS1302和DS18B20不放到中断函数里面的话,会造成读取的数据错误,这个原因是,在读取数据的过程中产生了中断,破坏了读取数据的时序。废话不多说了,看源代码吧。
代码分析
主函数
void main(void)
{//ds1302初始化DS1302_Init(Init_Time);Timer0Init();while(1){//keyif(Key_Flag==1){KeyValue = KeyScan();switch(KeyValue){case 12:SegShow_Flag++;if(SegShow_Flag>2){SegShow_Flag=0;}break;case 13:Mode_Flag = !Mode_Flag; //显示界面break;case 16:temp = ParameterChang(SegShow_Flag,temp,0);break;case 17:temp = ParameterChang(SegShow_Flag,temp,1);break;}//时间显示模式标记SegTime_Flag = TimeShow(SegShow_Flag,KeyValue);Key_Flag=0;}}
}
中断函数
//定时器中断服务函数
void Time0Handler(void) interrupt 1 //默认中断优先级 1
{static u16 tt=0;//数码管扫描SegScan(tab,SegNum);tt++;if((tt%1000) == 0)//100ms{Key_Flag=1;Timer_Flag=1;SegDispaly(SegShow_Flag,SegTime_Flag,temperature,shijian,temp,SegNum);//ledLedFuction(Mode_Flag,RelaySwitch_Flag,shijian);//继电器RelaySwitch_Flag = RelayFuction(Mode_Flag,temperature,temp,shijian);}if(tt >= 7000) //700ms{tt=0;//时间DS1302_Get(shijian);//温度//12位精度,延时不足。第一次数值错误,不读if(Temperature_Flag == 0){Temperature_Flag=1;TemperGet();}else{temperature = TemperGet();}}
}
数码管显示
//显示函数
void SegScan(unsigned char tab[],unsigned char ptr[])
{ static unsigned char dspcom;P0 = 0xff;P2 = ((P2&0x1f)|0xE0);P2 &= 0x1f;P0 = 1<<dspcom; P2 = ((P2&0x1f)|0xC0); P2 &= 0x1f;P0 = tab[ptr[dspcom]]; P2 = ((P2&0x1f)|0xE0); P2 &= 0x1f;if(++dspcom >= 8){dspcom = 0;}
}
界面切换
//数码管显示信息
void SegDispaly(u8 SegShow_Flag,u8 SegTime_Flag,long temperature,u8* time,u8 temp,u8* ptr)
{//温度界面if(SegShow_Flag == 0){ptr[0]=21;ptr[1]=1;ptr[2]=22;ptr[3]=22;ptr[4]=22;ptr[5]=temperature/100000;ptr[6]=temperature%100000/10000+10;ptr[7]=temperature%10000/1000;}//时间界面else if(SegShow_Flag == 1){ptr[0]=21;ptr[1]=2;ptr[2]=22;if(SegTime_Flag == 0){ptr[3]=time[2]/10;ptr[4]=time[2]%10;ptr[5]=20;ptr[6]=time[1]/10;ptr[7]=time[1]%10;}else{ptr[3]=time[1]/10;ptr[4]=time[1]%10;ptr[5]=20;ptr[6]=time[0]/10;ptr[7]=time[0]%10;}}//参数界面else if(SegShow_Flag == 2){ptr[0]=21;ptr[1]=3;ptr[2]=22;ptr[3]=22;ptr[4]=22;ptr[5]=22;ptr[6]=temp/10;ptr[7]=temp%10;}
}
剩下的就是继电器和led的显示,这里就不都一一展出啦,需要的伙伴可以在下面链接自行下载。
代码链接
链接:https://pan.baidu.com/s/1DAbZ5t6LMn_uOdZORoh8HA
提取码:mwl6
--来自百度网盘超级会员V5的分享
第十三届 蓝桥杯 单片机设计与开发项目 省赛相关推荐
- 第十一届 蓝桥杯 单片机设计与开发项目 省赛 程序设计试题及源码
一.试题 1. 基本要求 1.1 使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计 与调试. 1.2 选手在程序设计与调试过程中,可参考组委会提供的"资源数据包" ...
- 第十一届 蓝桥杯 单片机设计与开发项目 决赛
第十一届 蓝桥杯 单片机设计与开发项目 决赛 题目 源码 赛题总结 1.界面切换 2.参数生效 3.LED显示 题目 源码 #include <STC15F2K60S2.H> #inclu ...
- 第十二届 蓝桥杯 EDA设计与开发项目 省赛
第十二届 蓝桥杯 EDA设计与开发项目 省赛 在这里插入图片描述
- 【蓝桥杯Web】第十三届蓝桥杯(Web 应用开发)省赛真题
前言 第十三届蓝桥杯全国软件和信息技术专业人才大赛(软件类)新开了Web应用开发比赛,本文介绍第十三届蓝桥杯Web应用开发的省赛题目以及解析. 文章目录 前言 一.水果拼盘 二.展开你的扇子 三.和手 ...
- 11届蓝桥杯单片机设计与开发决赛
第一次尝试做国赛题目(还行) main.c #include <sys.h> #include "ds1302.h" #include "onewire.h ...
- 第十三届蓝桥杯 EDA 设计与开发科目 模拟试题(详细解读)
解析:一看就c 解析:一看就c 解析:一看就D 解析:一看就AB 解析:一看就B 解析:一看就C 解析:不知道 解析:A 解析:ABCD 解析:A 仅供参考,持续更新,尽情期待
- 第十三届蓝桥杯(Web 应用开发)模拟赛 大学组参考答案
01卡片化标签页 // 实现选项卡功能 function init() {// TODO 待补充代码let tabs = document.getElementsByClassName('tabs') ...
- 2018第八届至2022年第十三届蓝桥杯单片机开放与设计省赛客观题及简解整理
前言: 由于本人马上要参加第十四届蓝桥杯单片机设计与开发的省赛了,在对客观题复习两轮后,发现效率是比较低的,因此整理了2018至2022年的省赛客观题,将大概的考点划分三部分,这样可以更加系统的复习其 ...
- 蓝桥杯单片机设计与开发_标准模板
蓝桥杯单片机设计与开发_标准模板 一.前言 首先,这篇文章是笔者第一次在 CSDN 上写博文,较为生疏,读者若有任何意见,欢迎大家在评论区交流! 笔者目前为一名大二学生,参加了2021年蓝桥杯单片机设 ...
最新文章
- 计算机视觉的前沿应用,学术报告:计算机视觉应用前沿
- 的g极串一个电阻_Ohm#39;s Law 简单系列D:从惠斯通(会石头)测电阻开始说
- linux dup用法,Unix_Linux
- 两个有序链表序列的合并(c语言实现)
- Angular应用 vendor.js里的magic number 16384是什么含义
- Cloud for Customer的shell布局介绍
- 【记录一下】从0到1 我的python开发之路
- 微生物组-扩增子16S分析第9期(报名直播课免费参加线下2020.8)
- JS连接数据库(需配置odbc)
- oracle中with子句的用法(转)
- 1000以内完数c语言程序_C语言完数编程题目详解
- 易语言怎么给手机发短信
- Windows10易升下载
- python获取windows当前登录用户名 域 计算机名 mac地址 ip
- 虚拟机上键盘右边的数字小键盘为什么不能使用
- c语言程序设计第39级台阶,2013 年蓝桥杯 C 语言 B 组省赛第 3 题: 第39级台阶
- 电脑上一键从视频提取音频,windows电脑和mac电脑都可以用
- 经验分享:如何有效应对Facebook广告数据波动问题?
- 唇语识别!AI 领域的下一个万亿市场?
- cad在线转低版本_CAD这些技巧你还不会怎么当大神
热门文章
- 8086怎么输出数组_鸣小亮C语言笔记(5)——数组
- 【实用工具指南 一】OCR图片识别自动翻译原文替换
- 江南大学计算机应用第三阶段,2019下半年江南大学第三阶段语文英语计算机基..._公共英语考试_帮考网...
- 国外人经常上的网站,即全球各个领域最大的互联网网站
- 了解RESTful接口设计风格
- OceanBase 2.2初体验
- C# - 习题07_计算1分2分5分硬币各有多少枚
- 使用Python批量合并多个工作簿中的同名工作表
- 【Python、数学】计算任意位数的圆周率π(马青公式)
- mysql在linux版本信息查询,Linux 查看 MySQL的版本信息