关于msp430f149驱动1602的程序移植问题

楼主
关于msp430f149驱动1602的程序移植问题
[P][FACE=宋体][SIZE=12px],从郭天祥那本书上移植过来的,但是移植过来后就不能用了,看了很久也不知道问题所在,请大神们帮忙看看[/SIZE][/FACE][/P][FACE=宋体][SIZE=9pt]#include "msp430x14x.h"[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]typedef unsigned char uchar;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]typedef unsigned int uint;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]#define lcden_on P6OUT|=BIT5;        //E=1[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]#define lcden_off P6OUT&=~BIT5;      //E=0[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]#define lcdrw_off P6OUT&=~BIT4;      //RW=0[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]#define lcdrs_off P6OUT&=~BIT3;      //RS=0[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]#define lcdrs_on P6OUT|=BIT3;        //RS=1[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]uchar table[]="I LOVE MCU!";[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]uchar table1[]="[/SIZE][/FACE][URL=http://www.ffffff.com]www.ffffff.com[/URL][FACE=宋体][SIZE=9pt]";[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]void delay(void)                   //延时函数5ms [/SIZE][/FACE]
[FACE=宋体][SIZE=9pt] { [/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    uint k=40000;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    while (k != 0)[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    {[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]        k--;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    }[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]}[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]void write_com(uchar com)         //写指令操作[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]{[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    lcdrs_off;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    lcdrw_off;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]   _NOP();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    P2OUT = com;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]   _NOP();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    lcden_on;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    delay();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    lcden_off;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]}[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]void write_data(uchar data)       //写数据操作[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]{[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]     lcdrs_on;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    lcdrw_off;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    _NOP();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    P2OUT = data;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]   _NOP();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    lcden_on;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]   delay();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    lcden_off;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]}[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]void init( void )[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]{[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    delay();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    lcden_off;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    write_com(0x38);                //设置16X2显示,5X7点阵,8位数据接口[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    delay();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    write_com(0x0c);                //设置开显示,不显示光标[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    delay();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    write_com(0x06);                //写一个字符后地址指针加1[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    delay();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    write_com(0x01);                //显示清0,数据指针清0[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]    delay();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]}[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]int main( void )[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]{[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]  // Stop watchdog timer to prevent time out reset[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]  WDTCTL = WDTPW + WDTHOLD;         [/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]  P2DIR = 0xFF;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]  init();[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]  int i,j;[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]  write_com(0x80);[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]  for(i=0;i<11;i++)[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]  {[/SIZE][/FACE]
[FACE=宋体][SIZE=9pt]      write_data(table[/SIZE][/FACE][i][FACE=宋体][SIZE=9pt]);
      delay();
  }
  write_com(0x80+0x40);
  for(j=0;j<14;j++)
  {
      write_data(table1[j]);
      delay();
  }
  while(1);
}[/SIZE][/FACE][/i]
1楼
我给你一些建议:
[1] 注意MCU的主频,及操作的过程中的延时时间。及初始化每步间的时间。
[2] 注意数据口读与写之间方向操作。控制线一般全为写。数据可能需要用到读。注意方向的切换。[P][3] 移植注意IO线要修过来,不要搞错。[/P][P][4] 注意LCD的偏置,也许你程序对了。但偏置不对,也无法正常显示的。[/P]

电脑版 Page created in 0.1562 seconds width 3 queries.