蓝桥杯单片机第七届省赛

前言

这套题不难,相对于第六套题这一套比较简单了,但是还是有些小细节要抓

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

OK,以上就是全部的题目了,这套题目相对来说逻辑比较简单,四个按键,S4控制pwm占空比,S5控制计时时间,S6控制开关,S7控制界面的切换,用到了定时器,按键,数码管,led(代码中未体现),DS18B20温度采集,逻辑相对简单,下面看看代码

代码

main.c

#include <REGX52.H>
#include "intrins.h"
#include <onewire.h>
sbit S7 = P3^0;
sbit S6 = P3^1;
sbit S5 = P3^2;
sbit S4 = P3^3;unsigned char code SMG_duanma[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0xff};void Chushi()//初始化
{P2 = 0XA0;P0 = 0X00;P2 = 0X80;P0 = 0XFF;P2 = 0XC0;P0 = 0XFF;P2 = 0XFF;P0 = 0XFF;
}void HC138(unsigned char n)//138译码器
{switch(n){case 4:P2 = (P2 & 0X1F) | 0X80;break;case 5:P2 = (P2 & 0X1F) | 0Xa0;break;case 6:P2 = (P2 & 0X1F) | 0Xc0;break;case 7:P2 = (P2 & 0X1F) | 0Xe0;break;}
}void display(unsigned int pos,m)//数码管基础显示
{HC138(6);P0 = 0X01 << pos;HC138(7);P0 = SMG_duanma[m];
}void delay(unsigned int t)//延时1ms
{unsigned char data i, j;while(t--){_nop_();_nop_();_nop_();i = 11;j = 190;do{while (--j);} while (--i);		}}
unsigned int temp;
void wendu()//温度采集
{int LSB,MSB;Init_DS18B20();Write_DS18B20(0xcc);Write_DS18B20(0x44);delay(100);Init_DS18B20();Write_DS18B20(0xcc);Write_DS18B20(0xbe);LSB=Read_DS18B20();MSB=Read_DS18B20();Init_DS18B20();temp=MSB;temp=(temp<<8)|LSB;if((temp&0xf800)==0x0000){temp>>=4;temp=temp+(LSB&0x0f)*0.0625;}
}unsigned int count_pwm,count_time;
unsigned int K4 = 1,K5 = 1,K7;unsigned int pwm,time = 60;
void key()//按键控制
{if(S7 == 0){delay(20);if(S7 == 0){K7++;}while(!S7);}if(S6 == 0){delay(20);if(S6 == 0){time = 0;K5 = 1;}while(!S6);}if(S5 == 0){delay(20);if(S5 == 0){K5++;switch(K5){case 1:time = 60;break;case 2:time = 120;break;case 3:time = 0;break;case 4:K5 = 1;break;}	}while(!S5);}if(S4 == 0){delay(20);if(S4 == 0){K4++;}while(!S4);}switch(K4){case 1:pwm = 20;break;case 2:pwm = 30;break;case 3:pwm = 70;break;case 4:K4 = 1;break;
}
}void Timer0_Init(void)		//5毫秒@11.0592MHz
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;			//设置定时器模式TL0 = 10240/256;		//设置定时初始值TH0 = 10240%256;		//设置定时初始值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时ET0=1;EA=1;
}void Timer0_Isr(void) interrupt 1
{TL0 = 10240/256;		//设置定时初始值TH0 = 10240%256;		//设置定时初始值count_time++;count_pwm++;if(time != 0){if(count_time >= 20){time--;count_time = 0;}else {if(count_pwm < pwm)P3_4 = 1;else if(count_pwm>=pwm&&count_pwm <100)P3_4 = 0;else if(count_pwm >= 100)count_pwm = 0;}}else if(time == 0){P3_4 = 0;}
}
void display_f()//显示模块1 
{display(0,16);delay(1);display(1,K4);delay(1);display(2,16);delay(1);display(3,17);delay(1);display(4,0);delay(1);display(5,time/100);delay(1);display(6,time%100/10);delay(1);display(7,time%10);delay(1);
}void display_wd()//温度显示模块
{		display(0,16);delay(1);display(1,4);delay(1);display(2,16);delay(1);display(3,17);delay(1);display(4,17);delay(1);display(5,temp/10);delay(1);display(6,temp%10);delay(1);display(7,12);delay(1);
}void main()	
{Chushi();Timer0_Init();while(1){	key();wendu();switch(K7){case 0:display_f();break;case 1:display_wd();break;case 2:K7 = 0;break;}}
}

