目录

题目分析

代码分析

代码链接


题目分析

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

在看到这道题的时候,看到了题目说按键动作不影响数码管显示和数据采集过程。说明数码管和采集过程需要在中断完成。本道题由于有单总线的存在,造成了数码管扫描时间加长,会造成最后一位数码管格外亮或者视觉暂留效果消失。为解决这一问题,我的方法是修改了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 使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计 与调试. 1.2 选手在程序设计与调试过程中,可参考组委会提供的"资源数据包" ...

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

    第十一届 蓝桥杯 单片机设计与开发项目 决赛 题目 源码 赛题总结 1.界面切换 2.参数生效 3.LED显示 题目 源码 #include <STC15F2K60S2.H> #inclu ...

  3. 第十二届 蓝桥杯 EDA设计与开发项目 省赛

    第十二届 蓝桥杯 EDA设计与开发项目 省赛 在这里插入图片描述

  4. 【蓝桥杯Web】第十三届蓝桥杯(Web 应用开发)省赛真题

    前言 第十三届蓝桥杯全国软件和信息技术专业人才大赛(软件类)新开了Web应用开发比赛,本文介绍第十三届蓝桥杯Web应用开发的省赛题目以及解析. 文章目录 前言 一.水果拼盘 二.展开你的扇子 三.和手 ...

  5. 11届蓝桥杯单片机设计与开发决赛

    第一次尝试做国赛题目(还行)  main.c #include <sys.h> #include "ds1302.h" #include "onewire.h ...

  6. 第十三届蓝桥杯 EDA 设计与开发科目 模拟试题(详细解读)

    解析:一看就c 解析:一看就c 解析:一看就D 解析:一看就AB 解析:一看就B 解析:一看就C 解析:不知道 解析:A 解析:ABCD 解析:A 仅供参考,持续更新,尽情期待

  7. 第十三届蓝桥杯(Web 应用开发)模拟赛 大学组参考答案

    01卡片化标签页 // 实现选项卡功能 function init() {// TODO 待补充代码let tabs = document.getElementsByClassName('tabs') ...

  8. 2018第八届至2022年第十三届蓝桥杯单片机开放与设计省赛客观题及简解整理

    前言: 由于本人马上要参加第十四届蓝桥杯单片机设计与开发的省赛了,在对客观题复习两轮后,发现效率是比较低的,因此整理了2018至2022年的省赛客观题,将大概的考点划分三部分,这样可以更加系统的复习其 ...

  9. 蓝桥杯单片机设计与开发_标准模板

    蓝桥杯单片机设计与开发_标准模板 一.前言 首先,这篇文章是笔者第一次在 CSDN 上写博文,较为生疏,读者若有任何意见,欢迎大家在评论区交流! 笔者目前为一名大二学生,参加了2021年蓝桥杯单片机设 ...

最新文章

  1. 计算机视觉的前沿应用,学术报告:计算机视觉应用前沿
  2. 的g极串一个电阻_Ohm#39;s Law 简单系列D:从惠斯通(会石头)测电阻开始说
  3. linux dup用法,Unix_Linux
  4. 两个有序链表序列的合并(c语言实现)
  5. Angular应用 vendor.js里的magic number 16384是什么含义
  6. Cloud for Customer的shell布局介绍
  7. 【记录一下】从0到1 我的python开发之路
  8. 微生物组-扩增子16S分析第9期(报名直播课免费参加线下2020.8)
  9. JS连接数据库(需配置odbc)
  10. oracle中with子句的用法(转)
  11. 1000以内完数c语言程序_C语言完数编程题目详解
  12. 易语言怎么给手机发短信
  13. Windows10易升下载
  14. python获取windows当前登录用户名 域 计算机名 mac地址 ip
  15. 虚拟机上键盘右边的数字小键盘为什么不能使用
  16. c语言程序设计第39级台阶,2013 年蓝桥杯 C 语言 B 组省赛第 3 题: 第39级台阶
  17. 电脑上一键从视频提取音频,windows电脑和mac电脑都可以用
  18. 经验分享:如何有效应对Facebook广告数据波动问题?
  19. 唇语识别!AI 领域的下一个万亿市场?
  20. cad在线转低版本_CAD这些技巧你还不会怎么当大神

热门文章

  1. 8086怎么输出数组_鸣小亮C语言笔记(5)——数组
  2. 【实用工具指南 一】OCR图片识别自动翻译原文替换
  3. 江南大学计算机应用第三阶段,2019下半年江南大学第三阶段语文英语计算机基..._公共英语考试_帮考网...
  4. 国外人经常上的网站,即全球各个领域最大的互联网网站
  5. 了解RESTful接口设计风格
  6. OceanBase 2.2初体验
  7. C# - 习题07_计算1分2分5分硬币各有多少枚
  8. 使用Python批量合并多个工作簿中的同名工作表
  9. 【Python、数学】计算任意位数的圆周率π(马青公式)
  10. mysql在linux版本信息查询,Linux 查看 MySQL的版本信息