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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1444|回復: 7
打印 上一主題 下一主題
收起左側(cè)

單片機LCD12864沒有加入DHT11部分的代碼時可以顯示內(nèi)容,加入后就不顯示了

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1031984 發(fā)表于 2023-6-9 15:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
怎么解決啊
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define LCD_DATA P0 // 數(shù)據(jù)口
sbit LCD_RS = P2^0; // 命令/數(shù)據(jù)選擇位
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) { // 延時函數(shù)
    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) { // 寫命令函數(shù)
    LCD_RS = 0; // RS=0,選擇命令
    LCD_RW = 0; // RW=0,寫入數(shù)據(jù)
    LCD_DATA = cmd; // 寫入命令
    LCD_EN = 1; // 使能
    _nop_(); // 等待
    LCD_EN = 0; // 失能
    delay(1); // 延時
}

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

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

void lcd_write_str(unsigned char row, unsigned char col, char *str) { // 寫字符串函數(shù)
    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傳感器函數(shù)
    DHT11 = 0; // 拉低數(shù)據(jù)線
    delay_us(18000); // 延時18ms
    DHT11 = 1; // 拉高數(shù)據(jù)線
    delay_us(40); // 延時40us
    while (!DHT11); // 等待DHT11響應
    while (DHT11); // 等待DHT11響應結(jié)束
}

void DHT11_read_data(unsigned char *humi, unsigned char *temp) {
    unsigned char i, j, f[5] = {0, 0, 0, 0, 0};
    DHT11_start(); // 啟動DHT11傳感器
    // 發(fā)送起始信號
    DHT11 = 1;
    delay_us(40);
    DHT11 = 0;
    delay_us(20);
    DHT11 = 1;
    // 等待DHT11響應
    while (!DHT11);
    while (DHT11);
    while (!DHT11);
    // 讀取數(shù)據(jù)
    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);
        }
    }
    // 驗證數(shù)據(jù)
    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); // 讀取溫濕度數(shù)據(jù)
        sprintf(temp_str, "%d", temp); // 將溫度值轉(zhuǎn)換為字符串類型
        sprintf(humi_str, "%d", humi); // 將濕度值轉(zhuǎn)換為字符串類型
        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秒
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:807182 發(fā)表于 2023-6-9 19:12 | 只看該作者
因為你DHT11的延時太長了,LCD屏幕是SPI驅(qū)動的,對時序有一定要求
回復

使用道具 舉報

板凳
ID:1031984 發(fā)表于 2023-6-9 20:22 | 只看該作者
暖西夏 發(fā)表于 2023-6-9 19:12
因為你DHT11的延時太長了,LCD屏幕是SPI驅(qū)動的,對時序有一定要求

可是DHT11好像就是要兩秒才能讀取一次
回復

使用道具 舉報

地板
ID:965189 發(fā)表于 2023-6-10 06:52 來自手機 | 只看該作者
while (DHT11); // 等待DHT11響應結(jié)束 }到這里還能出來嗎?
回復

使用道具 舉報

5#
ID:855733 發(fā)表于 2023-6-10 09:21 | 只看該作者
這個情況很明顯是在DHT11程序里沒跳出來,猜測是你的幾個while函數(shù)導致一直在死循環(huán)。你可以把while注釋掉再試試
回復

使用道具 舉報

6#
ID:116103 發(fā)表于 2023-6-10 10:38 | 只看該作者
把 lcd_write_str(0, 0, "當前溫度:"); // 在第1行第1列顯示"當前溫度:"放在WHILE(1)之前,在主循環(huán)之前讓12864顯示,之后慢慢調(diào)顯示數(shù)據(jù).
回復

使用道具 舉報

7#
ID:1031984 發(fā)表于 2023-6-10 21:33 | 只看該作者
熱度三分 發(fā)表于 2023-6-10 09:21
這個情況很明顯是在DHT11程序里沒跳出來,猜測是你的幾個while函數(shù)導致一直在死循環(huán)。你可以把while注釋掉 ...

注釋掉也不顯示
回復

使用道具 舉報

8#
ID:141497 發(fā)表于 2023-6-10 22:16 | 只看該作者
用定時器定時3S刷新DHT11,時間到讀取數(shù)據(jù)再更新顯示數(shù)據(jù)就好。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩在线高清 | jdav视频在线观看免费 | 亚洲不卡一 | 欧美国产日韩一区二区三区 | 亚洲精品久久久 | 毛片网在线观看 | 欧美日韩在线高清 | 国产色婷婷精品综合在线手机播放 | 人妖av| 久久综合伊人 | 蜜桃免费一区二区三区 | 99精品视频在线 | 日本精品一区二区 | 毛片毛片毛片毛片毛片 | 在线中文字幕亚洲 | 欧美影院 | 一区二区三区四区视频 | 欧美精品欧美精品系列 | 正在播放国产精品 | 一区二区三区中文字幕 | 日本色婷婷 | 一区视频 | 国产线视频精品免费观看视频 | 亚洲一区在线播放 | 亚洲视频一区在线播放 | www.狠狠干 | 天堂色 | 亚洲一区二区三区在线 | 欧美专区在线视频 | 国产精品久久久久国产a级 欧美日韩国产免费 | 久久中文字幕一区 | 久久国产精品一区二区三区 | 亚洲第一女人av | 看片国产| 久久91精品 | 美女日批免费视频 | 国产激情视频网址 | 亚洲一区二区免费看 | 日韩在线中文 | 91视频观看 | 亚洲在线一区二区三区 |