源代碼是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)
2023-8-23 23:39 上傳
點擊文件名下載附件
|