2016-12-21 16 views
1

16x4 LCD画面との通信に問題があります。液晶画面用データシート:https://www.beta-estore.com/download/rk/RK-10290_410.pdfMSP430g2553と16x4 LCD画面とのインターフェイス

ここでは私のコードです:

#define READMODE P2OUT = (P2OUT | BIT1) //set R/W pin high 
#define WRITEMODE P2OUT=(P2OUT & ~BIT1) //set R/W pin low 
#define ENABLEON P2OUT=P2OUT | 0x04 //set enable pin high 
#define ENABLEOFF P2OUT=P2OUT & 0xFB //set enable pin low 
#define RSDATA P2OUT = (P2OUT | BIT0) //set register select bit high so that the databus is sent to display 
#define RSINSTRUCTION P2OUT = (P2OUT & ~BIT0) //set register select low so databus is sent to command register for initialization 
int main(void){ 
    WDTCTL = WDTPW + WDTHOLD; //stop watchdog timer 
    P1DIR = 0xFF; //The entire P1 register is output 
    P2DIR = 0xF7; //The entire P2 register is output except for p2.3 
    P1OUT = 0x00; 
    P2OUT = 0x01; 
    ENABLEOFF; 
    WRITEMODE; 
    RSINSTRUCTION; 
    sendCommand(0x30); //function set for 8 bit mode and display type 
    sendCommand(0x01); //clear screen 
    sendCommand(0x02); //Return Home 
    sendCommand(0x07); //Increment cursor and screen right 
    sendCommand(0x0B); //Screen display on and blinking cursor 
    sendChar('a'); 
} 

/**This function checks if the LCD is busy 
*/ 
void isBusy(void){ 
    P1DIR &= ~BIT7; //Set bit 7 of P1 register as input 
    READMODE; 
    RSINSTRUCTION; 
    while((P1IN & BIT7) == BIT7){ 
    dataRead(); 
    } 
    P1DIR |= BIT7; //Set bit 7 of P1 register back to output 
    WRITEMODE; 
} 

/**Allows databus to be sent to LCD 
*/ 
void dataWrite(void){ 
    ENABLEOFF; 
    __delay_cycles(1000000); 
    ENABLEON; 
    __delay_cycles(1000000); 
    ENABLEOFF; 
    __delay_cycles(1000000); 
} 

/**This function is only for checking if the LCD is busy. If it is busy 
* it will blink the enable light on and off 
*/ 
void dataRead(void){ 
    ENABLEOFF; 
    __delay_cycles(1000000); 
    ENABLEON; 
    __delay_cycles(1000000); 
    ENABLEOFF; 
    __delay_cycles(1000000); 
} 

/**This function sends a command to the LCD screen 
*/ 
void sendCommand(unsigned char command){ 
    isBusy(); 
    WRITEMODE; 
    RSINSTRUCTION; 
    P1OUT = command; 
    dataWrite(); 
} 

void sendChar(char letter){ 
    RSDATA; 
    WRITEMODE; 
    P1OUT = letter; 
    dataWrite(); 
} 

私はすべてのピンが正しく接続されているかなりポジティブです。 LCDは光を投射していますが、それだけです。カーソルが画面に現れて点滅することさえできません。私はバスが8つのLEDライトに接続されているので、正しいコマンドが送信されていることを確認できます。それで、私は各書き込み操作の間に長い遅延があるのも理由です。トラブルシューティングのためにここから何をすべきかわからない。どんな助けでも大歓迎です。

+0

文字を送信しようとせず、最後のsendCommandの後で停止するとどうなりますか? – HeadCode

+0

何もありません。 LCD画面はオンになっていますが、点滅するカーソルがありません – user3736114

+0

私は20x4の古いディスプレイをドラッグして外出することに決めました。現在、私はどちらかを表示することはできません。 :-)私はあなたを投稿し続けます。 – HeadCode

答えて

0

申し訳ありません。問題の解決策は回路にポテンショメータを追加してLCDのコントラストを変えることでした。私はまた、

sendCommand(0x0F); //Screen display on and blinking cursor 

にライン

sendCommand(0x0B); //Screen display on and blinking cursor 

を変更しなければならなかったの貢献ありがとうございました。

関連する問題