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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2259|回復: 11
收起左側

LCD1602只顯示方格不顯示數據,怎么回事呢

  [復制鏈接]
ID:1121838 發表于 2024-6-25 13:25 | 顯示全部樓層 |閱讀模式

單片機STC89C52,做了一個HX711的稱重電子秤。
程序:
#include <reg52.h>
#include <intrins.h>

// 定義LCD1602相關引腳
sbit RS = P2^6;   // RS引腳
sbit RW = P2^5;   // RW引腳
sbit E = P2^7;    // E引腳
sbit DATA = P0;   // 數據線引腳

// 定義HX711相關引腳
sbit PD_SCK = P1^5;   // 時鐘引腳
sbit DOUT = P1^6;     // 數據引腳

// 定義獨立按鍵引腳
sbit KEY = P3^2;

// 定義全局變量
bit tareFlag = 0;     // 去皮操作標志位
long tareValue = 0;   // 去皮值

// LCD1602寫命令
void LcdWriteCmd(unsigned char cmd) {
    RS = 0;
    RW = 0;
    DATA = cmd;
    _nop_();
    E = 1;
    _nop_();
    E = 0;
    _nop_();
}

// LCD1602寫數據
void LcdWriteData(unsigned char dat) {
    RS = 1;
    RW = 0;
    DATA = dat;
    _nop_();
    E = 1;
    _nop_();
    E = 0;
    _nop_();
}

// LCD1602初始化
void LcdInit() {
    LcdWriteCmd(0x38);   // 設置16x2顯示模式
    LcdWriteCmd(0x0c);   // 開啟光標并關閉閃爍
    LcdWriteCmd(0x06);   // 光標右移
    LcdWriteCmd(0x01);   // 清除顯示
    LcdWriteCmd(0x80);   // 設置顯示位置為第一行第一個字符
}

// HX711讀取數據
long Hx711Read() {
    unsigned char i;
    long value = 0;

    while(DOUT);

    for (i = 0; i < 24; i++) {
        PD_SCK = 1;
        value = value << 1;
        _nop_();
        if (DOUT) {
            value++;
        }
        PD_SCK = 0;
        _nop_();
    }

    for (i = 0; i < 1; i++) {
        PD_SCK = 1;
        _nop_();
        PD_SCK = 0;
        _nop_();
    }

    return value;
}

// 延時函數
void Delay(unsigned int n) {
    unsigned int i, j;

    for (i = n; i > 0; i--) {
        for (j = 110; j > 0; j--);
    }
}

// 顯示重量和去皮值
void DisplayWeight(long weight) {
    unsigned char i;
    unsigned long temp;
    unsigned char str[] = "Weight:";

    temp = weight;

    for (i = 7; i >= 0; i--) {
        str[7 - i + 7] = temp % 10 + '0';
        temp /= 10;
    }

    for (i = 0; i < 8; i++) {
        LcdWriteData(str[i]);
    }

    if (tareFlag) {
        unsigned char strTare[] = " Tare:";
        temp = tareValue;

        for (i = 7; i >= 0; i--) {
            strTare[7 - i + 6] = temp % 10 + '0';
            temp /= 10;
        }

        for (i = 0; i < 7; i++) {
            LcdWriteData(strTare[i]);
        }
    }
}

// 去皮操作
void Tare() {
    tareFlag = 1;
    tareValue = Hx711Read();
}

// 主函數
void main() {
    long weight;

    LcdInit();   // 初始化LCD1602
    Delay(5);

    while (1) {
        weight = Hx711Read();   // 讀取重量

        if (tareFlag) {
            weight -= tareValue;   // 計算凈重
        }

        DisplayWeight(weight);   // 顯示重量

        if (KEY == 0) {
            Delay(50);
            if (KEY == 0) {
                Tare();   // 執行去皮操作
                while (!KEY);
                Delay(10);
            }
        }
    }
}


回復

使用道具 舉報

ID:262 發表于 2024-6-25 14:23 | 顯示全部樓層
來看一下51hei論壇里面解決此問題的痛苦經歷吧:
51hei搜索框輸入"1602 方塊"或者"1602 黑塊"或者"1602 白塊"或者"1602 格":

這個是io口設置問題,最終搞定了:http://m.zg4o1577.cn/bbs/dpj-199732-1.html
http://m.zg4o1577.cn/bbs/dpj-168643-1.html
http://m.zg4o1577.cn/bbs/dpj-208189-1.html
http://m.zg4o1577.cn/bbs/dpj-210690-1.html

