3.3-3.9 蓝桥杯备赛周记

发布于:2025-03-10 ⋅ 阅读:(92) ⋅ 点赞:(0)

斜率关系

14届省赛
![[Pasted image 20250205145241.png]]
NE555频率解算温度 频率范围外 无效

unsigned int Freq;
if(Freq<200) {humnity=0;}
else if(Freq>2000) {humnity=0;}
else{
humnity=80.0/1800.0 *(float)(Freq-200)+10.0;
	}
	```
斜率计算题 需要类型转换 和数据需要带小数点,否则会被认定为其他类型 导致后续计算错误

 **12届省赛**
![[Pasted image 20250308202534.png]]

该题需要 展示小数点后两位,所以对 温度数位扩大一百倍
```c
if(temputure_100x<2000){DA_out_data[1]=100;}
else if(temputure_100x>4000{DA_out_data[1]=400;}
else
{
DA_out_data[1]=15*(temputure_100x/100-20)+100;
}

输出位出来进行转换 *51/100
例如 500乘51/100 结果为 255 数字量转化为模拟量
输出结果为 5V
不需要更改类型为float 完全是整数型

长按 短按

12届省赛s2

//抬起后 触发
if(Key_Down==7)
	{
			Key_Flag=1;
	}
if (Key_Up==7)
	{
		Key_Flag=0;
		if(time_1000ms>=1000)  //长按
		{ 
			Led_Flag^=1;  //事件	
		}else//短按
		{
					//
		}		
	}
//按住时触发
if(Key_Down==7)
	{
			Key_Flag=1;
	}
if(time_1000ms<=1000) 
{
	if(Key_Up==7)
	{
						//短按 放开
	Key_Flag=time_1000ms=0;//归位
		
	}
}
else 长按过程中
{
	if(Key_Old==7)
	{
			 //执行事件
	}
	if(Key_Up==7)
	{
		Key_Flag=time_1000ms=0;//归位
	}
}


定时器内部
	if(Key_Flag==1)
	{
		if(time_1000ms>=1000)  //长按
		{ time_1000ms=1001;}
	}
	else
	{	
		time_1000ms=0;
	}

四舍五入

float data;
unsinged char need_data;
need_data = (unsigned char)(data+0.5);

模块记录

超声波

方波反射 时间声速 位算数据
生成方波信号 记录
返回时间12.5us 翻转8次

#include "intrins.h"
 sbit Us_Tx=P1^0;
 sbit Us_Rx=P1^1; 

void Delay12us(void)	//@12.000MHz
{
	unsigned char data i;

	_nop_();
	_nop_();
	i = 35;//33~38
	while (--i);
}

void Ut_Wave_Init()
{
	unsigned char i;
	EA=0;
	for(i=0;i<8;i++)
	{
		Us_Tx=1;
		Delay12us();
		Us_Tx=0;
		Delay12us();
	}
	EA=1;
}

unsigned char Ut_Wave_Data()
{
	unsigned int time;
	CMOD=0x00;
	CH=CL=0;
	Ut_Wave_Init();
	CR=1;//开始计时
	while((Us_Rx==1)&&(CF==0));//没有接受到返回或溢出
	//v=340m/s=3.4*10^4cm/s
	//t=1us=10*10^(-6)s
	//x=vt/2=0.017cm
	CR=0; //停止计时
	
	if(CF==0)//有接受
	{
		time=CH<<8|CL;
		return (time*0.017);
	}
	else
	{
		CF=0;
		return 0;
	}
	
}

EEPROM

void EEPROM_Write(unsigned char *str,unsigned char addr,unsigned char num)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	I2CSendByte(addr);
	I2CWaitAck();
	
	while(num--)
	{
		I2CSendByte(*str++); //位置拉高
		I2CWaitAck();//保证写入完成
		I2C_Delay(200);
	}
	I2CStop();
	
	I2C_Delay(255);
	I2C_Delay(255);
	I2C_Delay(255);
	I2C_Delay(255);
}

void EEPROM_Read(unsigned char *str,unsigned char addr,unsigned char num)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	I2CSendByte(addr);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xa1);
	I2CWaitAck();
	while(num--)
	{
		*str++=I2CReceiveByte();
		if(num)
			I2CSendAck(0);  //读取完毕
		else 
			I2CSendAck(1);
	}
	I2CStop();
}

应用

写入				EEPROM_Write(&EEP_data, 0, 1);		EEPROM_Write(&EEPROM_Lock, 8, 1);
读取
EEPROM_Read(&EEPROM_Temp, 8, 1);
if (EEPROM_Temp == EEPROM_Lock)
	{
		EEPROM_Read(&EEP_data, 0, 1);
		AD_in_100x_limmit=EEP_data;
	}

独立按键与矩阵键盘

//矩阵
P42=0;P40=1;P35=1;P34=1
if(P33==0)temp=4;
if(P32==0)temp=5;
if(P31==0)temp=6;
if(P30==0)temp=7;
P42=1;P40=0;P35=1;P34=1
if(P33==0)temp=8;
if(P32==0)temp=9;
if(P31==0)temp=10;
if(P30==0)temp=11;
P42=1;P40=1;P35=0;P34=1
if(P33==0)temp=12;
if(P32==0)temp=13;
if(P31==0)temp=14;
if(P30==0)temp=15;
//独立按键
if(P33==0)temp=4;
if(P32==0)temp=5;
if(P31==0)temp=6;
if(P30==0)temp=7;

网站公告

今日签到

点亮在社区的每一天
去签到