1
我無法讓我的msp430與16x4液晶顯示屏進行通信。對於液晶屏數據表:https://www.beta-estore.com/download/rk/RK-10290_410.pdf將MSP430g2553與16x4液晶顯示屏連接
這裏是我的代碼:
#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();
}
我敢肯定的我所有的引腳連接正確。液晶顯示器正在投射光線,但就是這樣。我什至不能讓光標顯示並在屏幕上閃爍。我有我的總線連接到8個LED燈,所以我可以確定正在發送正確的命令。這也是爲什麼我在每次寫入操作之間有很長的延遲。不知道要從這裏進行排除故障。任何幫助將不勝感激。
如果你不嘗試發送一個字符,而只是在最後一個sendCommand之後停止,會發生什麼? – HeadCode
什麼都沒有。液晶顯示屏已打開,但沒有閃爍的光標 – user3736114
我決定拖出舊的20x4顯示屏,然後放開。目前我無法得到任何東西顯示。 :-) 我會及時向大家發佈。 – HeadCode