久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機LCD12864沒有加入DHT11部分的代碼時可以顯示內容,加入后就不顯示了 [打印本頁]

作者: Qmxxxx    時間: 2023-6-9 15:16
標題: 單片機LCD12864沒有加入DHT11部分的代碼時可以顯示內容,加入后就不顯示了
怎么解決啊
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define LCD_DATA P0 // 數據口
sbit LCD_RS = P2^0; // 命令/數據選擇位
sbit LCD_RW = P2^1; // 讀/寫選擇位
sbit LCD_EN = P2^2; // 使能信號位
sbit PSB = P2^6;

//定義DHT11傳感器的引腳
sbit DHT11=P2^4;

void _nop_(void);

void delay(unsigned int t) { // 延時函數
    unsigned int i, j;
    for (i = t; i > 0; i--) {
        for (j = 110; j > 0; j--);
    }
}

void delay_us(int us)// 延時子程序
{
    char j;
    while(us--)
    {
        for(j=0;j<1200;j++);
    }
}

void WriteCommand(unsigned char cmd) { // 寫命令函數
    LCD_RS = 0; // RS=0,選擇命令
    LCD_RW = 0; // RW=0,寫入數據
    LCD_DATA = cmd; // 寫入命令
    LCD_EN = 1; // 使能
    _nop_(); // 等待
    LCD_EN = 0; // 失能
    delay(1); // 延時
}

void WriteData(unsigned char dat) { // 寫數據函數
    LCD_RS = 1; // RS=1,選擇數據
    LCD_RW = 0; // RW=0,寫入數據
    LCD_DATA = dat; // 寫入數據
    LCD_EN = 1; // 使能
    _nop_(); // 等待
    LCD_EN = 0; // 失能
    delay(1); // 延時
}

void InitLCD12864() { // 初始化函數
    WriteCommand(0x30); // 設置8位數據總線,基本指令集
    WriteCommand(0x0C); // 打開顯示,關閉光標
    WriteCommand(0x01); // 清屏
    WriteCommand(0x06); // 設置文字寫入方向,自動加地址
}

void lcd_write_str(unsigned char row, unsigned char col, char *str) { // 寫字符串函數
    unsigned char addr = 0;
    if (row == 0) { // 第1行
        addr = 0x80 + col;
    } else if (row == 1) { // 第2行
        addr = 0x90 + col;
    } else if (row == 2) { // 第3行
        addr = 0x88 + col;
    } else if (row == 3) { // 第4行
        addr = 0x98 + col;
    }
    WriteCommand(addr); // 設置DDRAM地址
    while (*str != '\0') { // 寫入字符串
        WriteData(*str++);
    }
}


void DHT11_start() { // 啟動DHT11傳感器函數
    DHT11 = 0; // 拉低數據線
    delay_us(18000); // 延時18ms
    DHT11 = 1; // 拉高數據線
    delay_us(40); // 延時40us
    while (!DHT11); // 等待DHT11響應
    while (DHT11); // 等待DHT11響應結束
}

void DHT11_read_data(unsigned char *humi, unsigned char *temp) {
    unsigned char i, j, f[5] = {0, 0, 0, 0, 0};
    DHT11_start(); // 啟動DHT11傳感器
    // 發送起始信號
    DHT11 = 1;
    delay_us(40);
    DHT11 = 0;
    delay_us(20);
    DHT11 = 1;
    // 等待DHT11響應
    while (!DHT11);
    while (DHT11);
    while (!DHT11);
    // 讀取數據
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 8; j++) {
            while (!DHT11);
            delay_us(30);
            if (DHT11) {
                f[ i] |= (1 << (7 - j));
            }
            while (DHT11);
        }
    }
    // 驗證數據
    if ((f[0] + f[1] + f[2] + f[3]) == f[4]) {
        *humi = f[0]; // 濕度
        *temp = f[2]; // 溫度
    } else {
        *humi = 0;
        *temp = 0;
    }
    delay(2000); // 延時2秒等待下一次讀取
}



