蓝桥杯单片机第六届省赛

前言

这套题其实一开始做的时候有点发懵,一直陷入到一个巨大的漏洞里面,主要是在10次数据采集上面,说白了就是练得少,太菜了

题目

在这里插入图片描述
在这里插入图片描述
这套题到现在的代码也有一些漏洞,实在是不想改了,最近有点摆烂,但是主要的功能都没有问题

思路

这道题用到了四个按键,DS1302时钟,DS18B20温度采集,这两个模块可以看我另一个专栏蓝桥杯单片机里面的内容,里面有关于蓝桥杯单片机里面常用模块的部分

这道题说白了就是用按键控制状态,蓝桥杯的题目说白了都是用按键控制状态,自己能把思路打通了,按键写出来基本就都没有什么问题。

一开始做这道题的时候,思路是用两个定时器分别控制一些数据采集和闪烁的地方,然后发现这里一个定时器就可以做到,然后得到的就是现在的屎山代码,下面看看代码,不一定全对,但是希望对大家有所帮助

#include <REGX52.H>
#include <ds1302.h>
#include <onewire.h>
unsigned char code SMG_duanma[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
	0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
	0xbf,0xff};
unsigned char w_adds[] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char r_adds[] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8c};
unsigned char Timer[] = {0x50,0x59,0x23};
unsigned int wendu[10] = {0};
void delay(int t)//延时
{
	unsigned int i;
	while(t--)
		for(i = 0; i <= 615;i++);
}
	
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 char pos,num)//数码管基础显示函数
{
	HC138(6);
	P0 = 0x01 << pos;
	HC138(7);
	P0 = SMG_duanma[num];
//	delay(2);
}

void ds1302_pz()//时间设置
{
	unsigned char i;
	Write_Ds1302(0x8e,0x00);
	for(i = 0;i<3;i++)Write_Ds1302(w_adds[i],Timer[i]);
	Write_Ds1302(0x8e,0x80);
}

void ds1302_dq()//时间读取
{
	unsigned char i;
	for(i = 0;i <3;i++)Timer[i] = Read_Ds1302(r_adds[i]);
}

unsigned int temp=0;
void ds18b20()//温度采集
{

	unsigned int lsb,msb;
	Init_DS18B20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	
	Init_DS18B20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	lsb = Read_DS18B20();
	msb = Read_DS18B20();
	temp = msb;
	temp = (temp << 8) | lsb;
	temp *= 0.0625; 
}

unsigned int tep = 1;
void display_time()//显示时间
{
	ds1302_dq();
	display(0,Timer[2]/16);delay(2);
	display(1,Timer[2]%16);delay(2);
	if(tep == 0){display(2,17);delay(2);}
	if(tep == 1){display(2,16);delay(2);}
	display(3,Timer[1]/16);delay(2);
	display(4,Timer[1]%16);delay(2);
	if(tep == 0){display(5,17);delay(2);}
	if(tep == 1){display(5,16);delay(2);}
	display(6,Timer[0]/16);delay(2);
	display(7,Timer[0]%16);delay(2);
}

void Timer0_Init(void)		//1毫秒@11.0592MHz
{
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xCD;				//设置定时初始值
	TH0 = 0xD4;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	ET0 = 1;				//使能定时器0中断
	EA = 1;
}
unsigned int led_z = 1,led_t;
unsigned int count,count_jishi,count_wendu;
unsigned int count_fi,count_fo,count_time,shezhi,count_si,caiji;
void key()//按键
{
	if(P3_0 == 0)
	{
		delay(10);
		if(P3_0 == 0)
		{
			shezhi = 0;
		}
		while(!P3_0);
	}
	
	if(P3_1 == 0)
	{
		delay(10);
		if(P3_1 == 0)
		{
			shezhi = 2;
			count_si++;
			count_wendu = 0;
			led_z = 1;
		}
		while(!P3_1);
	}
	if(P3_2 == 0)
	{
		delay(10);
		if(P3_2 == 0)
		{
			count_fi++;
			ds1302_pz();
			shezhi = 1;
			caiji = 1;
		}
		while(!P3_2);
	}
	if(P3_3 == 0)
	{
		delay(10);
		if(P3_3 == 0)
		{
			count_fo++;
			shezhi = 0;
		}
		while(!P3_3);
	}
		if(count_fo%4 == 0)count_time = 1;
		else if(count_fo%4 == 1)count_time = 5;
		else if(count_fo%4 == 2)count_time = 30;
		else if(count_fo%4 == 3)count_time = 60;
		else if(count_fo%4 == 5)count_fo = 0;
		if(count_si > 9)count_si = 0;
}

