【蓝桥杯单片机】第十四届省赛(原创解答代码)

前言

今天刷了第十四届的省赛,不得不说这个难度确实比之前的几届都要高,就比如说平常省赛不会考的555出现在了省赛中,逻辑性也很强。其次还有很多小陷阱。并且很多外设同时考察,一不小心就会陷入陷阱之中。本人第一次尝试2个小时以为差不多完成的时侯发现题意理解错了,重新写了一次用了大概快到5个小时了。所以大家动手之前一定要深刻理解题意,其次再去码。

笔者应该是全部实现了,如有需要者可点赞收藏找我下载源代码。同时欢迎大家指正发现错误。

 main.c(主文件)

#include "reg52.h"
#include "user.h"
#include "ds1302.h"
#include "iic.h"
#include "ds18b20.h"

sfr P4=0xc0;

sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;

sbit C1=P4^4;
sbit C2=P4^2;
sbit C3=P3^5;
sbit C4=P3^4;
void Display_info();
unsigned char flq;//数据是否有效
unsigned char ui=1;//默认时间显示界面(系统界面选择)
unsigned char Wr_time[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char Re_time[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
unsigned char Timer[7]={0x50,0x03,0x13,0x03,0x04,0x03,0x24};
unsigned int count_f=0;//频率产生
unsigned int dat_f=0;//一秒总频率
unsigned char count_t=0;//1秒计时
unsigned int count_flag=0;//3秒计时
unsigned int temp_x;//温度转换取得温度
unsigned char hot=30;//参数
unsigned char sun;//初始正常光照
unsigned char stat_led=0xff;//led状态
unsigned char flag=0;//亮暗状态检测
unsigned char cnt=0;//采集次数
unsigned char temp_new_display[100]=0;//实时采集温度
unsigned int temp_old[100]=0;
unsigned char i;//最大值平均值循环计数
unsigned int sum=0;//总值
unsigned int sum_junzhi=0;//温度平均值
unsigned int wet_junzhi=0;//湿度平均值
unsigned int wet_sum=0;//湿度总值
unsigned char temp_max=0;//温度最大值
unsigned char wet_max=0;//湿度最大值
unsigned char wet_new[100]=0;//实时采集湿度
unsigned int temp_new_noeffect=0;
unsigned char hour,min=0;
unsigned char count_long=0;
unsigned char S9_flag=0;
unsigned char stat_led4=0;
unsigned char count_led=0;
/************************电压采集********************/
unsigned char Get_Pcf8591()
{
	unsigned int x;
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	I2CSendByte(0x41);
	I2CWaitAck();
	I2CStart();
	I2CSendByte(0x91);
	I2CWaitAck();
	x=I2CReceiveByte();
	I2CSendAck(1);
	I2CStop();
	return x;
}
void Time555()
{
	TMOD=0x16;
	TH0=0xff;
	TL0=0xff;
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	
	EA=1;
	ET0=1;
	ET1=1;
	TR0=1;
	TR1=1;
}
void Service_count()interrupt 1
{
	count_f++;
}
void Service_timer()interrupt 3
{
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	count_t++;
	if(count_t==20)
	{
		dat_f=count_f;
		count_t=0;
  	count_f=0;
	}
  if(S9_flag==1)//S9按下
	{
		count_long++;//开始计数
	}
	if(flag==1)//定时器内检测状态,开始3秒计时。
	{
		count_flag++;
		if(count_flag==60)
		{
			flag=0;
			count_flag=0;
		}
	}
	if(stat_led4==1)
	{
		count_led++;
		stat_led&=~0x08;
		if(count_led==2)
		{
			count_led=0;
			stat_led|=0x08;
		}
		select573(4,stat_led);
	}
}

/************************时间采集********************/
void Write_1302()
{
	unsigned char i;
	Write_Ds1302_Byte(0x8e,0x00);
  for(i=0;i<7;i++)
	{
		Write_Ds1302_Byte(Wr_time[i],Timer[i]);
	}
	Write_Ds1302_Byte(0x8e,0x80);
}
void Read_1302()
{
	unsigned char i;
	for(i=0;i<7;i++)
	{
		Timer[i]=Read_Ds1302_Byte(Re_time[i]);
	}
}
/*************************初次温度读取**************/
void Initds18b20()
{
	unsigned char LSB,MSB;
	init_ds18b20();
	Write_DS18B20(0
<think>好的,我现在需要处理用户关于蓝桥杯单片机第十四届题目的查询。首先,用户提供了引用[1],其中提到代码和比的一些情况,但并没有详细题目内容。根据用户的问题,用户想要查找具体的题目内容。 首先,我需要确认用户的需求是否在现有引用中得到满足。引用[1]中的内容提到了第十四届题目,但只是描述了备过程,没有具体的题目描述或链接。因此,用户可能需要更详细的信息,比如题目要求、任务描述或者相关资源链接。 接下来,我需要考虑如何回答用户的问题。由于引用中没有提供题目本身,我应该建议用户通过蓝桥杯官网或官方渠道获取题目,因为比题目通常受版权保护,不会随意公开。此外,可能相关的技术论坛或往者的分享也是获取资源的途径,但需要注意版权问题。 同时,用户可能在备过程中遇到具体问题,可以建议他们详细描述遇到的问题,以便提供更具体的帮助。例如,硬件设计、编程任务或调试技巧等。这样既符合用户的需求,又避免了直接提供可能受版权保护的题目内容。 另外,用户示例中的回答结构需要包含相关问题的生成。我需要生成几个相关问题,帮助用户进一步深入备准备。例如,如何获取往题目、备建议、常见问题解决方法等。 最后,确保回答符合格式要求:使用中文,数学公式正确使用$和$$,引用标注正确,代码块格式正确。不过在这个问题中,用户的问题不涉及数学公式,所以可能不需要使用相关格式,但结构仍需清晰。 总结步骤: 1. 指出引用中未包含具体题目,建议官方渠道获取。 2. 提供备建议和资源获取方式。 3. 生成相关问题,引导用户进一步提问。 4. 确保回答结构清晰,符合用户需求。</think>关于蓝桥杯单片机第十四届题目,根据现有信息,该题目难度较往有所提升,涉及复杂的硬件设计与软件编程结合任务,例如传感器数据采集、外设控制、通信协议实现等[^1]。但引用内容未提供完整的题目描述或具体任务细节。 ### 建议获取途径: 1. **蓝桥杯官网**:通过官方发布的历年试题汇总或联系组委会获取(需注意版权限制)。 2. **技术论坛/社区**:如优快云、GitHub等平台可能有参者分享的解题思路和代码片段(例如引用中提到的代码示例)。 3. **学校资源**:向指导老师或往学长咨询题目存档。 ### 典型备方向: 根据往题目特点,可重点关注: - 多模块协同控制(如LED、按键、数码管) - 实时数据采集与处理(温度、光敏传感器) - 通信协议实现(I2C、SPI、UART) ```c // 示例代码片段(基于引用描述的可能任务) void read_sensor() { // 实现传感器数据读取 adc_init(); value = adc_read(0); // 假设通道0连接光敏传感器 display(value); // 数码管显示 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值