void main() {
    unsigned char humi, temp; // 定義溫濕度變量
    char temp_str[5], humi_str[5]; // 定義字符串變量,用于存放溫濕度值
    InitLCD12864(); // 初始化LCD12864顯示屏
    while (1) {
        DHT11_read_data(&humi, &temp); // 讀取溫濕度數據
        sprintf(temp_str, "%d", temp); // 將溫度值轉換為字符串類型
        sprintf(humi_str, "%d", humi); // 將濕度值轉換為字符串類型
        lcd_write_str(0, 0, "當前溫度:"); // 在第1行第1列顯示"當前溫度:"
        lcd_write_str(1, 0, "當前濕度:"); // 在第2行第1列顯示"當前濕度:"
        lcd_write_str(0, 7, temp_str); // 在第1行第7列顯示當前溫度
        lcd_write_str(1, 7, humi_str); // 在第2行第7列顯示當前濕度
        delay(1000); // 延時1秒
    }
}

作者: 暖西夏    時間: 2023-6-9 19:12
因為你DHT11的延時太長了,LCD屏幕是SPI驅動的,對時序有一定要求
作者: Qmxxxx    時間: 2023-6-9 20:22
暖西夏 發表于 2023-6-9 19:12
因為你DHT11的延時太長了,LCD屏幕是SPI驅動的,對時序有一定要求

可是DHT11好像就是要兩秒才能讀取一次
作者: 君工創    時間: 2023-6-10 06:52
while (DHT11); // 等待DHT11響應結束 }到這里還能出來嗎?
作者: 熱度三分    時間: 2023-6-10 09:21
這個情況很明顯是在DHT11程序里沒跳出來,猜測是你的幾個while函數導致一直在死循環。你可以把while注釋掉再試試
作者: wys91203    時間: 2023-6-10 10:38
把 lcd_write_str(0, 0, "當前溫度:"); // 在第1行第1列顯示"當前溫度:"放在WHILE(1)之前,在主循環之前讓12864顯示,之后慢慢調顯示數據.
作者: Qmxxxx    時間: 2023-6-10 21:33
熱度三分 發表于 2023-6-10 09:21
這個情況很明顯是在DHT11程序里沒跳出來,猜測是你的幾個while函數導致一直在死循環。你可以把while注釋掉 ...

注釋掉也不顯示
作者: 51jia    時間: 2023-6-10 22:16
用定時器定時3S刷新DHT11,時間到讀取數據再更新顯示數據就好。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 黄a在线播放| 99re国产视频 | 日本中文在线 | 男女一区二区三区 | 亚洲成人网在线观看 | 二区成人 | 久久精品国产一区二区三区不卡 | 一区二区视频在线观看 | 高清视频一区二区三区 | 亚洲va欧美va人人爽午夜 | 狠狠操天天操 | 三级成人片 | 国产亚洲精品久久久久动 | 国产精品一区久久久 | 一区二区精品视频 | 秋霞在线一区二区 | 华丽的挑战在线观看 | 成人av网站在线观看 | 91精品国产综合久久婷婷香蕉 | 99精品视频在线观看免费播放 | 欧美性高潮 | 国产福利91精品 | 色av一区二区三区 | 午夜精品在线观看 | 视频一区二区在线观看 | 久久99精品久久久久子伦 | 成人精品视频99在线观看免费 | 亚洲人成网站777色婷婷 | 成人免费视屏 | 91精品国产91久久久久久最新 | 成人欧美一区二区三区黑人孕妇 | 黄色欧美在线 | 欧美11一13sex性hd| 男女免费观看在线爽爽爽视频 | 亚洲精品一区在线观看 | jlzzjlzz国产精品久久 | 久久久久国产一区二区三区 | 久久午夜视频 | 中文字幕在线观看第一页 | 久久国产欧美日韩精品 | 欧美激情精品久久久久久免费 |