void display_shezhi()//第一个界面
{
	key();
	display(0,17);delay(2);
	display(1,17);delay(2);
	display(2,17);delay(2);
	display(3,17);delay(2);
	display(4,17);delay(2);
	display(5,17);delay(2);
	display(6,count_time/10);delay(2);
	display(7,count_time%10);delay(2);
}

void display_wendu()//温度读取的界面
{
	display(0,16);delay(2);
	display(1,0);delay(2);
	display(2,count_si);delay(2);
	display(3,17);delay(2);
	display(4,17);delay(	2);
	display(5,16);delay(2);
	display(6,wendu[count_si]/10);delay(2);
	display(7,wendu[count_si]%10);delay(2);
}


void LED()//led闪烁的,这个地方可以直接调用,代码中没有相关体现
{
	if(led_z == 0)
	{
		HC138(4);
		P0 = 0XFE;		
	}
	if(led_z == 1)
	{
		HC138(4);
		P0 = 0XFf;		
	}
	
}

void main()
{
	Timer0_Init();
//	ds1302_pz();
	while(1)
	{
		key();
		ds18b20();
//		LED();
		if(shezhi == 1)
		display_time();
		if(shezhi == 0)
		display_shezhi();
		if(shezhi == 2)
			display_wendu();
	}
}

void Timer0_Isr(void) interrupt 1
{
		if(caiji == 1)
		{	
			count++;count_jishi++;led_t++;
			if(count == 100)tep = 1;
			else if(count == 200)
			{
				tep = 0;count =0;
			}
			if(count_jishi == count_time*100)		
			{
				count_jishi = 0;
				wendu[count_wendu] = temp;
				count_wendu++;
				if(count_wendu == 10)
					shezhi = 2;		
			}
		}			
}


总结

做完这几台题就会发现,按键是中心,也就是按键控制所有,思路一定要打通
这一套题的难度不算很大,但是博主水平有限,大家先凑合着看,如果对大家有什么帮助那是最好的以上所有代码均为自己编写,肯定会有更好的解法,肯定会有,本人水平有限,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论

上一套:蓝桥杯单片机第五届省赛

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

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

相关文章

用java配合redis 在springboot上实现令牌桶算法

令牌桶算法配合 Redis 在 Java 中的应用令牌桶算法是一种常用的限流算法&#xff0c;适用于控制请求的频率&#xff0c;防止系统过载。结合 Redis 使用可以实现高效的分布式限流。 一.、引入依赖首先&#xff0c;需要在 pom.xml 文件中引入 spring-boot-starter-data-re…

Python绘制简易动态圣诞树

代码&#xff1a; import random import time from math import pi, cos, sin from tkinter import *CANVAS_WIDTH 640 # 画布的宽 CANVAS_HEIGHT 640 # 画布的高 TREE_COLOR "#2e8b57" # 树的颜色 TRUNK_COLOR "#8b4513" # 树干的颜色 STAR_COLO…

【HF设计模式】06-命令模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第6章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍命令模式&#xff0c;包括遇到的问题、采用的解决方案、遵循的 OO 原则、…

高并发内存池_CentralCache(中心缓存)和PageCache(页缓存)申请内存的设计

三、CentralCache&#xff08;中心缓存&#xff09;_内存设计 &#xff08;一&#xff09;Span的创建 // 页编号类型&#xff0c;32位下是4byte类型&#xff0c;64位下是8byte类型 // #ifdef _WIN64 typedef unsigned long long PageID; #else _WIN32 typedef size_t PageI…

消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)

Apache Pulusar是一个分布式、多租户、高性能的发布/订阅&#xff08;Pub/Sub&#xff09;消息系统&#xff0c;最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点&#xff0c;提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力&#xff0c;适用于大规模分布式系…

音频入门(二):音频数据增强

本文介绍了一些常见的音频数据增强方法&#xff0c;并给出了代码实现。 目录 一、简介 二、代码 1. 安装必要的库 2. 代码 3. 各函数的介绍 4. 使用方法 参考&#xff1a; 一、简介 音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。 使用数据…

Oracle审计

审计是监控选定的用户数据库操作的过程 审计的目的&#xff1a; 调查可疑的数据库活动&#xff1a; 审计可以帮助检测和跟踪潜在的 security breaches、未授权的访问尝试或其他异常行为。通过分析审计日志&#xff0c;可以确定可疑活动的来源、时间、频率和影响。 收集特定数…

