蓝桥杯嵌入式模板构建

蓝桥杯嵌入式模板构建,第1张

蓝桥杯嵌入式模板构建 1.简单修改官方iic.c文件

    SCL_Output(0);
    delay1(DELAY_TIME);
    SDA_Output_Mode();
2.代码

IIC.c里面添加24c02和可编程电阻的读写代码

void iic_24c02_write(unsigned char* buff,unsigned char ucAddr, unsigned char num)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(ucAddr);
	I2CWaitAck();
	
	while(num--)
	{
		I2CSendByte(*buff++);
		I2CWaitAck();
	}
	I2CStop();
	delay1(500);
}

void iic_24c02_read(unsigned char* buff,unsigned char ucAddr, unsigned char num)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(ucAddr);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xa1);
	I2CWaitAck();
	
	while(num--)
	{
		*buff++ = I2CReceiveByte();
		if (num)
			I2CSendAck();
		else
			I2CSendNotAck();
	}
	I2CStop();
}


void write_Msp4017(unsigned value)
{
	I2CStart();
	I2CSendByte(0x5E);
	I2CWaitAck();
	
	I2CSendByte(value);
	I2CWaitAck();
	I2CStop();	
}

unsigned char read_Msp4017()
{
	unsigned char value;
	I2CStart();
	I2CSendByte(0x5F);
	I2CWaitAck();
	
	value = I2CReceiveByte();
	I2CSendNotAck();
	I2CStop();	

	return value;
}

3.应用
unsigned char Buff_24c02_write[5] = {0x01,0x02,0x03,0x04,0x05};//IIC要写入的数据
unsigned char Buff_24c02_read[5];                              //读数据放的位置

I2CInit();                                                     //初始化
iic_24c02_write(Buff_24c02_write,0,5);                         //写入Buff_24c02_write中的数据到E2PROM,从0个位置开始写,写入5个数据

iic_24c02_read(Buff_24c02_read,0,5);                           //从E2PROM里读数据到Buff_24c02_read中


write_Msp4017(0x77);                                          //将可编程电阻设置成0x77
res = read_Msp4017();                                         //读取可编程电阻的值,转换为真实值需要乘以0.7874
4.注意事项(重要)

在定义要写入的数据的时候定义可成十六进制方便读写,在屏幕上显示的时候可用%x


函数iic_24c02_write(Buff_24c02_write,0,5);和iic_24c02_read(Buff_24c02_read,0,5);之间如果挨着写,需要delay一毫秒的时间,否则会出错,如果没有挨着写,则根据距离远近来判断是否需要delay,一般隔得远就不用delay,因为中间执行的其他函数就相当于是delay了。


在我写的LCD显示函数中我不是一直去扫描LCD而是隔一段时间去扫描一次,具体见下面代码:

void Lcd_Func()
{
	if (uwTick - Lcd_Delay_uwTick < 417) return; 
		Lcd_Delay_uwTick = uwTick;
	
	iic_24c02_read(Buff_24c02_read,0,5);

	sprintf((char *)Lcd_Disp_arr,"  %x,%x,%x,%x,%x  ",Buff_24c02_read[0],Buff_24c02_read[1],Buff_24c02_read[2],Buff_24c02_read[3],Buff_24c02_read[4]);

	LCD_DisplayStringLine(Line0, Lcd_Disp_arr);
}

TMD这里的扫描时间不能小于417,否者显示出来的数组不止之前定义的5个数,后面还有ff这个鬼,但是可以在后面加空格给它挤出去解决问题,但是扫描时间如果大于417的话也不会出现这个问题。所以最好LCD扫描时间在500往上。



可编程电阻里面是分为127小份的,由上图可得
故在由读取值转换为真实值的过程需要乘以100000/127=0.78740

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5714289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存