|
源代碼是18b20程序可以在液晶上正常顯示,換成DHT11溫濕度計(jì)讀取不到數(shù)據(jù)
#include "STC15Fxxx.H"//調(diào)用stc15f系列頭文
#include "oled.h"
#include "bmp.h"
#include "intrins.h"
#include "dht11.h"
#define ds18b20_io P20 //P2.0口作為數(shù)據(jù)讀取接口
void Delay3us(); //22.1184M晶振精確延時(shí)30微秒
void Delay6us(); //22.1184M晶振精確延時(shí)30微秒
void Delay24us(); //22.1184M晶振精確延時(shí)40微秒
void Delay30us(); //22.1184M晶振精確延時(shí)40微秒
void Delay300us(); //22.1184M晶振精確延時(shí)40微秒
void Delay600us(); //22.1184M晶振精確延時(shí)30毫秒
void Delay1000ms(); //22.1184M晶振精確延時(shí)1000毫秒
sfr ADC_LOW2 = 0xBE; //ADC低2位結(jié)果
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標(biāo)志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540個(gè)時(shí)鐘
#define ADC_SPEEDL 0x20 //360個(gè)時(shí)鐘
#define ADC_SPEEDH 0x40 //180個(gè)時(shí)鐘
#define ADC_SPEEDHH 0x60 //90個(gè)時(shí)鐘
typedef unsigned char BYTE;
typedef unsigned int WORD;
bit ds18b20_init(); //初始化ds18b20
u8 ds18b20_read_one_char(); //從ds18b20讀取一個(gè)字節(jié)
void ds18b20_write_one_char(u8 dat);//向ds18b20寫入一個(gè)字節(jié)
void ds18b20_ready_read_temp(); //準(zhǔn)備讀取數(shù)據(jù)
u16 ds18b20_read_temp_val(); //讀取數(shù)據(jù),返回溫度值,返回實(shí)際值的100倍,且萬(wàn)位為符號(hào)位,例:12556為-25.56度,2556為25.56度
//變量定義
u16 datas=0;//測(cè)試用
u16 d3,d2,d1,d0,temp;//測(cè)試
u16 DL;//電量顯示百分比
u16 Battery_data;//255電池?cái)?shù)據(jù)緩存
u16 DL1,DL2,DL3;//電量按位顯示在液晶屏上
void InitADC();
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void ShowResult(BYTE ch);
uchar RH(void);//溫濕度函數(shù)聲明
void DLXS();//電量查表百分比顯示函數(shù)
void DCTB();//電池圖標(biāo)查表顯示函數(shù)
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;//溫度數(shù)據(jù)對(duì)接
d3=datas/1000; //顯示數(shù)據(jù):百位
d2=datas/100; //顯示數(shù)據(jù):十位
d1=datas%100/10; //顯示數(shù)據(jù):個(gè)位
d0=datas%10; //顯示數(shù)據(jù):十分位
Battery_data=GetADCResult(6);//讀取通道6電壓轉(zhuǎn)換數(shù)據(jù)
Battery_data=5*(long)ADC_RES*50/256*1;//數(shù)據(jù)轉(zhuǎn)換電壓
DLXS();
DCTB();
DL1=battery/100; //顯示數(shù)據(jù):十位
DL2=battery%100/10; //顯示數(shù)據(jù):十位
DL3=battery%10;
//顯示數(shù)據(jù):十位
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);//溫度顯示個(gè)位
OLED_ShowString(64,4,".",16);//溫度顯示小數(shù)點(diǎn)
OLED_ShowNum(72,4,d1,1,16); //溫度顯示小數(shù)點(diǎn)后一位
OLED_ShowNum(80,4,d0,1,16); //溫度顯示小數(shù)點(diǎn)后兩位
OLED_ShowNum(104,1,DL3,1,8);//電量顯示個(gè)位
OLED_ShowNum(96,1,DL2,1,8);//電量顯示十位
OLED_ShowNum(88,1,DL1,1,8);//電量顯示百位
OLED_ShowNum(16,1,U8RH_data_H,2,8);//電壓值單獨(dú)顯示測(cè)試
}
}
//ds18b20初始化
bit ds18b20_init()
DHT11溫濕度計(jì)2023.zip
(159.55 KB, 下載次數(shù): 5)
2023-8-23 23:39 上傳
點(diǎn)擊文件名下載附件
|
|