蓝桥杯备赛

本文介绍了参加蓝桥杯第六届省赛的单片机项目——温度记录器的设计思路与实现过程。内容包括模块划分、模式设计、界面布局,详细讲解了DS18B20和DS1302的底层代码实现,定时器配置,按键及数码管显示功能的编程。提供完整代码下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Emmmm,第一次写博客,冲冲冲!!!

蓝桥杯单片机第六届省赛“温度记录器”

  先来看看题目

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

一、思路提炼

1、模块划分

    数码管、独立按键、DS18B20、DS1302、一个LED

2、模式划分

    参数设置
    时钟显示
    温度显示

3、界面划分

    参数设置界面
    时钟显示界面
    温度显示界面

二、程序过程实现

1、DS18B20底层代码

 比赛会提供一个选手资料包,里面有DS18B20的底层驱动代码,我们只需要修改一下就能使用了。
 由于时序的问题,需要将延时函数扩大12倍。

void Delay_onewire(unsigned int t )
{
	unsigned char i;
	while(t--){
	for(i=12;i>0;i--);
	};
}

接下来是需要自己写的代码
unsigned char rd_temperature()
{
	unsigned char LSB,MSB  // 分别读取高字节和低字节
	char temp  
	EA = 0;						//进行温度转换时关闭中断,避免干扰时序
	init_ds18b20();				//DS18B20复位
	Write_DS18B20(0xCC);		//写入字节0xCC,跳过ROM指令
	Write_DS18B20(0x44);		//写入字节0x44,开始温度转换
	Delay_onewire(200);			//延时700~900us
	init_ds18b20();				//DS18B20复位
	Write_DS18B20(0xCC);		//写入字节0xCC,跳过ROM指令
	Write_DS18B20(0xBE);		//写入字节0xBE,读取高速暂存器
	LSB = Read_DS18B20();   	//读取低8位
	MSB = Read_DS18B20();		//读取高8位

   	temp = MSB << 4;			//读取数据
	temp |= (LSB >> 4);
### 关于蓝桥杯 Week1 的训练计划 #### 一、题目推荐 对于蓝桥杯的第一周,建议从简单的算法题入手,逐步提升难度。以下是适合第一周练习的一些经典题目: 1. **日期计算类问题** 这是一类常见的蓝桥杯题目,涉及年份、月份和星期的推算。可以通过遍历的方式解决此类问题[^2]。 2. **字符串处理** 字符串操作是程序设计的基础之一,在比中经常会出现类似的题目。例如:统计字符频率、反转字符串等。 3. **简单数学运算** 利用基本的数学知识解决问题,比如求最大公约数、最小公倍数等问题。 4. **数组与矩阵操作** 学习如何高效地操作二维数据结构,并完成一些基础的任务,如旋转图像或者查找特定模式。 #### 二、解题思路分析 - 对于日期相关的题目,可以采用枚举法逐一验证符合条件的日子是否存在。这种方法虽然耗时较长,但在限定范围内仍然可行。 - 针对字符串处理方面的问题,则需熟悉各种内置函数以及正则表达式的应用技巧;同时也要注意边界条件的考虑以免遗漏特殊情况。 - 数学类型的试题通常要求考生具扎实理论功底外加灵活运用能力。因此平时多积累经验非常重要。 - 当遇到有关数组/列表的操作需求时,请牢记时间复杂度的概念并尝试优化解决方案以减少不必要的循环次数从而提高效率。 #### 三、Python 示例代码展示 下面给出一个关于日期计算的小例子作为参考: ```python def count_sundays(start_year, end_year): from datetime import date total = 0 for year in range(start_year, end_year + 1): for month in range(1, 13): d = date(year, month, 1) if d.weekday() == 6: # Sunday is represented by 6. total += 1 return total print(count_sundays(1901, 2000)) # Example usage of the function. ``` 此段脚本用于统计给定区间内的每个月第一天是否为星期日的数量总和。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值