9141|19

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MSP430G2553串口连接12864显示,只用连接三个引脚,大大节省资源 [复制链接]

#include <msp430g2553.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
unsigned char a[]={"波天神终于把12864学会了!"};
#define SID  BIT1
#define SCLK BIT2
#define CS   BIT3
#define LCDPORT P1OUT
#define SID_1  LCDPORT |= SID
#define SID_0  LCDPORT &= ~SID
#define SCLK_1 LCDPORT |= SCLK
#define SCLK_0 LCDPORT &= ~SCLK
#define CS_1   LCDPORT |= CS
#define CS_0   LCDPORT &= ~CS
void delay(unsigned char ms)
{
    unsigned char i,j;
    for(i=ms;i>0;i--)
    for(j=120;j>0;j--);
   
}
/***********************************************************
*名    称:LCD_Write_cmd()
*功    能:写一个命令到LCD12864
*入口参数:cmd:待写入的命令,无符号字节形式
*出口参数:无
*说    明:写入命令时,RW=0,RS=0 扩展成24位串行发送
*格    式:11111 RW0 RS 0   xxxx0000    xxxx0000
*          |最高的字节  |命令的bit7~4|命令的bit3~0|
***********************************************************/
void write_cmd(uchar cmd)
{
  uchar i,high4bits,low4bits;
  ulong lcdcmd;
  high4bits = cmd & 0xf0;
  low4bits =  cmd & 0x0f;
  lcdcmd=((ulong)0xf8<<16)+((ulong)high4bits<<8)+((ulong)low4bits<<4);
  CS_1;
  SCLK_0;
  for(i=0;i<24;i++)
  {
    SID_0;
    if(lcdcmd & 0x00800000) SID_1;
    lcdcmd <<=1;
    delay(3);
    SCLK_1;
    delay(3);
    SCLK_0;
  }
  CS_0;
}
}
/***********************************************************
*名    称:LCD_Write_Byte()
*功    能:向LCD12864写入一个字节数据
*入口参数:byte:待写入的字符,无符号形式
*出口参数:无
*范    例:LCD_Write_Byte('F') //写入字符'F'
***********************************************************/
void write_dat(uchar dat)
{
  uchar i,high4bits,low4bits;
  ulong lcddat;
  high4bits = dat & 0xf0;
  low4bits =  dat & 0x0f;
  lcddat=((ulong)0xfa<<16)+((ulong)high4bits<<8)+((ulong)low4bits<<4);
  CS_1;
  SCLK_0;
  for(i=0;i<24;i++)
  {
    SID_0;
    if(lcddat & 0x00800000) SID_1;
    lcddat <<=1;
    delay(3);
    SCLK_1;
    delay(3);
    SCLK_0;
  }
  CS_0;
}
/***********************************************************
*名    称:LCD_pos()
*功    能:设置液晶的显示位置
*入口参数:x:第几行,1~4对应第1行~第4行
*          y:第几列,0~15对应第1列~第16列
*出口参数:无
*范    例:LCD_pos(2,3) //第二行,第四列
***********************************************************/
void lcd_pos(uchar x,uchar y)
{
  uchar pos;
  switch(x)
  {
    case 1:pos=0x80;break;
    case 2:pos=0x90;break;
    case 3:pos=0x88;break;
    case 4:pos=0x98;break;
    default:pos=0x80;
  }
  pos += y;
  write_cmd(pos);
}
/****************************************************/
//LCD12864初始化
void LCD_init(void)
{
    write_cmd(0x30);
    delay(5);
    write_cmd(0x0C);
    delay(5);
    write_cmd(0x01);
    delay(5);
     write_cmd(0x02);
    delay(5);
    
}

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  P1SEL=0x00;
  P1DIR = BIT1 + BIT2 + BIT3;
  LCD_init();
  delay(40);
  lcd_pos(1,0);
  write_dat(a[0]);
  write_dat(a[1]);
  write_dat(a[2]);
  write_dat(a[3]);
  write_dat(a[4]);
  write_dat(a[5]);
  write_dat(a[6]);
  write_dat(a[7]);
  write_dat(a[8]);
  write_dat(a[9]);
  write_dat(a[10]);
  write_dat(a[11]);
  lcd_pos(2,0);
  write_dat(a[12]);
  write_dat(a[13]);
  write_dat(a[14]);
  write_dat(a[15]);
  write_dat(a[16]);
  write_dat(' ');
  
  write_dat(a[17]);
  write_dat(a[18]);
  write_dat(a[19]);
  write_dat(a[20]);
  write_dat(a[21]);
  write_dat(a[22]);
  write_dat(a[23]);
  write_dat(a[24]);
  
  while(1)
  {;}
 
  //return 0;
}

