找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3812|回復: 15
收起左側

新人求助。!51單片機1602液晶問題

[復制鏈接]
ID:143967 發(fā)表于 2016-10-22 20:24 | 顯示全部樓層 |閱讀模式
新人求助。!各位大俠看看,自定義字符,出問題了。。小弟水平有限,幫幫看看~

#include <reg52.h>                   //自定義字符,出問題了
#define uchar unsigned char
#define uint  unsigned  int

sbit RS=P1^0;
sbit RW=P1^1;
sbit  E=P1^2;
sbit BF=P0^7;

uchar _0C[8]={0X10,0X06,0X09,0X08,0X08,0X09,0X06,0X00};
void delay(uint t)
{
        while (--t);
}

void S_busy()
{
        E=1;
        RS=0;
        RW=1;
        BF=1;
        while(BF);
}

void write_com(uchar com)        //        寫指令
{
        E=0;
        RS=0;
        RW=0;
        P0=com;
        delay(100);
        E=1;
        delay(100);
        E=0;

}
void write_cn(uchar cn)                //        寫數據
{
        E=0;
        RS=1;
        RW=0;
        P0=cn;
        delay(100);
        E=1;
        delay(100);
        E=0;

}
//void (*Phshu[2])(uchar strin)={write_com,write_cn};
void init ()
{
/*        E=0;
        RS=0;
        RW=0; */
        write_com(0X01);                  //清零
        write_com(0X38);            //設置功能,雙行顯示,5*7點陣 8位數據接口
        write_com(0X0F);                //顯示器開關,顯示光標,閃爍光標
//        write_com(0X02);                //光標移動左上角
//        write_com(0X06);                //寫完一個數據后,地址光標右移一格整屏不移動
        write_com(0X80);   //設置顯示地址
}
void U_define_char (uchar add,uchar *Pc)//地址,內容
{
        uchar i;
        add=0X40+(add<<3);                //地址輸入為0~8,實際加上0X40
        for(i=0;i<8;i++)
        {
                write_com(add++);        //地址加1
                write_cn (*Pc++);        //寫數據+1
        }
}
void LCD_Dispaly()
{
        

        U_define_char (0,_0C);                //define char
        
        write_cn (0);

}
void main()
{        
       uchar i;
        init();

        E=0;
        for(i=0;i<8;i++)
        {
                write_com(0X40+i);        //地址加1
                delay(100);
                write_cn (_0C);        //寫數據+1
                delay(100);
        }
        delay(100);
        write_cn (0X00);
        while(1);
}

回復

使用道具 舉報

ID:143967 發(fā)表于 2016-10-22 20:30 | 顯示全部樓層
小弟寫著寫著差點暈了,這是給哪個寄存器寫的指令還是數據。。,F(xiàn)在還有兩個問題沒搞懂,一個是判忙,另一個是使能端EN,查了好多資料和時序圖、程序,關于EN的拉高和拉低有不同的說法,郁悶的是還都能運行,大俠指點指點讀寫時EN的變化。。。
回復

使用道具 舉報

ID:113415 發(fā)表于 2016-10-23 07:45 | 顯示全部樓層
你的初始化里面,0x38應當多寫幾次,只寫一次初始化往往不成功。1602運行很慢,單片機則很快,如果隨照單片機速度,1602根本來不及反應。操作前,先問問1602忙不忙?答復不忙,再發(fā)送,這就是查忙的作用,也可以用延時取代查忙。
     E是使能端,單片機與1602控制器之間的數據交換,都是在E端電平“變化”之中完成的。必須是先高后低、或者先低后高這個轉換。至于究竟用哪一個,可以參考1602手冊上的介紹。
回復

使用道具 舉報

ID:143967 發(fā)表于 2016-10-23 10:50 | 顯示全部樓層
baofu 發(fā)表于 2016-10-23 07:45
你的初始化里面,0x38應當多寫幾次,只寫一次初始化往往不成功。1602運行很慢,單片機則很快,如果隨照單片 ...

嗯,謝謝,謝謝,我現(xiàn)在碰到的問題是,初始化可以,但是執(zhí)行自定義字符程序的時候,寫的指令和數據本該寫到那個CGRAM還是CGROM里的,卻變成了顯示到LCD上面的指令了,現(xiàn)在一個頭兩個大,查了兩天資料程序還是沒看懂......幫忙看下我發(fā)的指令有問題嗎?別人說指令是01xxxccc(x 三位是8個自定義的選擇,
c 三個是選擇哪一行),然后再發(fā)每一行的數據,不知道為什么就是執(zhí)行完后會變成顯示的指令,顯示的指令不應該是0X80第一行或0X80+0X40第二行的嗎,直接發(fā)0X40應該不互相打擾?我腦袋思路都不清晰了。。。
回復

