蓝桥杯单片机第七届省赛

前言

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

题目

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

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,大家可以烧写到自己的板子上面看一下,视频不太好上传

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小程序设计和开发:如何研究同类型小程序的优点和不足。

一、确定研究目标和范围 明确研究目的 在开始研究同类型小程序之前&#xff0c;首先需要明确研究的目的。是为了改进自己的小程序设计和开发&#xff0c;还是为了了解市场趋势和用户需求&#xff1f;不同的研究目的会影响研究的方法和重点。例如&#xff0c;如果研究目的是为了…

反向代理模块jmh

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当…

一文讲解HashMap线程安全相关问题

HashMap不是线程安全的&#xff0c;主要有以下几个问题&#xff1a; ①、多线程下扩容会死循环。JDK1.7 中的 HashMap 使用的是头插法插入元素&#xff0c;在多线程的环境下&#xff0c;扩容的时候就有可能导致出现环形链表&#xff0c;造成死循环。 JDK 8 时已经修复了这个问…

oracle:子查询

子查询: 一条查询语句中嵌入了另一条查询语句, 被嵌入里面的这条查询语句称为子查询, 外面的查询语句称为主查询 子查询的分类 相关性子查询&#xff08;Correlated Subquery&#xff09;是指子查询的执行依赖于外部查询的每一行数据。也就是说&#xff0c;子查询会对外部查询…

AI技术在SEO关键词优化中的应用策略与前景展望

内容概要 在数字营销的快速发展中&#xff0c;AI技术逐渐成为SEO领域的核心驱动力。其通过强大的数据分析和处理能力&#xff0c;不仅改变了我们优化关键词的方式&#xff0c;也提升了搜索引擎优化的效率和效果。在传统SEO中&#xff0c;关键词的选择与组合常依赖人工经验和直…

Java项目: 基于SpringBoot+mybatis+maven+mysql实现的疫苗发布和接种预约管理系统(含源码+数据库+开题报告+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmysql疫苗发布和接种预约管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、…

VSCode中快速创建Html文件

1、下载并安装好VSCode软件&#xff0c;启动软件。 2、依次点击左上角选项卡“file”-“New File”。 输入文件名称后缀&#xff0c;如&#xff1a;HelloWorld.html。 选择新建文件的目录所在位置。 3、HelloWorld.html中输入英文格式的!&#xff0c;按回车键后会默认依据…

CMake项目编译与开源项目目录结构

Cmake 使用简单方便&#xff0c;可以跨平台构建项目编译环境&#xff0c;尤其比直接写makefile简单&#xff0c;可以通过简单的Cmake生成负责的Makefile文件。 如果没有使用cmake进行编译&#xff0c;需要如下命令&#xff1a;&#xff08;以muduo库echo服务器为例&#xff09;…

网络原理(4)—— 网络层详解

目录 一. IP协议报头结构 二. 地址管理 2.1 路由器 2.1.1 路由选择 2.1.2 WAN口&#xff08;Wide Area Network&#xff09; 2.1.3 LAN口&#xff08;Local Area Network&#xff09; 2.1.4 WLAN口&#xff08;Wireless Local Area Network&#xff09; 2.2 网段划分…

Hot100之图论

200岛屿数量 题目 思路解析 把访问过的格子插上棋子 思想是先污染再治理&#xff0c;我们有一个inArea&#xff08;&#xff09;函数&#xff0c;是判断是否出界了 我们先dfs&#xff08;&#xff09;放各个方向遍历&#xff0c;然后我们再把这个位置标为0 我们岛屿是连着…

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)

目录 1 -> 生命周期 1.1 -> 应用生命周期 1.2 -> 页面生命周期 2 -> 资源限定与访问 2.1 -> 资源限定词 2.2 -> 资源限定词的命名要求 2.3 -> 限定词与设备状态的匹配规则 2.4 -> 引用JS模块内resources资源 3 -> 多语言支持 3.1 -> 定…