最新回复

请问接了P1.1 P1.2 P1.3  然后接了电源正负跟背光正负咋么不行的  程序也是一样的  详情 回复 发表于 2014-7-28 21:13

点评

片选可以不占用IO口的,两根线足矣~:)  详情 回复 发表于 2012-7-16 15:04
貌似有很多次显示不正确,有时候”波“字没有,有时候”学会“之后是乱码  详情 回复 发表于 2012-7-15 15:24

赞赏

1

查看全部赞赏

 
点赞 关注(1)

回复
举报

29

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
我刚写了一个并行的
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
这个怎么接呀
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 楼主 tianbo1260 的帖子

貌似有很多次显示不正确,有时候”波“字没有,有时候”学会“之后是乱码

点评

要是“天”字显示不出来,那就爽歪歪了  详情 回复 发表于 2012-7-16 13:59
这个1是要看主时钟的频率,我的是在系统默认的1MHZ的时候写的,如果大于这个,你试着把delay()函j加大或减小一下,调试一下看write_dat(a[0]); write_dat(a[1]); write_dat(a[2]); write_dat(a[3]); wr  详情 回复 发表于 2012-7-16 12:33
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 李晓航Elijah 的帖子

这个1是要看主时钟的频率,我的是在系统默认的1MHZ的时候写的,如果大于这个,你试着把delay()函j加大或减小一下,调试一下看write_dat(a[0]);
  write_dat(a[1]);
  write_dat(a[2]);
  write_dat(a[3]);
  write_dat(a[4]);
  write_dat(a[5]);
  write_dat(a[6]);
  write_dat(a[7]);
  write_dat(a[8]);
  write_dat(a[9]);
  write_dat(a[10]);
  write_dat(a[11]);
  lcd_pos(2,0);
  write_dat(a[12]);
  write_dat(a[13]);
  write_dat(a[14]);
  write_dat(a[15]);
  write_dat(a[16]);
  write_dat(' ');
  
  write_dat(a[17]);
  write_dat(a[18]);
  write_dat(a[19]);
  write_dat(a[20]);
  write_dat(a[21]);
  write_dat(a[22]);
  write_dat(a[23]);
  write_dat(a[24]);这一段可以改一下嘛,人是活的,没必要照抄
unsigned char i;
  i = 0;
  while(a!='\0')
  {
    write_dat(a);
    i++;
  }
改成这样就行了
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(高级)

6
 

回复 4楼 李晓航Elijah 的帖子

要是“天”字显示不出来,那就爽歪歪了

点评

靠,哥哥的名字,不是被你用来想女人的。。。。。。  详情 回复 发表于 2012-7-16 20:01
 
 
 

回复

437

帖子

0

TA的资源

五彩晶圆(初级)

7
 

回复 楼主 tianbo1260 的帖子

片选可以不占用IO口的,两根线足矣~

点评

这我知道,CS直接接高电平,另外一根直接接时钟源就行了,但是本质上都是一样的,个人比较喜欢这种,一般不会出乱子。。。  详情 回复 发表于 2012-7-16 20:01
 
个人签名
 
 

回复

203

帖子

0

TA的资源

一粒金砂(中级)

8
 
其实有那种液晶,用串口通信就行了,只要一个RX就够了,
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 7楼 juring 的帖子

这我知道,CS直接接高电平,另外一根直接接时钟源就行了,但是本质上都是一样的,个人比较喜欢这种,一般不会出乱子。。。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 6楼 mesada 的帖子

靠,哥哥的名字,不是被你用来想女人的。。。。。。

点评

一想起来就觉得好笑 :Laugh:  详情 回复 发表于 2012-7-17 13:47
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

11
 
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(高级)

12
 

回复 10楼 tianbo1260 的帖子

一想起来就觉得好笑
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

13
 
线怎么接啊
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

14
 
为什么我接的什么都显示不出来~用的久是你的程序 改都没改啊~社么都没有
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

15
 
大哥,你这个程序接P1还是P2啊?怎么我接换了也是不行呢?求解...
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

16
 
什么显示都没有,还有VCC接几伏的有影响吗?
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

17
 
大哥,怎么设计这个电路呢,是直接接你给的几个端口就可以了呢,还是要用心的电路,谢谢qq1041603764
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 

怎么好多错误

编译有错误
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

19
 
我用了 上面的程序 端口也对的,怎么没达到效果啊
 
 
 

回复

21

帖子

1

TA的资源

一粒金砂(中级)

20
 
请问接了P1.1 P1.2 P1.3  然后接了电源正负跟背光正负咋么不行的  程序也是一样的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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