[原创] MSP430操作LCD12864基础代码

deweyled   2011-6-16 20:15 楼主

/******************************************************************************/
//文件名:lcd_int.h
////
//创建时间:2010年10月23日23:29:08
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
/******************************************************************************/

#ifndef __LCD_INT_H__
#define __LCD_INT_H__

#define LCD_DataPort_In  P4DIR=0x00 
#define LCD_DataPort_Out P4DIR=0xff  
#define Lcd_Data_In      P4IN
#define Lcd_Data_Out     P4OUT    

#define LCD_CMDOut    P3DIR|=0x07     //P3口的低三位设置为液晶控制
#define LCD_RS_H      P3OUT|=BIT2      //P3.0
#define LCD_RS_L      P3OUT&=~BIT2     //P3.0
#define LCD_RW_H      P3OUT|=BIT1      //P3.1
#define LCD_RW_L      P3OUT&=~BIT1     //P3.1
#define LCD_EN_H      P3OUT|=BIT0      //P3.2
#define LCD_EN_L      P3OUT&=~BIT0     //P3.2

/******************************************************************************/
//函数名:Write_Cmd2Lcd()
//
//说明:液晶写指令函数
//
//参数:cmd       液晶操作指令
//    
//返回:无
//
//创建时间:2010年10月23日23:37:32
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/

void Write_LcdCmd(U8 cmd)
{
  U8 LcdTemp = 0 ;                    //液晶状态

  LCD_RS_L ;                        
  LCD_RW_H ;
  LCD_DataPort_In ;                   //设置液晶数据接口为输入状态
  do                                  //检测液晶是否为忙
  {   
    LCD_EN_H ;
    _NOP(); 
    LCD_DataPort_In;
    LcdTemp = Lcd_Data_In ;
    LCD_EN_L ;  
  }
  while(LcdTemp & 0x80);
 
  LCD_DataPort_Out;                     //设置液晶数据接口为输出状态
  LCD_RW_L ;
  Lcd_Data_Out = cmd ;                //发送数据至液晶
  LCD_EN_H;
  _NOP();           
  LCD_EN_L;
}

/******************************************************************************/
//函数名:Write_LcdData()
//
//说明:写数据到液晶
//
//参数:Data         所写数据
//    
//返回:无
//
//创建时间:2010年10月23日23:50:01
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/

void Write_LcdData(U8 Data)
{
  U8 LcdTemp = 0 ;                    //液晶状态

  LCD_RS_L ;                        
  LCD_RW_H ;
  LCD_DataPort_In ;                   //设置液晶数据接口为输入状态
  do                                  //检测液晶是否为忙
  {   
    LCD_EN_H ;
    _NOP();     
    LcdTemp = Lcd_Data_In ;
    LCD_EN_L ;  
  }
  while(LcdTemp & 0x80);
 
  LCD_DataPort_Out;                   //设置液晶数据接口为输出状态
  LCD_RS_H ;
  LCD_RW_L ;    
  Lcd_Data_Out = Data ;               //发送数据至液晶
  LCD_EN_H;
  _NOP();           
  LCD_EN_L; 
}

/******************************************************************************/
//函数名:Lcd_Clear()
//
//说明:液晶清屏函数
//
//参数:无
//    
//返回:无
//
//创建时间:2010年10月24日0:04:32
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/

void Lcd_Clear(void)
{
  Write_LcdCmd(0x34); //扩充指令操作
  Delay_ms(10);
  Write_LcdCmd(0x30); //基本指令操作
  Delay_ms(10);
  Write_LcdCmd(0x01); //清屏
  Delay_ms(10);
}

/******************************************************************************/
//函数名:Lcd_Int()
//
//说明:液晶初始化函数
//
//参数:无
//    
//返回:无
//
//创建时间:2010年10月23日23:59:26
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/

void Lcd_Int(void)
{
  LCD_CMDOut;           //液晶控制端口设置为输出 
  Delay_ms(500);
  Write_LcdCmd(0x30); 
  Delay_ms(5);
  Write_LcdCmd(0x02); 
  Delay_ms(5);
  Write_LcdCmd(0x0c);  
  Delay_ms(5);
  Write_LcdCmd(0x01); 
  Delay_ms(5);
  Write_LcdCmd(0x06);
  Delay_ms(5);
  Write_LcdCmd(0x80);
  Delay_ms(5);
}

/******************************************************************************/
//函数名:Lcd_DisPos()
//
//说明:液晶显示字符位置设置函数
//
//参数:x       显示位置的横坐标
//      y       显示位置的纵坐标
//
//返回:无
//
//创建时间:2010年10月24日14:53:47
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/

void Lcd_DisPos(U8 x ,U8 y)
{
  U8 Position;
  if(x == 1)
  {
    x = 0x80;
  }
  else if(x == 2)
  {
    x = 0x90;
  }
  else if(x == 3)
  {
    x = 0x88;
  }
  else if(x == 4)
  {
    x = 0x98;
  }
  Position = x + y;
  Write_LcdCmd(Position);
}

/******************************************************************************/
//函数名:Lcd_DisWord()
//
//说明:液晶显示字符串函数
//
//参数:字符串指针头
//    
//返回:无
//
//创建时间:2010年10月24日14:58:38
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/

void Lcd_DisWord(U8 Word[])
{
  U8 num = 0;
  while(Word[num])
  {
    Write_LcdData(Word[num++]);
  }
}

/******************************************************************************/
//函数名:LcdDis_Picture()
//
//说明:液晶显示图片128*64
//
//参数:图像数据指针头
//    
//返回:无
//
//创建时间:2010年10月24日0:13:22
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/

void LcdDis_Picture(const U8 *bmp)
{
  U8 i, j;
  Write_LcdCmd(0x34);                 //写数据,关闭图形显示
  for (i = 0; i < 32; i++)            //32行(上半屏)
  {
    Write_LcdCmd(0x80 + i);          //先写入Y坐标值
    Write_LcdCmd(0x80);              //写入X坐标值
    for (j = 0; j < 16; j++)
      Write_LcdData(*bmp++);
  }
  for (i = 0; i < 32; i++)
  {
    Write_LcdCmd(0x80 + i);             //先写入Y坐标值
    Write_LcdCmd(0x88);                 //写入X坐标值
    for (j = 0; j < 16; j++)
      Write_LcdData(*bmp++);
  }
  Write_LcdCmd(0x36);                   //写完数据,开图形显示
  Write_LcdCmd(0x30);                  //回到基本指令集
}

#endif

 

回复评论 (9)

顶个楼主辛苦

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2011-6-16 21:14
laige来个贴图最好 楼主
点赞  2011-6-17 08:17

板子背面图

 

 

板子正面图

上电后效果

点赞  2011-6-17 09:45

板子是自己DIY的,做的一个GSM防盗监控系统,后来改用51实现的。


图中核心芯片是MSP430F149

点赞  2011-6-17 09:47
不错
点赞  2011-6-19 14:23
好,不错,学习了
点赞  2011-6-24 10:17
试过没,能显示效果吗
点赞  2011-8-18 21:37
支持楼主支持楼主,顶了啊
点赞  2011-8-24 15:05
  哈哈 你太帅了
www.zhope17.com
点赞  2011-8-24 15:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复