4405|7

396

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

学习分享帖:launchpad 2个IO口串行驱动12864液晶程序 我学生调试成功 你值得拥有 [复制链接]

/*
时间:2012-6-30
作者:蔡能
注释:
    这个程序能够实现LCD12864的有ASCII码的数据输入,而汉字还没有解决!!
修改:2012-7-1   1:43
    已经解决汉字的输入,没有什么特别的,就是注意输入法的切换~~~中文的;和英文的
    ;是不同的。
修改:2012-7-18
    将3线的LCD12864改进成了2线的LCD12864.
*/
#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++;
  }
}



2线LCD12864.zip (1.73 KB, 下载次数: 106)

2线LCD12864.zip (1.73 KB, 下载次数: 106)


[ 本帖最后由 whuer 于 2012-7-21 23:07 编辑 ]

最新回复

P2DIR=0x03;//就是少了这条指令,导致研究好久!!! 这句话什么意思啊  详情 回复 发表于 2012-8-20 14:27
 
点赞 关注

回复
举报

396

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
两点说明:第一是要到淘宝购买3.3V供电的12864带字库的液晶
          第二是要改造,买回来的液晶默认是并行显示,要通过改装才能变换成串行显示

可以让卖家帮忙改造好以后  再寄给你
 
 

回复

396

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
买回来的液晶的第15脚默认是接VCC,如果不改造,把第15脚接GND,会导致VCC和GND短接,导致电脑黑屏,甚至可能导致电脑损坏,切记。
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

4
 
感谢楼主分享,等待实验板测试。
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

5
 
多谢楼主,很好用
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

6
 
顶起!!!向学长学习!!!
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

7
 

P2DIR=0x03;//

P2DIR=0x03;//就是少了这条指令,导致研究好久!!!
这就话什么意思啊
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

8
 

P2DIR=0x03;//

P2DIR=0x03;//就是少了这条指令,导致研究好久!!!
这句话什么意思啊
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表