【N32L43x评测】OLED显示温湿度数据
<p>上回我们测试sht20温湿度传感器,总是用调试的方法我们的不太好看出来,最好用一款显示屏来显示,今天我们就用软件方法测试下我们的OLED显示屏显示我们的温度,湿度数据。</p><p style=""> </p>
<p style="">首先是初始化我们的IO口,这里因为还是使用模拟IIC的原因,所以我们的还是随便选择两个,这里我选择的是PA2,PA3。实测配置简单点也是可以通信上的,这里配置成输出模式是因为我们不去读取数据的。</p>
<pre>
<code>/**********************************************
//IIC Start
**********************************************/
void IIC_START()
{
OLED_SDIN_Set();
delay_us(10);
OLED_SCLK_Set();
delay_us(10);
OLED_SDIN_Clr();
delay_us(10);
OLED_SCLK_Clr();
delay_us(10);
}
/**********************************************
//IIC Stop
**********************************************/
void IIC_STOP()
{
OLED_SDIN_Clr();
delay_us(10);
OLED_SCLK_Set();
delay_us(10);
// OLED_SCLK_Clr();
OLED_SDIN_Set();
delay_us(10);
}
void IIC_Wait_Ack()
{
OLED_SDIN_Clr();
delay_us(5);
OLED_SCLK_Set();
delay_us(5);
OLED_SCLK_Clr();
}
/**********************************************
// IIC Write byte
**********************************************/
void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i;
unsigned char m,da;
da=IIC_Byte;
OLED_SCLK_Clr();
for(i=0;i<8;i++)
{
m=da;
m=m&0x80;
if(m==0x80)
{
OLED_SDIN_Set();
}
else
{
OLED_SDIN_Clr();
}
da=da<<1;
delay_us(5);
OLED_SCLK_Set();
delay_us(5);
OLED_SCLK_Clr();
delay_us(5);
}
}
/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{
IIC_START();
Write_IIC_Byte(0x78); //Slave address,SA0=0
IIC_Wait_Ack();
Write_IIC_Byte(0x00); //write command
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Command);
IIC_Wait_Ack();
IIC_STOP();
}
/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
IIC_START();
Write_IIC_Byte(0x78); //D/C#=0; R/W#=0
IIC_Wait_Ack();
Write_IIC_Byte(0x40); //write data
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Data);
IIC_Wait_Ack();
IIC_STOP();
}
在我们的IIC中我们还是需要配置下延时的,实测速度比较快,没有延时OLED要么显示不对,要么就是直接不亮了。
OLED_ShowString(byte(3)+4,line1," Nation",8);
OLED_ShowString(byte(0),line4,"Temp:",8);
OLED_ShowString(byte(0),line6,"Humi:",8);
OLED_ShowString(byte(10),line4,"C",8);
OLED_ShowString(byte(10),line6,"%",8);</code></pre>
<p style="">之后我们在main中先建立几个固定显示位置,这里就是提示作用了。</p>
<p style="">然后就到了动态显示环节了,我们的数据是float类型的,我们OLED的显示要么是字符,要么就是数字,要想得到浮点型数据,我们需要转换下,把浮点型转换成字符型。</p>
<p style="">那么这里又一个函数可以使用。如下:</p>
<pre>
<code> SHT20_GetValue();
sprintf(temp,"%.2f",sht20Info.tempreture);
sprintf(humi,"%.2f",sht20Info.humidity);
OLED_ShowString(byte(5),line4,temp,8);
OLED_ShowString(byte(5),line6,humi,8);</code></pre>
<p style="">就是我们的sprintf函数,这个可以把浮点转换char。而且可以自己选择保留小数位。非常方便。这样我们就完成了移植,看下我们的视频。最后附件在最后。</p>
<p style="">48b068cfaa319a206a578c10155d4608</p>
<p></p>
<p>支持大佬!!!!</p>
<p>源码 我拿走啦!! 直接丢我的作业上</p>
Pythonista 发表于 2022-7-26 10:14
支持大佬!!!!
源码 我拿走啦!! 直接丢我的作业上
<p>没问题</p>
<div id="qb-sougou-search" style="display:none; opacity:0">
<p>搜索</p>
<p class="last-btn">复制</p>
<iframe src=""></iframe></div>
页:
[1]