流行科技 发表于 2022-7-24 21:33

【N32L43x评测】OLED显示温湿度数据

<p>上回我们测试sht20温湿度传感器,总是用调试的方法我们的不太好看出来,最好用一款显示屏来显示,今天我们就用软件方法测试下我们的OLED显示屏显示我们的温度,湿度数据。</p>

<p style=""> &nbsp;</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&lt;8;i++)            

       {

              m=da;

              m=m&amp;0x80;

              if(m==0x80)

              {

                     OLED_SDIN_Set();

              }

              else

              {

                     OLED_SDIN_Clr();

              }

              da=da&lt;&lt;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>

Pythonista 发表于 2022-7-26 10:14

<p>支持大佬!!!!</p>

<p>源码 我拿走啦!! 直接丢我的作业上</p>

流行科技 发表于 2022-7-26 10:49

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]
查看完整版本: 【N32L43x评测】OLED显示温湿度数据