Python从零构建macOS状态栏应用(仿ollama)并集成AI同款流式聊天 API 服务(含打包为独立应用)

在本教程中,我们将一步步构建一个 macOS 状态栏应用程序,并集成一个 Flask 服务器,提供流式响应的 API 服务。 如果你手中正好持有一台 MacBook Pro,又怀揣着搭建 AI 聊天服务的想法,却不知从何处迈出第一步,那么这篇文章绝对是你的及时雨。 最终,我们将实现以下功能: …

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.4 索引优化:避免意外复制的高效技巧

2.4 索引优化&#xff1a;避免意外复制的高效技巧 目录/提纲 #mermaid-svg-hmMAIqF8kFh46fbH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hmMAIqF8kFh46fbH .error-icon{fill:#552222;}#mermaid-svg-hmMAIqF8kF…

【C语言进阶(五)】指针进阶详解(下)

指针详解-下 1. 前言2. 函数指针数组2.1 函数指针数组的用途 3. 指向函数指针数组的指针3.1 回调函数 4. 库函数中qsort分析4.1 为什么这个函数需要我们自己实现?4.2 库函数qsort的使用 5. qsort函数的模拟实现5.1 大框架的实现5.2 比较函数的实现5.3 对于交换函数的思考5.4 交…

18.Word:数据库培训课程❗【34】

目录 题目 NO1.2.3.4 NO5设置文档内容的格式与样式 NO6 NO7 NO8.9 NO10.11标签邮件合并 题目 NO1.2.3.4 FnF12&#xff1a;打开"Word素材.docx”文件,将其另存为"Word.docx”在考生文件夹下之后到任务9的所有操作均基于此文件&#xff1a;"Word.docx”…

99.24 金融难点通俗解释:MLF(中期借贷便利)vs LPR(贷款市场报价利率)

目录 0. 承前1. 什么是MLF&#xff1f;1.1 专业解释1.2 通俗解释1.3 MLF的三个关键点&#xff1a; 2. 什么是LPR&#xff1f;2.1 专业解释2.2 通俗解释2.3 LPR的三个关键点&#xff1a; 3. MLF和LPR的关系4. 传导机制4.1 第一步&#xff1a;央行调整MLF4.2 第二步&#xff1a;银…

五. Redis 配置内容(详细配置说明)

五. Redis 配置内容(详细配置说明) 文章目录 五. Redis 配置内容(详细配置说明)1. Units 单位配置2. INCLUDES (包含)配置3. NETWORK (网络)配置3.1 bind(配置访问内容)3.2 protected-mode (保护模式)3.3 port(端口)配置3.4 timeout(客户端超时时间)配置3.5 tcp-keepalive()配置…

用 HTML、CSS 和 JavaScript 实现抽奖转盘效果

顺序抽奖 前言 这段代码实现了一个简单的抽奖转盘效果。页面上有一个九宫格布局的抽奖区域&#xff0c;周围八个格子分别放置了不同的奖品名称&#xff0c;中间是一个 “开始抽奖” 的按钮。点击按钮后&#xff0c;抽奖区域的格子会快速滚动&#xff0c;颜色不断变化&#xf…

【Linux系统】计算机世界的基石:冯诺依曼架构与操作系统设计

文章目录 一.冯诺依曼体系结构1.1 为什么体系结构中要存在内存&#xff1f;1.2 冯诺依曼瓶颈 二.操作系统2.1 设计目的2.2 系统调用与库函数 一.冯诺依曼体系结构 冯诺依曼体系结构&#xff08;Von Neumann Architecture&#xff09;是计算机的基本设计理念之一&#xff0c;由…

说说Redis的内存淘汰策略?

大家好&#xff0c;我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助&#xff1b; 说说Redis的内存淘汰策略? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 提供了多种内存淘汰策略&#xff0c;用于在内存达到限制时决定如何…