onewire.h

#ifndef _ONEWIRE_H
#define _ONEWIRE_H#include "regx52.h"#define OW_SKIP_ROM 0xcc
#define DS18B20_CONVERT 0x44
#define DS18B20_READ 0xbe//IC引脚定义
sbit DQ = P1^4;//函数声明
void Delay_OneWire(unsigned int t);
void Write_DS18B20(unsigned char dat);
bit Init_DS18B20(void);
unsigned char Read_DS18B20(void);#endif

onewire.c

#include "onewire.h"//单总线延时函数
void Delay_OneWire(unsigned int t)
{while(t--);
}//DS18B20芯片初始化
bit Init_DS18B20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(120);DQ = 0;Delay_OneWire(800); DQ = 1;Delay_OneWire(100); initflag = DQ;    Delay_OneWire(50);return initflag;
}//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(50);DQ = 1;dat >>= 1;}Delay_OneWire(50);
}//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;if(DQ){dat |= 0x80;}	    Delay_OneWire(50);}return dat;
}

这道题以上的代码有点bug,大家可以烧写到自己的板子上面看一下,视频不太好上传

这一套题的难度不算很大,但是博主水平有限,大家先凑合着看,如果对大家有什么帮助那是最好的以上所有代码均为自己编写,肯定会有更好的解法,肯定会有,本人水平有限,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论

上一题:蓝桥杯单片机第六届省赛

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】自定义类型讲解

文章目录 一、前言二、结构体2.1 概念2.2 定义2.2.1 通常情况下的定义2.2.2 匿名结构体 2.3 结构体的自引用和嵌套2.4 结构体变量的定义与初始化2.5 结构体的内存对齐2.6 结构体传参2.7 结构体实现位段 三、枚举3.1 概念3.2 定义3.3 枚举的优点3.3.1 提高代码的可读性3.3.2 防止…

我问了DeepSeek和ChatGPT关于vue中包含几种watch的问题,它们是这么回答的……

前言&#xff1a;听说最近DeepSeek很火&#xff0c;带着好奇来问了关于Vue的一个问题&#xff0c;看能从什么角度思考&#xff0c;如果回答的不对&#xff0c;能不能尝试纠正&#xff0c;并帮我整理出一篇不错的文章。 第一次回答的原文如下&#xff1a; 在 Vue 中&#xff0c;…

纯后训练做出benchmark超过DeepseekV3的模型?

论文地址 https://arxiv.org/pdf/2411.15124 模型是AI2的&#xff0c;他们家也是玩开源的 先看benchmark&#xff0c;几乎是纯用llama3 405B后训练去硬刚出一个gpt4o等级的LLamA405 我们先看之前的机遇Lllama3.1 405B进行全量微调的模型 Hermes 3&#xff0c;看着还没缘模型…

UbuntuWindows双系统安装

做系统盘&#xff1a; Ubuntu20.04双系统安装详解&#xff08;内容详细&#xff0c;一文通关&#xff01;&#xff09;_ubuntu 20.04-CSDN博客 ubuntu系统调整大小&#xff1a; 调整指南&#xff1a; 虚拟机中的Ubuntu扩容及重新分区方法_ubuntu重新分配磁盘空间-CSDN博客 …

在 Zemax 中使用布尔对象创建光学光圈

在 Zemax 中&#xff0c;布尔对象用于通过组合或减去较简单的几何形状来创建复杂形状。布尔运算涉及使用集合运算&#xff08;如并集、交集和减集&#xff09;来组合或修改对象的几何形状。这允许用户在其设计中为光学元件或机械部件创建更复杂和定制的形状。 本视频中&#xf…

AI作画提示词:Prompts工程技巧与最佳实践

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网智能项目之——智能家居项目…

LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略

LLMs之DeepSeek&#xff1a;Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略 目录 Math-To-Manim的简介 1、特点 2、一个空间推理测试—考察不同大型语言模型如何解释和可视化空间关系 3、DeepSeek R1-Zero的简介&#xff1a;处理更…

二叉树——429,515,116

今天继续做关于二叉树层序遍历的相关题目&#xff0c;一共有三道题&#xff0c;思路都借鉴于最基础的二叉树的层序遍历。 LeetCode429.N叉树的层序遍历 这道题不再是二叉树了&#xff0c;变成了N叉树&#xff0c;也就是该树每一个节点的子节点数量不确定&#xff0c;可能为2&a…