使用道具 舉報

ID:143967 發(fā)表于 2016-10-23 10:55 | 顯示全部樓層
baofu 發(fā)表于 2016-10-23 07:45
你的初始化里面,0x38應當多寫幾次,只寫一次初始化往往不成功。1602運行很慢,單片機則很快,如果隨照單片 ...

剛回復的不知道去哪了。。。
現(xiàn)在執(zhí)行完后,全變成了顯示的指令,而且是在第二行顯示的。。。
回復

使用道具 舉報

ID:60379 發(fā)表于 2016-10-23 11:01 | 顯示全部樓層
建議看看《51單片機輕松入門-基于STC15W4K系列》書或配套視頻,有1602液晶自定義字符與漢字顯示的實驗演示與程序代碼。
回復

使用道具 舉報

ID:111634 發(fā)表于 2016-10-23 19:10 | 顯示全部樓層
本帖最后由 zl2168 于 2016-10-23 19:19 編輯

實例61  LCD1602顯示屏顯示
LCD1602顯示屏簡介
⑴ 引腳功能    …
內部寄存器
1) 數據顯示存儲器DDRAM。    …
2)既有字符存儲器CGROM。   …
3)自定義字符存儲器CGRAM。   …
4)地址計數器AC。    …
5)忙標志BF。    …
⑶ 控制指令    …
⑷ 操作時序    …
⒉ 電路設計   
程序設計   
⒋ Keil調試   
Proteus仿真
先Proteus仿真一下,確認有效。
實例61 LCD1602顯示屏顯示.rar (49.26 KB, 下載次數: 8)
1602.jpg
以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版
書中電路和程序設計有詳細說明,程序語句條條有注解。



















































































。



回復

使用道具 舉報

ID:143967 發(fā)表于 2016-10-25 22:07 | 顯示全部樓層
zl2168 發(fā)表于 2016-10-23 19:10
實例61  LCD1602顯示屏顯示
⒈ LCD1602顯示屏簡介
⑴ 引腳功能    …

謝謝,六個字、、、
回復

使用道具 舉報

ID:144709 發(fā)表于 2016-10-27 10:10 | 顯示全部樓層
你的初始化里面,0x38應當多寫幾次,只寫一次初始化往往不成功。1602運行很慢,單片機則很快,如果隨照單片機速度,1602根本來不及反應。操作前,先問問1602忙不忙?答復不忙,再發(fā)送,這就是查忙的作用,也可以用延時取代查忙。
     E是使能端,單片機與1602控制器之間的數據交換,都是在E端電平“變化”之中完成的。必須是先高后低、或者先低后高這個轉換。至于究竟用哪一個,可以參考1602手冊上的介紹。
回復

使用道具 舉報

ID:143967 發(fā)表于 2016-12-12 23:03 | 顯示全部樓層
囖囖來 發(fā)表于 2016-10-27 10:10
你的初始化里面,0x38應當多寫幾次,只寫一次初始化往往不成功。1602運行很慢,單片機則很快,如果隨照單片 ...

謝謝呢
回復

使用道具 舉報

ID:154568 發(fā)表于 2016-12-15 12:50 | 顯示全部樓層
單片機與1602控制器之間的數據交換,都是在E端電平“變化”之中完成的。必須是先高后低、或者先低后高這個轉換。至于究竟用哪一個,可以參考1602手冊上的介紹。
回復

使用道具 舉報

ID:154924 發(fā)表于 2016-12-15 12:56 | 顯示全部樓層
好難哦
回復

使用道具 舉報

ID:154977 發(fā)表于 2016-12-15 13:31 | 顯示全部樓層
先仿真看看
回復

使用道具 舉報

ID:153199 發(fā)表于 2016-12-16 16:50 | 顯示全部樓層
使能端電平控制不好
回復

使用道具 舉報

ID:143967 發(fā)表于 2016-12-19 17:45 | 顯示全部樓層

那該怎么優(yōu)化呢?
回復

使用道具 舉報

ID:153199 發(fā)表于 2016-12-21 13:33 | 顯示全部樓層
你的初始化里面,0x38應當多寫幾次,只寫一次初始化往往不成功。1602運行MAN
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表