上回我们测试sht20温湿度传感器,总是用调试的方法我们的不太好看出来,最好用一款显示屏来显示,今天我们就用软件方法测试下我们的OLED显示屏显示我们的温度,湿度数据。
首先是初始化我们的IO口,这里因为还是使用模拟IIC的原因,所以我们的还是随便选择两个,这里我选择的是PA2,PA3。实测配置简单点也是可以通信上的,这里配置成输出模式是因为我们不去读取数据的。
/**********************************************
//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);
之后我们在main中先建立几个固定显示位置,这里就是提示作用了。
然后就到了动态显示环节了,我们的数据是float类型的,我们OLED的显示要么是字符,要么就是数字,要想得到浮点型数据,我们需要转换下,把浮点型转换成字符型。
那么这里又一个函数可以使用。如下:
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);
就是我们的sprintf函数,这个可以把浮点转换char。而且可以自己选择保留小数位。非常方便。这样我们就完成了移植,看下我们的视频。最后附件在最后。
演示视频
demo.zip
(8.97 MB, 下载次数: 5)
|