详解单片机学的是什么?(电子硬件)

大家好&#xff0c;我是山羊君Goat。 单片机&#xff0c;对于每一个硬件行业的从业者或者在校电子类专业的学生&#xff0c;相信对于这个名词都不陌生&#xff0c;但是掌没掌握就另说了。 那单片机到底学的是什么呢&#xff1f; 其实单片机在生活中就非常常见&#xff0c;目前…

数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱

本篇将揭露DeepSeek 和其他 AI 大模型差异所在。 目录 ​编辑 一本篇背景&#xff1a; 二性能对比&#xff1a; 2.1训练效率&#xff1a; 2.2推理速度&#xff1a; 三语言理解与生成能力对比&#xff1a; 3.1语言理解&#xff1a; 3.2语言生成&#xff1a; 四本篇小结…

数据结构:优先级队列—堆

一、优先级队列 1、优先级队列概念 优先级队列&#xff0c;听名字我们就知道他是一种队列&#xff0c;队列在前面我们已经学习过了&#xff0c;它是一种先进先出的数据结构&#xff0c;但是在特殊的情况下&#xff0c;我们我们队列中元素是带有一定优先级的&#xff0c;它需要…

2025年2月2日(网络编程 tcp)

tcp 循环服务 import socketdef main():# 创建 socket# 绑定tcp_server socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_server.bind(("", 8080))# socket 转变为被动tcp_server.listen(128)while True:# 产生专门为链接进来的客户端服务的 socketprint(&qu…

像接口契约文档 这种工件,在需求 分析 设计 工作流里面 属于哪一个工作流

οゞ浪漫心情ゞο(20***328) 2016/2/18 10:26:47 请教一下&#xff0c;像接口契约文档 这种工件&#xff0c;在需求 分析 设计 工作流里面 属于哪一个工作流&#xff1f; 潘加宇(35***47) 17:17:28 你这相当于问用例图、序列图属于哪个工作流&#xff0c;看内容。 如果你的&quo…

Zabbix 推送告警 消息模板 美化(钉钉Webhook机器人、邮件)

目前网络上已经有很多关于Zabbix如何推送告警信息到钉钉机器人、到邮件等文章。 但是在搜索下来&#xff0c;发现缺少了对告警信息的美化的文章。 本文不赘述如何对Zabbix对接钉钉、对接邮件&#xff0c;仅介绍我采用的美化消息模板的内容。 活用AI工具可以减轻很多学习、脑力负…

何谓共赢?

A和B是人或组织&#xff0c;他们怎样的合作才是共赢呢&#xff1f; 形态1:A提供自己的身份证等个人信息&#xff0c;B用来作贷款等一些事务&#xff0c;A每月得到一笔钱。 A的风险远大于收益&#xff0c;或者B从事的是非法行为&#xff1b; 形态2:A单方面提前终止了与B的合作…

物联网 STM32【源代码形式-使用以太网】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

物联网&#xff08;IoT&#xff09;‌是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器等装置与技术&#xff0c;实时采集并连接任何需要监控、连接、互动的物体或过程&#xff0c;实现对物品和过程的智能化感知、识别和管理。物联网的核心功能包括数据采集与监…

Redis|前言

文章目录 什么是 Redis&#xff1f;Redis 主流功能与应用 什么是 Redis&#xff1f; Redis&#xff0c;Remote Dictionary Server&#xff08;远程字典服务器&#xff09;。Redis 是完全开源的&#xff0c;使用 ANSIC 语言编写&#xff0c;遵守 BSD 协议&#xff0c;是一个高性…

架构技能(四):需求分析

需求分析&#xff0c;即分析需求&#xff0c;分析软件用户需要解决的问题。 需求分析的下一环节是软件的整体架构设计&#xff0c;需求是输入&#xff0c;架构是输出&#xff0c;需求决定了架构。 决定架构的是软件的所有需求吗&#xff1f;肯定不是&#xff0c;真正决定架构…

Linux:线程池和单例模式

一、普通线程池 1.1 线程池概念 线程池&#xff1a;一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价&…

maven mysql jdk nvm node npm 环境安装

安装JDK 1.8 11 环境 maven环境安装 打开网站 下载 下载zip格式 解压 自己创建一个maven库 以后在idea 使用maven时候重新设置一下 这三个地方分别设置 这时候maven才算设置好 nvm 管理 npm nodejs nvm下载 安装 Releases coreybutler/nvm-windows GitHub 一键安装且若有…