找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4627|回复: 1
打印 上一主题 下一主题
收起左侧

12232液晶屏串行51单片机驱动程序

[复制链接]
跳转到指定楼层
楼主
ID:73735 发表于 2015-2-18 23:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MS12232F.c文件:

#include <reg52.h>
#include <string.h>
#include "MS12232F.h"
void delay_MS12232F (unsigned int us)   //delay time
{
  while(us--);
}
/*----初始化-----*/
void init_lcd (void)
{
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  delay_MS12232F (100);
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
}
/*-----------写指令或者写数据-----------*/
void wr_lcd (unsigned char dat_comm,unsigned char content)
{
  unsigned char a,i,j;
  delay_MS12232F (50);
  a=content;
  cs=1;
  sclk=0;
  std=1;
  for(i=0;i<5;i++)
  {
    sclk=1;
    sclk=0;
  }
  std=0;
  sclk=1;
  sclk=0;
  if(dat_comm)
    std=1;   //data
  else
    std=0;   //command
  sclk=1;
  sclk=0;
  std=0;
  sclk=1;
  sclk=0;
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {
      a=a<<1;
      std=CY;
      sclk=1;
      sclk=0;
    }
    std=0;
    for(i=0;i<4;i++)
    {
      sclk=1;
      sclk=0;
    }
  }
}
/*---清DDRAM----*/
void clrram (void)
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
  delay_MS12232F (180);
}

/*---上下半屏顺序显示汉字或字符----*/
void chn_disp(unsigned char code *chn)
{
  unsigned char i,j;
  wr_lcd (comm,0x30);  /*30---基本指令动作*/
  wr_lcd (comm,0x80);  //把显示地址设为0X80,即为第一行的首位--第一页
  j=0;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
      
  wr_lcd (comm,0x90);        //把显示地址设为0X90,即为第二行的首位--第二页
  j=1;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
}

//----上半屏显示汉字或字符
void chn_dispup (unsigned char code *chn)
{
  unsigned char i,Length;
  Length=strlen(chn);
  wr_lcd (comm,0x30);  //30---基本指令动作
  wr_lcd (comm,0x80);  //把显示地址设为0X80,即为第一行的首位--第一页
  for (i=0;i<Length;i++)
  wr_lcd (dat,chn[i]);
}
void Show_Paska(unsigned char Number) //显示压力值
{
  unsigned char tem1,tem2;
  tem1=Number/10;
  tem2=Number%10;
  if(10<=Number)
  {
    wr_lcd (dat,0x30+tem1);
    wr_lcd (dat,0x30+tem2);
  }
  else
  {
    wr_lcd (dat,0x30+tem2);
  }
}

//----下半屏显示汉字或字符
void chn_dispdown (unsigned char code *chn)
{
  unsigned char i,Length;
  Length=strlen(chn);
  wr_lcd (comm,0x30);        //30---基本指令动作
  wr_lcd (comm,0x90);        //把显示地址设为0X90,即为第二行的首位--第二页
  for (i=0;i<Length;i++)
  wr_lcd (dat,chn[i]);
}

/*--------上半屏清屏---------*/
void Clear_up(void)
{
  unsigned char i;
  wr_lcd (comm,0x30);  /*30---基本指令动作*/
  wr_lcd (comm,0x80);  //把显示地址设为0X80,即为第一行的首位--第一页
  for (i=0;i<16;i++)
  wr_lcd (dat,0x20);
}
/*--------下半屏清屏---------*/
void Clear_down(void)
{
  unsigned char i;
  wr_lcd (comm,0x30);  /*30---基本指令动作*/
  wr_lcd (comm,0x90);        //把显示地址设为0X90,即为第二行的首位--第二页
  for (i=0;i<16;i++)
  wr_lcd (dat,0x20);
}

MS12232F.h文件:

#ifndef   _MS12232F_h_
#define   _MS12232F_h_

#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1
sbit cs   = P1^3;
sbit std  = P1^1;
sbit sclk = P1^0;

void delay_MS12232F (unsigned int us);   //delay time
void init_lcd (void);/*----初始化-----*/
void wr_lcd (unsigned char dat_comm,unsigned char content);/*---写指令或者写数据---*/
void clrram (void);/*---清DDRAM----*/
void chn_disp(unsigned char code *chn);/*---上下半屏顺序显示汉字或字符----*/
void chn_dispup (unsigned char code *chn);//----上半屏显示汉字或字符
void Show_Paska(unsigned char Number);//显示压力值
void chn_dispdown (unsigned char code *chn);//----下半屏显示汉字或字符

void Clear_up(void);/*--------上半屏清屏---------*/

void Clear_down(void);/*--------下半屏清屏---------*/
#endif


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:586957 发表于 2019-8-4 15:27 | 只看该作者
/*----初始化-----*/
void init_lcd (void)
{
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  delay_MS12232F (100);
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
}
请问,初始化函数中清DDRAM,发送指令不是应该为0x02,设定DDRAM的地址计数器(AC)为H,并且将游标移到开头原点的位置???
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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