既有可能是軟件問題也有硬件問題
http://m.zg4o1577.cn/bbs/dpj-187378-1.html
http://m.zg4o1577.cn/bbs/dpj-160754-1.html
回復

使用道具 舉報

ID:619259 發表于 2024-6-25 16:18 | 顯示全部樓層
可能的原因:
1.對比度調節沒調到最佳狀態。
2.寫命令和寫數據程序存在問題,造成初始化失敗和數據傳輸失敗。分析你的代碼,無忙檢測,說明你采用盲測的方法,即寫入數據時需要一定的延時,確保數據傳輸完畢,才能執行下一個指令。你代碼中“E = 1;   _nop_();   E = 0;”,顯然延時是不夠的。因不同的顯示屏的性能有差異,一般采用1ms延時,如果還不行,再加大延時。如果用的是更高速度的芯片,最好還是加上忙檢測。
回復

使用道具 舉報

ID:366877 發表于 2024-6-25 16:44 | 顯示全部樓層
大概率是對比度調節出了問題。延時問題只要看看手冊,按規定延時即可。
回復

使用道具 舉報

ID:161164 發表于 2024-6-25 17:51 | 顯示全部樓層



2024-06-25_174732.png
2024-06-25_174742.png
2024-06-25_175033.png



回復

使用道具 舉報

ID:332444 發表于 2024-6-25 19:25 | 顯示全部樓層
初學時用過帶的代碼似乎就是方塊的現象,所以,一直沒什么信心,很久后自己研究時序,自己寫驅動,就再也沒遇到方塊問題,到我帖子里面對比看看。
回復

使用道具 舉報

ID:1127243 發表于 2024-6-27 14:42 | 顯示全部樓層
如果在查看了對比度和引腳連接問題后仍無法解決,可以嘗試換一個顯示屏。我們上次做就是給的顯示屏壞掉了,查了很久的錯最后換了一個就好了
回復

使用道具 舉報

ID:1127342 發表于 2024-6-27 20:18 | 顯示全部樓層
應該是對比度調節的問題,先試試改這個看看
回復

使用道具 舉報

ID:329625 發表于 2024-7-2 09:08 來自觸屏版 | 顯示全部樓層
實物的話會出現這種狀況 需要調節背光燈  然后同步做個仿真驗證一下 仿真里面不會出現這種現象
回復

使用道具 舉報

ID:517951 發表于 2024-7-7 11:45 | 顯示全部樓層
如果顯示兩行的方格, 就應該是V0 需要調節.
如果顯示一行的方格, 就應該是初始化代碼沒有正確的發送到1602的driver IC.
回復

使用道具 舉報

ID:1128391 發表于 2024-7-7 14:00 | 顯示全部樓層
第1行黑塊,第2行空白,是1602本身上電復位成功的標志。意味著單片機沒有進行初始化,需要檢查電路.
兩行都是顯示黑塊 嘗試調節電位器,直到黑塊消失。帶背光的1602 lcd在上電復位的成功的時候,調整正確的時候是看不見黑塊的。
回復

使用道具 舉報

ID:1128391 發表于 2024-7-7 14:02 | 顯示全部樓層
第1行黑塊,第2行空白,是1602本身上電復位成功的標志。意味著單片機沒有進行初始化,需要檢查電路.兩行都是顯示黑塊 嘗試調節電位器,直到黑塊消失。帶背光的1602 lcd在上電復位的成功的時候,調整正確的時候是看不見黑塊的。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂а√在线中文在线新版 | www.国产91| 日本免费黄色网址 | 国产成年妇视频 | 久久久久成人网 | 爱啪啪av | 久久成人免费视频 | 一级特黄妇女高潮 | 久久精品一 | 青娱乐av | 亚洲欧美一区二区三区在线 | 二色av| 黄色特级毛片 | 男女操操操 | 亚洲精品一区二区三区在线 | 视频一区二区三区在线观看 | 日韩精品在线一区二区 | 无遮挡毛片 | 在线黄色网 | 国产精品二区一区二区aⅴ污介绍 | 性爱一级视频 | 国产中文字幕在线播放 | 黄色在线观看网址 | 激情久久av| 一区二区三区视频 | 欧美日韩激情视频 | 国产色网站 | 色av导航| 黄色片在线 | 欧美日韩亚洲视频 | 少妇高潮久久久久久潘金莲 | 日韩综合久久 | 亚洲精品中文字幕乱码三区91 | 欧美不卡 | 日本一区二区在线播放 | 四虎影视av | 欧美综合激情 | 一区二区免费 | 国产成人三级一区二区在线观看一 | 国产欧美成人 | 久久综合亚洲 |