Appium(四)

一、app页面元素定位 1、通过id定位元素: resrouce-id2、通过ClassName定位&#xff1a;classname3、通过AccessibilityId定位&#xff1a;content-desc4、通过AndroidUiAutomator定位5、通过xpath定位xpath、id、class、accessibility id、android uiautomatorUI AutomatorUI自…

AUTOSAR OS模块详解(三) Alarm

AUTOSAR OS模块详解(三) Alarm 本文主要介绍AUTOSAR OS的Alarm&#xff0c;并对基于英飞凌Aurix TC3XX系列芯片的Vector Microsar代码和配置进行部分讲解。 文章目录 AUTOSAR OS模块详解(三) Alarm1 简介2 功能介绍2.1 触发原理2.2 工作类型2.3 Alarm启动方式2.4 Alarm配置2.5…

【0x04】HCI_Connection_Request事件详解

目录 一、事件概述 二、事件格式及参数 2.1. HCI_Connection_Request 事件格式 2.2. BD_ADDR 2.3. Class_Of_Device 2.4. Link_Type 三、主机响应 3.1. ACL链接类型 3.2. SCO或eSCO链接类型 四、应用场景 4.1. 设备配对场景 4.2. 蓝牙文件传输场景 4.3. 蓝牙物联网…

洛谷题目:P2742 [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包 题解 (本题较难)

题目传送门&#xff1a;P2742 [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 另&#xff1a;由于一些文章的疏忽&#xff0c;导致一些错别字&#xff0c;代码错误&#xff0c;公式错误导致大家的理解和误导&#xff0c;…

Qt中的按钮组:QPushButton、QToolButton、QRadioButton和QCheckBox使用方法(详细图文教程)

&#x1f4aa; 图像算法工程师&#xff0c;专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &a…

2025-1-21 SUCTF 2025 crypto signin

今年充满期待&#xff0c;上线一看两道题&#xff0c;一道看名字应该是跟环相关的&#xff0c;估计做不出来&#xff0c;还有一道签到题&#xff0c;没做出来&#xff0c;遗憾下线 文章目录 signin signin from Crypto.Util.number import * from secret import flagbit_lengt…

C语言之图像文件的属性

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 图像文件属性提取系统设计与实现 目录 设计题目设计内容系统分析总体设计详细设计程序实现…

【Linux】华为服务器使用U盘安装统信操作系统

目录 一、准备工作 1.1 下载UOS官方系统 &#xff11;.&#xff12;制作启动U盘 1.3 服务器智能管理系统iBMC 二、iBMC设置U盘启动 一、准备工作 1.1 下载UOS官方系统 服务器CPU的架构是x86-64还是aarch64&#xff09;,地址&#xff1a;统信UOS生态社区 - 打造操作系统创…

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下&#xff1a; 拼写错误或路径错误&#xff1a;确保你输入的目录名称正确。目录名称是区分大小写的&#xff0c;因此请确保使用正确的大小写。正确的目录名…

python麻辣香锅菜品推荐

1.推荐算法概述 推荐算法出现得很早,最早的推荐系统是卡耐基梅隆大学推出的Web Watcher浏览器导航系统&#xff0c;可以根据当的搜索目标和用户信息,突出显示对用户有用的超链接。斯坦福大学则推出了个性化推荐系统LIRA.AT&T实验室于1997年提出基于协作过滤的个性化推荐系统…

利用大型语言模型在量化投资中实现自动化策略

“Automate Strategy Finding with LLM in Quant investment” 论文地址&#xff1a;https://arxiv.org/pdf/2409.06289 摘要 这个新提出的量化股票投资框架&#xff0c;利用大型语言模型&#xff08;LLMs&#xff09;与多智能体系统相结合的方法&#xff0c;通过LLMs从包括数…

JAVA:Spring Boot 实现责任链模式处理订单流程的技术指南

1、简述 在复杂的业务系统中&#xff0c;订单流程往往需要一系列的操作&#xff0c;比如验证订单、检查库存、处理支付、更新订单状态等。责任链模式&#xff08;Chain of Responsibility&#xff09;可以帮助我们将这些处理步骤分开&#xff0c;并且以链式方式处理每一个操作…

(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台

1 项目简介&#xff08;开源地址在文章结尾&#xff09; 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频&#xff0c;甄别分类、实况分析鸟类保护动物&#xff0c;与全世界各地的用户&…