標題: 單片機驅(qū)動lcd1602顯示亂碼 [打印本頁]

作者: 初學(xué)者小樂    時間: 2020-9-23 16:24
標題: 單片機驅(qū)動lcd1602顯示亂碼
仿真lcd1602秒的十位是正常的,一到做實物,lcd1602顯示的秒十位就是亂碼。
在線求解


仿真顯示正常


實物的秒的十位顯示錯誤,成了;或者超過了6的各種奇怪亂碼

作者: angmall    時間: 2020-9-23 16:24

你要搞清楚時序圖





//****************************************************
//寫指令
//****************************************************
void LCD1602_write_com(unsigned char com)
{
        LCD1602_RS = 0;
        //LCD1602_delay_ms(1);
        LCD1602_EN = 0;  //<------
        LCD1602_PORT = com;
        LCD1602_EN = 1;  //<------
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//****************************************************
//寫數(shù)據(jù)
//****************************************************
void LCD1602_write_data(unsigned char dat)
{
        LCD1602_RS = 1;
        //LCD1602_delay_ms(1);
        LCD1602_EN = 0;    //<------     
        LCD1602_PORT = dat;
        LCD1602_EN = 1;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}



作者: 初學(xué)者小樂    時間: 2020-9-23 16:26
除了仿真使用的是89c52,實物使用的是89c54RD芯片以外,其余連接均和仿真一樣
作者: 長風007    時間: 2020-9-23 17:12
本帖最后由 長風007 于 2020-9-23 17:16 編輯

查一下你的顯示位,還有顯示的時間間隔。實物是有時序要求的!

Hei002.jpg (61.75 KB, 下載次數(shù): 87)

可以參考一下這個圖

可以參考一下這個圖

作者: 初學(xué)者小樂    時間: 2020-9-23 22:10
長風007 發(fā)表于 2020-9-23 17:12
查一下你的顯示位,還有顯示的時間間隔。實物是有時序要求的!

這是lcd1602的程序,時序有問題嗎?

#include "LCD1602.h"

//****************************************************
//MS延時函數(shù)(12M晶振下測試)
//****************************************************
void LCD1602_delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<123;j++);
}

//****************************************************
//寫指令
//****************************************************
void LCD1602_write_com(unsigned char com)
{
        LCD1602_RS = 0;
        LCD1602_delay_ms(1);
        LCD1602_EN = 1;
        LCD1602_PORT = com;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//****************************************************
//寫數(shù)據(jù)
//****************************************************
void LCD1602_write_data(unsigned char dat)
{
        LCD1602_RS = 1;
        LCD1602_delay_ms(1);       
        LCD1602_PORT = dat;
        LCD1602_EN = 1;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//****************************************************
//連續(xù)寫字符
//****************************************************
void LCD1602_write_word(unsigned char *s)
{
        while(*s>0)
        {
                LCD1602_write_data(*s);
                s++;
        }
}

void Init_LCD1602()
{
        LCD1602_EN = 0;                                                //設(shè)置為寫狀態(tài)
        LCD1602_write_com(0x38);                        //顯示模式設(shè)定
        LCD1602_write_com(0x0c);                        //開關(guān)顯示、光標有無設(shè)置、光標閃爍設(shè)置
        LCD1602_write_com(0x06);                        //寫一個字符后指針加一
        LCD1602_write_com(0x01);                        //清屏指令
}



作者: wc86110    時間: 2020-9-24 05:15
除了使用不同參數(shù)的芯片外,無需修改延時數(shù)值
作者: KongQuan    時間: 2020-9-24 12:05
檢查寫的字符串有沒有結(jié)束符“\x00",  
作者: ak333    時間: 2020-9-24 12:40
有DS1302等芯片嗎?IO線接對沒,芯片確定正常?我以前遇過時鐘芯片不正常有類似情況,99:00
作者: labview_mcu    時間: 2020-9-24 13:16
理論上你是在讀DS1302的時鐘,但是沒看到你這部分代碼
作者: labview_mcu    時間: 2020-9-24 13:18
兩個思路  讀取1302的時序適當加點延時,1302壞 換一片 讀取的數(shù)據(jù)可以通過發(fā)串口來測試
作者: mengsiu    時間: 2020-9-24 23:49
我估計你是用到時鐘芯片了。DS1302、1307等。
可能是讀取芯片數(shù)據(jù)沒有正確讀取出來,
檢查一下程序是否正確?適當加一點延時可能會有幫助。
數(shù)據(jù)線是否正確連接?數(shù)據(jù)線上加上拉電阻了嗎?
作者: fqc168    時間: 2020-9-26 09:01
原因:程序語句里是否含有中文字符,或者不可見字符,第二,通信異常,延遲不足也會產(chǎn)生,但是我更覺得是字符問題
作者: KongQuan    時間: 2020-9-26 10:15
可能是讀出的時鐘數(shù)據(jù)沒有屏蔽掉無關(guān)的位。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1