GaryRomeo 发表于 2015-7-27 12:07:57

新手求助,lcd12864的程序在430Energia里怎么编写??

新手求助,lcd12864的程序在430Energia里怎么编写??

在arduino开发环境里面用的LCD12864的库在Energia用不了。

求各位大神支招!!

GaryRomeo 发表于 2015-8-4 12:54:29


#include"msp430f149.h"



#defineLCD_RS_High   P1OUT|=BIT2;    // LCD_RS高电平   显示数据         P64
#defineLCD_RS_Low    P1OUT&=~BIT2;    // LCD_RS低电平   指令数据   



#defineLCD_RW_High   P1OUT|=BIT3;   // LCD_RW高电平   数据读到DB0_DB7   P65
#defineLCD_RW_Low    P1OUT&=~BIT3;    // LCD_RW低电平   DB0_DB7 数据写入IR DR


#defineLCD_EN_High   P1OUT|=BIT4;   // LCD_EN高电平   高有效            P66
#defineLCD_EN_Low    P1OUT&=~BIT4;    // LCD_EN低电平   使能信号

#define LCD_PSB_High   P1OUT|=BIT5;//并口   高电平
#define LCD_PSB_Low    P1OUT&=~BIT5;//串口   低电平    P67

const char show0[]={0XCE,0XE2,0XD5,0XF1,0XEA, 0XBB, 0 };


void delay_ms(unsigned int timer)
{
unsigned int i;
for(i=0;i<1000;i--)
    for(;timer>0;timer--)
      ;
}


unsigned char lcd_busy()
{                        
unsigned char result;

P2DIR=0x00;   
LCD_RS_Low;          //指令数据
LCD_RW_High;
LCD_EN_High;


result = P2IN&0x80;   // 读取数据口数据
LCD_EN_Low;

return(result);
}
/*写命令到液晶*/
void LCD_WCMD(unsigned char cmd)
{                        
while(lcd_busy());

P2DIR=0xff;          // OUT;
LCD_RS_Low;          //指令数据
LCD_RW_Low;
//   LCD_EN_Low;
LCD_EN_High;
P2OUT = cmd;


LCD_EN_Low;
}
/*写数据到液晶*/
void LCD_WDAT(unsigned char dat)
{                        
while(lcd_busy());

P2DIR=0xff;         // OUT;
LCD_RS_High;          //数据
LCD_RW_Low;
//   LCD_EN_Low;

LCD_EN_High;
P2OUT = dat;


LCD_EN_Low;
}

/*显示的字符串*/
void Display(unsigned char X,unsigned char Y,const char *string)
{

if (X==0)
{
    X=0x80;
}
else if (X==1)
{
    X=0x90;
}
else if (X==2)
{
    X=0x88;
}
else if (X==3)
{
    X=0x98;
}

LCD_WCMD(X+Y);

while(*string )
{                         //显示字符
    LCD_WDAT(*string++);
}

}
void Display_number(unsigned char X,unsigned char Y,unsigned char number)
{
if (X==0)
{
    X=0x80;
}
else if (X==1)
{
    X=0x90;
}
else if (X==2)
{
    X=0x88;
}
else if (X==3)
{
    X=0x98;
}

LCD_WCMD(X+Y);
LCD_WDAT(48+number);
}
/*时钟初始化*/
void Clock_init()
{
unsigned char t;
BCSCTL1 = RSEL0 + RSEL1 + RSEL2;         // XT2on, max RSEL
BCSCTL1&=~XT2OFF;                        //打开XT2振荡器
do
{
    IFG1 &= ~OFIFG;                     // 清除振荡器失效标志
    for (t = 255; t > 0; t--);            // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0);             // 判断XT2是否起振

BCSCTL2 |= SELS+SELM_2;                  // SMCLK = XT2
}
/*液晶初始化*/
void LCD_init()
{
LCD_WCMD(0x34);      //扩充指令操作
LCD_WCMD(0x30);      //基本指令操作
LCD_WCMD(0x0C);      //显示开,关光标
LCD_WCMD(0x01);      //清除LCD的显示内容

}
void setup()
{
// put your setup code here, to run once:



WDTCTL = WDTPW + WDTHOLD;   // Stop watchdog timer to prevent time out reset
Clock_init();               // 时钟初始化

P1DIR|=BIT5|BIT4|BIT3|BIT2;
//P3DIR=0x01;
LCD_PSB_High;                // 液晶显示并口方式



}

void loop()
{
LCD_init();
Display(0,0,show0);
Display(1,0,"");
Display(2,1,"   ");
Display(3,5,"cepark");      // 第四行要显示的内容
_BIS_SR(LPM0_bits);

}
自己写的程序供大家参考学习。
页: [1]
查看完整版本: 新手求助,lcd12864的程序在430Energia里怎么编写??