MSP430F149驱动1602,不显示啊请大侠们帮忙~该如何解决
MSP430F149驱动1602,不显示啊,请大侠们帮忙~~
------解决方案--------------------
这句似乎不妥:
while((DATA&0x80)==0x80);
因为
#define DATA P5OUT
改为
#define DATA P5IN
其它时序上就不看了
- C/C++ code
#include<msp430x14x.h> //#include"lcd1602.h" typedef unsigned char uchar; typedef unsigned int uint; #define RS0 P4OUT&=~BIT0 #define RS1 P4OUT|=BIT0 #define RW0 P3OUT&=~BIT4 #define RW1 P3OUT|=BIT4 #define EN0 P3OUT&=~BIT5 #define EN1 P3OUT|=BIT5 #define DATA P5OUT unsigned char XPOS,YPOS; void delay(unsigned int t) { unsigned int i,j; for(i=0;i<t;i++) for(j=0;j<2;j++) ; } void lcdwaitidle(void) { DATA |= 0xff; RS0; RW1; EN1; DATA &= 0; P5DIR &= 0; while((DATA&0x80)==0x80); EN0; P5DIR |= 0xff; } void lcdwcn(unsigned char c) { RS0; RW0; DATA = c; EN1; delay(1); EN0; } void lcdwc(unsigned char c) { lcdwaitidle(); lcdwcn(c); } void lcdwd(unsigned char d) { lcdwaitidle(); RS1; RW0; DATA = d; EN1; delay(1); EN0; } void lcdpos(void) { XPOS &= 0x0f; YPOS &= 0x03; if(YPOS == 0x00) lcdwc(XPOS | 0x80); else if(YPOS == 0x01) lcdwc((XPOS + 0x40) | 0x80); } void lcdreset() { delay(15); lcdwcn(0x38); delay(5); lcdwcn(0x38); delay(5); lcdwcn(0x38); lcdwc(0x38); lcdwc(0x08); lcdwc(0x01); lcdwc(0x06); lcdwc(0x0c); } void lcdfill(unsigned char n) { for(YPOS=0;YPOS<2;YPOS++) for(XPOS=0;XPOS<16;XPOS++) { lcdpos(); lcdwd(n); } } void lcdwda(unsigned char x,unsigned char y,unsigned char *s) { YPOS=y; for(XPOS=x;XPOS<16;XPOS++) { lcdpos(); lcdwd(*s); s++; delay(40); } } void IniTa(void) { //启用定时器A的增计数模式 TACTL = TASSEL_1 + MC_1 + TACLR; CCTL0 = CCIE; CCR0 = 32768; TACTL |= MC0; //_EINT(); } int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P5DIR |= 0xff; P4DIR |= 0x01; P3DIR |= 0x30; P1DIR |= BIT0; P1OUT |= BIT0; P3OUT &= 0; P4OUT &= 0; P5OUT &= 0; IniTa(); _BIS_SR(LPM3_bits + GIE); } #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A(void) { unsigned char i; P1OUT ^= BIT0; lcdreset(); for(i=0x30;i<=0x3a;i++) { lcdfill(i); delay(350); } lcdfill(' '); delay(200); lcdwda(0,0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); lcdwda(0,1,"ZYXWVUTSRQPONMLKJIHGFEDCBA"); delay(200); }
------解决方案--------------------
这句似乎不妥:
while((DATA&0x80)==0x80);
因为
#define DATA P5OUT
改为
#define DATA P5IN
其它时序上就不看了