2712|0

16

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

g2553 2线控制液晶128*64 怎么接线呢,包括每个引脚,谢谢 [复制链接]

#include "msp430g2553.h"
#define uchar unsigned char
/*=============================
#define SID P2.1;
#define CLCLK P2.0;
接线:LCD12864的5脚接P2.1
      LCD12864的6脚接P2.0
      LCD12864的4引脚直接接VCC
==============================*/
#define SID_1 P2OUT|=0x02;
#define SID_0 P2OUT&=~0x02;
#define CLK_1 P2OUT|=0x01;
#define CLK_0 P2OUT&=~0x01;
#define nop _NOP();
char tab[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
//#define nop   __no_operation();//可以用这个代替的
void W_str(uchar x,uchar y,uchar *s);
void write_com(uchar x);
void write_data(uchar x);
void write_string(uchar x,uchar y,uchar *s);
void delay(uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
                for(y=20;y>0;y--);
}

void W_8bits(uchar W_bits)
{
  uchar i,temp;
  for(i=0;i<8;i++)
  {
    temp=W_bits;
    temp<<=i;
    if((temp&0x80)==0)
    {
      SID_0;
      nop;
      CLK_1;
      nop;
      nop;
      CLK_0;
      nop;
      SID_0;
    }
    else
    {
      SID_1;
      nop;
      CLK_1;
      nop;
      nop;
      CLK_0;
      nop;
      SID_0;
    }
  }
}
/*
  rw=1  则表示读出
  rw=0  则表示输入
  rs=1  则表示写数据
  rs=0  则表示写命令
  W_byte(0,0,x)写命令x;
  W_byte(0,1,y)写数据y;
*/
void W_byte(uchar rw,uchar rs,uchar W_data)
{
  uchar H_data,L_data,s_id=0xf8;
  if(rw==0)
  {
    s_id&=~0x04;
  }
  else
  {
    s_id|=0x04;
  }
  if(rs==0)
  {
    s_id&=~0x02;
  }
  else
    {
      s_id|=0x02;
    }
  H_data=W_data;
  H_data&=0xf0;
  L_data=W_data;
  L_data&=0x0f;
  L_data<<=4;

  W_8bits(s_id);
  W_8bits(H_data);
  W_8bits(L_data);

}
void lcdinit()
{

  delay(10);
  W_byte(0,0,0x38);
  delay(5);
  W_byte(0,0,0x38);
  delay(5);
  W_byte(0,0,0x0c);
  delay(5);
  W_byte(0,0,0x01);
  delay(5);
  W_byte(0,0,0x02);
  delay(5);
  W_byte(0,0,0x80);
  delay(5);   
}


void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
//  unsigned int j;
//  char i;
//  SP=0x60;//51中必须要的,为什么?
  P2DIR=0x03;//就是少了这条指令,导致研究好久!!!
//  CS_0;
//  P2OUT|=~BIT2;
  CLK_0;
  SID_0;
  lcdinit();

//  W_byte(0,1,0x30);说明,这个是说,LCD显示只认识ASCII码


  W_str(0,0,"MSP430G2553");
//  W_byte(0,0,0x88);//可以用这种方式写指令
//  W_str(1,2,"22:52");
  write_string(3,4,"Launch Pad");
  W_str(0,2,"长江大学");
  W_str(2,3,"创新基地");
  write_com(0x98);
  write_data(tab[2]);
  while(1);
/* while(1)
{
  for(i=0;i<16;i++);
     {
      W_byte(0,0,0x98);
      for(j=0;j<60000;j++);
      W_byte(0,1,tab);
      for(j=0;j<60000;j++);
     }
}*/
}

/*很神奇的一个函数,可以输入字符串,不管是汉字还是字母表*/
/*
  x代表偏移量
  y代表第几行
  *S是字符串的指针
*/
void W_str(uchar x,uchar y,uchar *s)
{
  switch(y)
  {
  case 1:W_byte(0,0,0x80+x);break;//0x80是第一行起始位置
  case 2:W_byte(0,0,0x90+x);break;//0x90是第二行起始位置
  case 3:W_byte(0,0,0x88+x);break;//0x88是第三行起始位置
  case 4:W_byte(0,0,0x98+x);break;//0x98是第四行起始位置
  default:W_byte(0,0,0x80+x);//否则都当成第一行处理
  }
  while(*s)
  {
    W_byte(0,1,*s);
    s++;
  }
}
void write_com(uchar x)
{
  W_byte(0,0,x);
}
void write_data(uchar x)
{
  W_byte(0,1,x);
}
void write_string(uchar x,uchar y,uchar *s)
{
  switch(y)
  {
  case 1:W_byte(0,0,0x80+x);break;//0x80是第一行起始位置
  case 2:W_byte(0,0,0x90+x);break;//0x90是第二行起始位置
  case 3:W_byte(0,0,0x88+x);break;//0x88是第三行起始位置
  case 4:W_byte(0,0,0x98+x);break;//0x98是第四行起始位置
  default:W_byte(0,0,0x80+x);//否则都当成第一行处理
  }
  while(*s)
  {
    W_byte(0,1,*s);
    s++;
  }
}
 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表