最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

求助:我的1602LCD顯示怎么是16個(gè)黑的方塊

作者:yifenqian 欄目:單片機(jī)
求助:我的1602LCD顯示怎么是16個(gè)黑的方塊
程序是下載別人的:用的是總線方式:
那位大俠還有1602的總線方式程序沒?給我發(fā)一份好么?
yifenqian@tom.com
zhou__heng@16.com
/*===========================================================================

            KS0070(44780) 16x2 字符液晶屏驅(qū)動(dòng)演示程序總線方式         曉奇
=============================================================================
連接線圖:    LCM-------51     LCM-------51     LCM--------51
            DB0-----P0.0     DB4-----P0.4     RW-------P2.0
            DB1-----P0.1     DB5-----P0.5     RS-------P2.1
            DB2-----P0.2     DB6-----P0.6     E--------P2.7 =>74LS00+wr+rd
            DB3-----P0.3     DB7-----P0.7     VLCD接1K2電阻到GND

[注]:AT89C51的晶振頻率為12MHZ
============================================================================*/
//#pragma src                                // 產(chǎn)生匯編文件
#include <reg51.h>
#include<intrins.h>

//========= 變量類型標(biāo)識(shí)的宏定義,大家都喜歡這么做 ==============
#define    UCHAR unsigned CHAR
#define Uint unsigned int

// ================= LCM1602A端口地址定義 =======================
CHAR xdata Lcd1602CmdPort  _at_ 0x7cff;        //E=1 RS=0 RW=0
CHAR xdata Lcd1602WdataPort  _at_ 0x7eff;    //E =1 RS=1 RW=0
CHAR xdata Lcd1602StatusPort  _at_ 0x7dff;    //CS=1 RS=0 RW=1

#define Busy    0x80                         // 忙判別位


code CHAR exampl[]="For an example.     - By xiaoqi\n";

void Delay400Ms(void);
void Delay5Ms(void);
void LcdWriteData( CHAR dataW );
void LcdWriteCommand( UCHAR CMD,UCHAR AttribC );
void LcdReset( void );
void DISPLAY( UCHAR dd );
void DispOneChar(UCHAR x,UCHAR y,UCHAR Wdata);
void ePutstr(UCHAR x,UCHAR y, UCHAR code *ptr);

//================ 隨便寫幾句測(cè)試主程序 ================
void main(void)
{
    UCHAR TEMP;
    
    Delay400Ms();                /*啟動(dòng)時(shí)必須的延時(shí),等待lcm進(jìn)入工作狀態(tài)*/

    LcdReset();                    /* 這也是必需的....初始化*/
    TEMP = 32;
    ePutstr(0,0,exampl);        /*上面一行顯示一個(gè)預(yù)定字符串*/

    Delay400Ms();                /* 保留顯示內(nèi)容*/
    Delay400Ms();
    Delay400Ms();
    Delay400Ms();
    Delay400Ms();
    Delay400Ms();
    Delay400Ms();
    Delay400Ms();

    while(1)
    {
        TEMP &= 0x7f;            /* 只顯示ASCII字符*/
        if (TEMP<32)TEMP=32;    /*屏蔽控制字符,不予顯示*/
        DISPLAY( TEMP++ );    
        Delay400Ms();
    }
}

/*=======================================================
顯示字符串
=======================================================*/
void ePutstr(UCHAR x,UCHAR y, UCHAR code *ptr) {
UCHAR i,l=0;
    while (ptr[l] >31){l++;};
    for (i=0;i<l;i++) {
        DispOneChar(x++,y,ptr[i]);
        if ( x == 16 ){
            x = 0; y ^= 1;
        }
    }
}

/*=======================================================
演示一行連續(xù)字符串,配合上位程序演示移動(dòng)字串
=======================================================*/
void DISPLAY( UCHAR dd ) {

UCHAR i;
    
    for (i=0;i<16;i++) {

        DispOneChar(i,1,dd++);
        
        dd &= 0x7f;
        if (dd<32) dd=32;
    }
}

/*=======================================================
顯示光標(biāo)定位
=======================================================*/
void LocateXY( CHAR posx,CHAR posy) {

UCHAR TEMP;

    TEMP = posx & 0xf;
    posy &= 0x1;
    if ( posy )TEMP |= 0x40;
    TEMP |= 0x80;
    LcdWriteCommand(TEMP,0);
}

/*=======================================================
按指定位置顯示數(shù)出一個(gè)字符
=======================================================*/
void DispOneChar(UCHAR x,UCHAR y,UCHAR Wdata) {

    LocateXY( x, y );                // 定位顯示地址
    LcdWriteData( Wdata );            // 寫字符
}

/*=======================================================
初始化程序, 必須按照產(chǎn)品資料介紹的初始化過程進(jìn)行
=======================================================*/
void LcdReset( void ) {

       LcdWriteCommand( 0x38, 0);            /* 顯示模式設(shè)置(不檢測(cè)忙信號(hào))*/
        Delay5Ms();
    LcdWriteCommand( 0x38, 0);            /* 共三次*/
        Delay5Ms();
    LcdWriteCommand( 0x38, 0);
        Delay5Ms();

    LcdWriteCommand( 0x38, 1);            /*顯示模式設(shè)置(以后均檢測(cè)忙信號(hào))*/
    LcdWriteCommand( 0x08, 1);            /*顯示關(guān)閉*/
       LcdWriteCommand( 0x01, 1);           &nbs
2樓: >>參與討論
etiller
樓主有沒有1602的資料給一份
尤其是關(guān)于字符對(duì)應(yīng)的字段的說明那部分?

3樓: >>參與討論
yxhyxh
仔細(xì)看看你的初始化程序是否正確。
 
4樓: >>參與討論
yifenqian
你的郵箱那?
 
5樓: >>參與討論
bcaiyo
我剛在用一個(gè)三星的S6A0069
我剛在用一個(gè)三星的S6A0069的,不過我只用了4位數(shù)據(jù)線。端口少啊。你最好看一下初始化的程序,有的指令處理時(shí)間長(zhǎng)一點(diǎn),看一下忙標(biāo)志位呀,我感覺還是比較好用的

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
c51高手,請(qǐng)來(lái)看看!!
為什么程序跳出中斷后總自動(dòng)復(fù)位???
請(qǐng)教,關(guān)于T0計(jì)數(shù)器的問題?
求Lab Tool 48 驅(qū)動(dòng)!
c51編譯后調(diào)用指令變?yōu)樘D(zhuǎn)指令了.
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào)