源代码是18b20程序可以在液晶上正常显示,换成DHT11温湿度计读取不到数据
#include "STC15Fxxx.H"//调用stc15f系列头文
#include "oled.h"
#include "bmp.h"
#include "intrins.h"
#include "dht11.h"
#define ds18b20_io P20 //P2.0口作为数据读取接口
void Delay3us(); //22.1184M晶振精确延时30微秒
void Delay6us(); //22.1184M晶振精确延时30微秒
void Delay24us(); //22.1184M晶振精确延时40微秒
void Delay30us(); //22.1184M晶振精确延时40微秒
void Delay300us(); //22.1184M晶振精确延时40微秒
void Delay600us(); //22.1184M晶振精确延时30毫秒
void Delay1000ms(); //22.1184M晶振精确延时1000毫秒
sfr ADC_LOW2 = 0xBE; //ADC低2位结果
#define ADC_POWER 0x80 //ADC电源控制位
#define ADC_FLAG 0x10 //ADC完成标志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540个时钟
#define ADC_SPEEDL 0x20 //360个时钟
#define ADC_SPEEDH 0x40 //180个时钟
#define ADC_SPEEDHH 0x60 //90个时钟
typedef unsigned char BYTE;
typedef unsigned int WORD;
bit ds18b20_init(); //初始化ds18b20
u8 ds18b20_read_one_char(); //从ds18b20读取一个字节
void ds18b20_write_one_char(u8 dat);//向ds18b20写入一个字节
void ds18b20_ready_read_temp(); //准备读取数据
u16 ds18b20_read_temp_val(); //读取数据,返回温度值,返回实际值的100倍,且万位为符号位,例:12556为-25.56度,2556为25.56度
//变量定义
u16 datas=0;//测试用
u16 d3,d2,d1,d0,temp;//测试
u16 DL;//电量显示百分比
u16 Battery_data;//255电池数据缓存
u16 DL1,DL2,DL3;//电量按位显示在液晶屏上
void InitADC();
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void ShowResult(BYTE ch);
uchar RH(void);//温湿度函数声明
void DLXS();//电量查表百分比显示函数
void DCTB();//电池图标查表显示函数
u8 battery; //
int main(void)
{
OLED_Init(); //初始化OLED
OLED_Clear();//清屏
ds18b20_io = 1;//18b20先高电平
OLED_DrawBMP(0,0,128,8,BMP1);
delay_ms(1000);
OLED_Clear();
P1M0 = 0x00;
P1M1 = 0x40;
while(1)
{
RH();
temperature=datas;//温度数据对接
d3=datas/1000; //显示数据:百位
d2=datas/100; //显示数据:十位
d1=datas%100/10; //显示数据:个位
d0=datas%10; //显示数据:十分位
Battery_data=GetADCResult(6);//读取通道6电压转换数据
Battery_data=5*(long)ADC_RES*50/256*1;//数据转换电压
DLXS();
DCTB();
DL1=battery/100; //显示数据:十位
DL2=battery%100/10; //显示数据:十位
DL3=battery%10;
//显示数据:十位
Delay1000ms();
OLED_ShowCHinese(0,4,8);//温
OLED_ShowCHinese(16,4,9);//度
OLED_ShowCHinese(96,4,10);//摄氏度
OLED_ShowNum(48,4,d3,1,16); //温度显示十位
OLED_ShowNum(56,4,d2,1,16);//温度显示个位
OLED_ShowString(64,4,".",16);//温度显示小数点
OLED_ShowNum(72,4,d1,1,16); //温度显示小数点后一位
OLED_ShowNum(80,4,d0,1,16); //温度显示小数点后两位
OLED_ShowNum(104,1,DL3,1,8);//电量显示个位
OLED_ShowNum(96,1,DL2,1,8);//电量显示十位
OLED_ShowNum(88,1,DL1,1,8);//电量显示百位
OLED_ShowNum(16,1,U8RH_data_H,2,8);//电压值单独显示测试
}
}
//ds18b20初始化
bit ds18b20_init()
DHT11温湿度计2023.zip
(159.55 KB, 下载次数: 5)
|