程序是移植的51上面的,51上面能正常跑,但是移植过来了就不能跑了,我把部分代码贴出来:
/**************控制端定义**************/
/*********选用P4口送DH,P3口送DL********/
/******P9.0控制CS端,P9.1控制RS端******/
/******P9.2控制WR端,P9.3控制RD端******/
/*************P9.4控制RES端************/
#define TFT_CS_1 P9OUT|=BIT0 //片选端
#define TFT_CS_0 P9OUT&=~BIT0
#define TFT_RS_1 P9OUT|=BIT2 //数据命令选择端
#define TFT_RS_0 P9OUT&=~BIT2
#define TFT_WR_1 P9OUT|=BIT1 //写
#define TFT_WR_0 P9OUT&=~BIT1
#define TFT_RD_1 P9OUT|=BIT3 //读
#define TFT_RD_0 P9OUT&=~BIT3
#define TFT_RES_1 P9OUT|=BIT4 //复位
#define TFT_RES_0 P9OUT&=~BIT4
/**************************************/
/*********单片机初始化函数*************/
void init_430()
{
WDTCTL= WDTPW + WDTHOLD; // 关看门狗
PMMCTL0_H=0xA5;//开PMM电源管理
SVSMLCTL|=SVSMLRRL_1+SVMLE;//配置SVML电压
PMMCTL0=PMMPW+PMMCOREV_2;//配置内核电压
while((PMMIFG&SVSMLDLYIFG )==0);//等待设置完成
PMMIFG&=~(SVMLVLRIFG + SVMLIFG+SVSMLDLYIFG);
if((PMMIFG&SVMLIFG)==1)//判断内核电压是否上升到VSVML
while((PMMIFG&SVMLVLRIFG)==0);//如果没有等待
SVSMLCTL&=~SVMLE;//关掉SVML模块
PMMCTL0_H =0X00;//锁存配置
P5SEL |=0x0C; // Port select XT2
UCSCTL6&=~XT2OFF; // Enable XT2 even if not used
UCSCTL3|=SELREF_2; // FLLref = REFO
UCSCTL4|=SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
do
{
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);
SFRIFG1&=~OFIFG;// Clear fault flags
}while(SFRIFG1&OFIFG);// Test oscillator fault flag
UCSCTL4|=SELS_5+SELM_5;// SMCLK=MCLK=XT2
//UCSCTL5|=DIVM_1+DIVS_2;
P4DIR=0xff;
P3DIR=0xff;
P9DIR=0xff;
}
/**************************************/
void LCD_WR_DATA(uint Data)
{
uchar DH,DL;
DH=Data>>8;
DL=Data;
TFT_CS_0;
//delayms(1);
TFT_RS_1;
//delayms(1);
P4OUT=DH;
P3OUT=DL;
TFT_WR_0;
//delayms(1);
TFT_WR_1;
//delayms(1);
TFT_CS_1;
//delayms(1);
}
/***************************************/
/***********LCD写寄存器*****************/
void LCD_WR_REG(uint Index)
{
uchar DH,DL;
DH=Index>>8;
DL=Index;
TFT_CS_0;
//delayms(1);
TFT_RS_0;
//delayms(1);
P4OUT=DH;
P3OUT=DL;
TFT_WR_0;
//delayms(1);
TFT_WR_1;
//delayms(1);
TFT_CS_1;
//delayms(1);
}
/**************************************/
/********在指定寄存器写数据************/
void LCD_WriteReg(uint Index,uint Data)
{
LCD_WR_REG(Index);
LCD_WR_DATA(Data);
}
/**************************************/
/**********初始化驱动芯片**************/
void ILI9481_Initial()
{
LCD_WR_REG(0x11);
delayms(20);
LCD_WR_REG(0xD0);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x42);
LCD_WR_DATA(0x18);
LCD_WR_REG(0xD1);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x10);
LCD_WR_REG(0xD2);
LCD_WR_DATA(0x01);
LCD_WR_DATA(0x02);
LCD_WR_REG(0xC0);
LCD_WR_DATA(0x10);
LCD_WR_DATA(0x3B);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x02);
LCD_WR_DATA(0x11);
LCD_WR_REG(0xC5);
LCD_WR_DATA(0x03);
LCD_WR_REG(0xC8);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x32);
LCD_WR_DATA(0x36);
LCD_WR_DATA(0x45);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x16);
LCD_WR_DATA(0x37);
LCD_WR_DATA(0x75);
LCD_WR_DATA(0x77);
LCD_WR_DATA(0x54);
LCD_WR_DATA(0x0C);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x36);
LCD_WR_DATA(0x0A);
LCD_WR_REG(0x3A);
LCD_WR_DATA(0x55);
LCD_WR_REG(0x2A);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x01);
LCD_WR_DATA(0x3F);
LCD_WR_REG(0x2B);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x01);
LCD_WR_DATA(0xE0);
delayms(120);
LCD_WR_REG(0x29);
LCD_WR_REG(0x2c);
}
/***************************************/
/*************初始化函数****************/
void init_TFT()
{
TFT_CS_1;
delayms(50);
TFT_RES_0;
delayms(150);
TFT_RES_1;
delayms(50);
ILI9481_Initial();
}
//以上是底层驱动函数
void main()
{
init_430();
init_TFT();
P8DIR=0xff;
while(1)
{
ClearScreen(BLACK);
P8OUT=0xff;
delayms(1000);
P8OUT=0x00;
delayms(1000);
}
}
因为P8.1口接了一个led,测试的时候那个led是闪烁的,但是液晶只有背光亮,但是液晶拿到51上面去跑就正常,求大神帮忙看看哪儿错了哦,液晶驱动芯片是ILI9481,CPU是MSP430F5438A....
本文来自论坛,点击查看完整帖子内容。