搜索
bottom↓
回复: 4

发一个12864串行的程序

[复制链接]

出0入0汤圆

发表于 2012-7-28 14:35:14 | 显示全部楼层 |阅读模式
3根控制线就可以用12864了,适合msp430G2553,发一个头文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-7-28 14:37:45 | 显示全部楼层
下来看看

出0入0汤圆

 楼主| 发表于 2012-7-28 14:38:45 | 显示全部楼层
#ifndef _LCD12864_H_
#define _LCD12864_H_

#define uchar unsigned char
#define uint  unsigned int

#define MCLK_C      (1)//定义主时钟频率,供延时使用
#define Delay_us(n) __delay_cycles(n*MCLK_C)
#define Delay_ms(n) __delay_cycles(n*(1000L)*MCLK_C)

#define LCDCSSET   P1OUT |= BIT2            //(RS)液晶的4脚
#define LCDSIDSET  P1OUT |= BIT3            //(WR)液晶的5脚
#define LCDCLKSET  P1OUT |= BIT4            //(EN)液晶的6脚
#define LCDCSCLR   P1OUT &=~BIT2            //
#define LCDSIDCLR  P1OUT &=~BIT3            //
#define LCDCLKCLR  P1OUT &=~BIT4            //
#define LCDSIDIN   P1DIR &=~BIT3            //SID脚作为输入
#define LCDSIDOUT  P1DIR |= BIT3            //SID脚作为输出
#define LCDSID     BIT3

void LcdWriteType(void)//写方式
{
  uchar i;
  LCDCSSET;
  for(i=0;i<5;i++)
  {   
    LCDCLKCLR;
    LCDSIDSET;
    LCDCLKSET;//时钟上升沿
  }//先发送5个1  
  LCDCLKCLR;
  LCDSIDCLR;//再发送一个0表示写操作
  LCDCLKSET;//时钟上升沿
}
void LcdReadType(void)//读方式
{
  uchar i;
  LCDCSSET;
  for(i=0;i<5;i++)
  {   
    LCDCLKCLR;
    LCDSIDSET;
    LCDCLKSET;//时钟上升沿
  }//先发送5个1  
  LCDCLKCLR;
  LCDSIDSET;//再发送一个1表示读操作
  LCDCLKSET;//时钟上升沿
}
void LcdSendDat(uchar Dat)//发送一个字节的数据
{
  uchar i;
  for(i=0;i<4;i++)
  {
    LCDCLKCLR;
    if(Dat & 0x80) LCDSIDSET;
    else           LCDSIDCLR;
    LCDCLKSET;
    Dat<<=1;
  }//发送高4位
  for(i=0;i<4;i++)
  {
    LCDCLKCLR;
    LCDSIDCLR;
    LCDCLKSET;
  }//发送4个0
  for(i=0;i<4;i++)
  {
    LCDCLKCLR;
    if(Dat & 0x80) LCDSIDSET;
    else           LCDSIDCLR;
    LCDCLKSET;
    Dat<<=1;
  }//发送低4位
  for(i=0;i<4;i++)
  {
    LCDCLKCLR;
    LCDSIDCLR;
    LCDCLKSET;
  }//发送4个0
  LCDCSCLR;
}
uchar LcdBusy(void)//液晶忙判断
{                          
  uchar result=1;
  LcdReadType();
  LCDCLKCLR;
  LCDSIDCLR;//再发送一个0表示写命令操作
  LCDCLKSET;//时钟上升沿
  LCDCLKCLR;
  LCDSIDCLR;//再发送一个0表示写第一个字节结束
  LCDCLKSET;//时钟上升沿
  LCDSIDIN;
  LCDCLKCLR;
  result = P1IN & LCDSID;//得到输入的值
  LCDCLKSET;//时钟上升沿
  LCDCSCLR;
  LCDSIDOUT;
  return (result);
}

void LcdWcmd(uchar cmd)//写指令
{                          
  while((LcdBusy()>0));
  LcdWriteType();
  LCDCLKCLR;
  LCDSIDCLR;
  LCDCLKSET;//发送一个0表示写指令
  LCDCLKCLR;
  LCDSIDCLR;
  LCDCLKSET;//发送一个0表示第一个字节结束
  LcdSendDat(cmd);
}
void LcdWdat(uchar dat)//写数据
{                          
  while((LcdBusy()>0));
  LcdWriteType();
  LCDCLKCLR;
  LCDSIDSET;
  LCDCLKSET;//发送一个1表示写数据
  LCDCLKCLR;
  LCDSIDCLR;
  LCDCLKSET;//发送一个0表示第一个字节结束
  LcdSendDat(dat);
}
void LcdInit(void)//初始化
{
    P1DIR |= (BIT2 + BIT3 + BIT4);
    Delay_ms(2);   
    LcdWcmd(0x02);      //
    Delay_ms(2);
    LcdWcmd(0x0d);      //
    Delay_ms(2);
    LcdWcmd(0x30);      //
    Delay_ms(2);
    LcdWcmd(0x0c);      //关闭光标
    Delay_ms(2);
    LcdWcmd(0x01);      //
    Delay_ms(2);
}
void LcdPos(uchar X,uchar Y)//写每一行的地址
{                          
   uchar  pos;
   if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}
   pos = X+Y ;  
   LcdWcmd(pos);     //显示地址
}
void LcdDisplay(uchar Line,uchar* str)//Line:第Line行,*str:要显示的字符
{
  uchar i=0;
  LcdPos(Line-1,0);//             //设置显示位置为第一行的第1个字符  
  while(str[i] != '\0')
  {                         //显示字符
     LcdWdat(str[i]);
     i++;
  }
}
void LcdDisplaySure(uchar Line,uchar Num,uchar *Dat)//Line:第Line行,num:个数,dat:要显示的字符
{
  uchar i=0;
  LcdPos(Line-1,Num-1);//             //设置显示位置为第一行的第1个字符                        //显示字符
  while(Dat[i] != '\0')
  {                         //显示字符
     LcdWdat(Dat[i]);
     i++;
  }
}

#endif

出0入0汤圆

发表于 2012-7-30 10:01:33 | 显示全部楼层
一个自己弄得,f149的!感觉还不错!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-8-1 16:28:24 | 显示全部楼层
zhouxy0901 发表于 2012-7-30 10:01
一个自己弄得,f149的!感觉还不错!

顶一个 。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 07:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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