蓝桥杯单片机组第九届国赛题目解答(国二代码加注释)

本文提供了蓝桥杯单片机组第九届国赛的题目、hex文件、主函数实现和完整工程文件。作者分享了如何使用hex文件烧录单片机,并强调了比赛中需要注意驱动代码的完整性。还提供了代码示例和工程文件的百度网盘下载链接,以及承诺对学习过程中的问题提供帮助。
摘要由CSDN通过智能技术生成

蓝桥杯比赛 单片机组 第九届国赛赛题目解答(代码加注释)


一、题目

  历届的省赛和国赛的题目我已经在前面的文章(点击查看)里给大家分享了(网盘资源),需要的话,直接去下载,我在这里就不再赘述了。

二、hex文件

读者下载这个文件然后用烧录软件直接烧入单片机就可以用了!

链接:https://pan.baidu.com/s/1pnyxWPjcqpegZluauJEJyA
提取码:ulx3

三、主函数实现

  提示:比赛过程中,仅仅主函数修改可能不够,有的时候需要注意,比赛官方给的各个驱动的代码是否写完整了,比如有时候,它的.h文件中就没有把这些写全,故意注释掉,你需要去对应的.c文件里找都需要一些什么函数,一个个都补全了才行。
在这里插入图片描述
  另外,我的代码都是完全在一个文件中写完的,所以各位读者大大用起来就比较方便,可以直接拷贝我的.c文件也可以把内容复制粘贴走,放到你想要的地方去。

上代码:

# include "reg52.h"
# include "iic.h"
# include "onewire.h"

typedef unsigned char uchar;
typedef unsigned int uint;

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;

uchar duanma[10] = {
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar duanmadot[10] = {
   0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

uint f_dat = 0;		 //频率数据测量
uint f_c = 0;		 //频率的计数变量
uint temp = 0;		 //温度数据测量
uint t_dat = 0;		 //温度显示的变量
uchar u_dat = 0;	 //电压数据测量
uchar u_dat_yu = 20; //电压的阈值
uchar k4 = 0;		 //按键S4,默认为显示电压 
uchar k8 = 0;        //按键S8,默认为数据显示界面
uint count = 0;      //定时器1的计数变量
uchar hu_dat = 0;	 //回显的电压数据
uint ht_dat = 0;     //回显的温度数据
uint hf_dat = 0;     //回显的频率数据
bit k9 = 0;          //默认显示数据显示界面
uint s8_count[2] = {
   0,0};	 //记录按键S8的按下时间
uint count8 = 0;     //s8的定时器计数变量
uchar light = 0;     //控制灯的变量
bit l8f = 0;         //L8闪烁标志位

void SelectHC573 (uchar n)
{
   
	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;
		case 0:
			P2 = (P2 & 0x1f) | 0x00;break;
	}	
}

//初始化函数
void InitSystem ()
{
   
	SelectHC573(4);
	P0 = 0xff;
	SelectHC573(5);
	P0 = 0x00;
	SelectHC573(0);	
}

//简单延时函数
void Delay (uint t)
{
   	
	while (t--);
}

//温度读取函数
void ReadTemp ()
{
   
	uchar LSB;
	uchar 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 << 8) | LSB;
	if ((temp & 0xf800) == 0x0000)
	{
   
		temp = temp >> 4;
		temp = temp * 100;
		temp = temp + ((LSB & 0x0f) * 0.0625 + 0.005) * 100;
	}
	t_dat = temp;
}

//电压测量
void ReadRb2 ()
{
   
	uchar rb2 = 0;

	IIC_Start();
	IIC_SendByte(0x90
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自由学者亻伊宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值