DHT22是一款數(shù)字式溫濕度傳感器,它采用單總線方式工作。為此,在使用時(shí)需占用一個(gè)I/O口,來(lái)進(jìn)行信息的收發(fā)處理,這里選用PF2來(lái)完成。
- void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len)
- {
- uint8_t t,temp;
- uint8_t enshow=0;
- uint8_t size2=16;
- for(t=0;t<len;t++)
- {
- temp=(num/oled_pow(10,len-t-1))%10;
- if(enshow==0&&t<(len-1))
- {
- if(temp==0)
- {
- OLED_ShowChar(x+(size2/2)*t,y,' ');
- continue;
- }else enshow=1;
-
- }
- OLED_ShowChar(x+(size2/2)*t,y,temp+'0');
- }
- }
復(fù)制代碼
實(shí)現(xiàn)溫濕度顯示的主程序?yàn)椋?/div>
- int main(void)
- {
- unsigned char senflag;
- /* Initializes MCU, drivers and middleware */
- SYSTEM_Initialize();
- OLED_Init();
- OLED_CLS();
- OLED_P8x16Str(0,0,"ATmega4809");
- OLED_P8x16Str(0,2,"OLED Display");
- OLED_P8x16Str(0,4,"T= . C H= . %");
- DELAY_milliseconds(100);
- senflag=DH22_Init();
- /* Replace with your application code */
- while (1){
- if(senflag)
- {
- OLED_P8x16Str(64,0," SEN OK!");
- DHT22_Read_Data(&temperature,&humidity);
- OLED_ShowNum(16,4,temperature/10,2);
- OLED_ShowNum(40,4,temperature%10,1);
- OLED_ShowNum(80,4,humidity/10,2);
- OLED_ShowNum(104,4,humidity%10,1);
- }
- else
- {
- OLED_P8x16Str(64,0," NO SEN!");
- }
- //PORTF_toggle_pin_level(5);
- LED_Toggle();
- DELAY_milliseconds(1000);
- }
- }
復(fù)制代碼
經(jīng)編譯下載,其運(yùn)行效果如圖2所示。
2.jpg (18.78 KB, 下載次數(shù): 50)
下載附件
2020-8-25 12:04 上傳
圖2 溫濕度顯示
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |