极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8482|回复: 1

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

[复制链接]
发表于 2015-7-27 12:07:57 | 显示全部楼层 |阅读模式
新手求助,lcd12864的程序在430Energia里怎么编写??

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

求各位大神支招!!
回复

使用道具 举报

 楼主| 发表于 2015-8-4 12:54:29 | 显示全部楼层

#include"msp430f149.h"



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



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


#define  LCD_EN_High   P1OUT|=BIT4;   // LCD_EN  高电平   高有效            P66
#define  LCD_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);

}
自己写的程序供大家参考学习。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 01:14 , Processed in 0.039019 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表