找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3282|回复: 0
收起左侧

12232c液晶显示和8051单片机的接口c语言程序

[复制链接]
ID:76190 发表于 2015-4-5 18:03 | 显示全部楼层 |阅读模式
在atmega128中写通讯协议的头四位数字时好像不能分开一位一位的送,而是要把它当作一个16进制的整体移位写入!程序中的comm为写0表示写12232c的指令,dat为1表示写数据。cs,sclk,std分别为片选、时钟、及数据io口,可用sbit指令定义。
/************lcd初始化程序**************/
void init_lcd (void)                        
{
  wr_lcd (comm,0x30);                       /*30---基本指令集动作,8位控制接口*/   
  wr_lcd (comm,0x01);                       /*清屏,地址指针指向00H*/
  delay (80);
  wr_lcd (comm,0x06);                        /*光标的移动方向,光标右移*/
  wr_lcd (comm,0x0c);                        /*开显示,关光标*/
}
/******************LCD显示任意量程序********************/
void eng_disp (uchar x,uchar y,uchar code *eng)
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);                       /*第一行的起始地址*/
  for(j=0;j<y;j++)
  {
  for (i=0;i<x;i++)
  wr_lcd (dat,eng[j*16+i]);                 
  if((y==2)&&(j==1))
  {wr_lcd (comm,0x90);
  for (i=0;i<8;i++)
  wr_lcd (dat,eng[j*16+i]);
  }
  }
}
/*********************LCD显示中文(欢迎界面)程序******************/
void chn_disp (uchar code *chn)             /*lcd显示中文*/
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);                       /*第一行的起始地址*/
  j=0;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
  wr_lcd (comm,0x90);                      //第二行的起始地址
  j=1;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
}
/***************************LCD清内存程序*******************/
void clrram (void)                         //lcd清内存
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
  delay (120);
}
/*************LCD写数据或写命令子程序****************/
void wr_lcd (uchar dat_comm,uchar content)                 /*lcd写数据*/
{
  uchar a,i,j;
  delay (40);
  a=content;                                             //a为指令代码或者数据
  cs=1;                                                  //置位cs开始传输数据
  sclk=0;                                                //拉低sclk准备给上升沿,发送数据
  std=1;                                                 //置1
  for(i=0;i<5;i++)                                        /*先传输起始字节,首先5个1,sclk的上升沿传输启动*/
  {
    sclk=1;
    sclk=0;
  }
  std=0;                                                  //RW=0;
  sclk=1;
  sclk=0;
  if(dat_comm)
    std=1;                                               //如果是数据则RS为1
  else
  std=0;                                              //如果是控制字则RS为0
  sclk=1;                                              //给上升沿,启动传输
  sclk=0;                                              //拉低sclk
  std=0;                                               //第8位为0,起始字节传输完毕
  sclk=1;                                              //给上升沿,启动传输
  sclk=0;
  for(j=0;j<2;j++)         //一个字节分两次发送,第一次发送高四位,后面补4个0,第二次发送低4位,后面同样补4个0
  {
    for(i=0;i<4;i++)                                  //先传输高4位
    {
      a=a<<1;                                        //数据循环左移一位,低位补0
      std=CY;                                        //把进位进行传输                     
      sclk=1;
      sclk=0;
    }
    std=0;
    for(i=0;i<4;i++)                                 //后4位数据为4个0
    {
      sclk=1;
      sclk=0;
    }
  }
}
/**********************LCD延时程序************************************/
void delay (uint us)                                 //lcd延时时间
{
  while(us--);
}
void delay1 (uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<15;j++)
  delay(1);
}
/*********************显示数据位子程序*******************/
void math_disp(uint math)
{      uint k;
       uchar i;
       uchar j;
       k=math;
    dispbuf[0]=k/10000;                       //得到万位数
    k=k%10000;
    dispbuf[1]=k/1000;                       //得到千位数
    k=k%1000;
    dispbuf[2]=k/100;                        //得到百位数
    k=k%100;
    dispbuf[3]=k/10;                         //得到十位数
    dispbuf[4]=k%10;                         //得到个位数
       wr_lcd (comm,0x90);                      //给第二行的起始地址以让数据在第二行显示,
       for(i=0;i<5;i++)
  {
   for(j=0;j<2;j++)                 //连续显示两个tab2中的字节,LCD自动把这两个字节联系起来显示一个数据
   {
     wr_lcd(dat,tab2[xs2*dispbuf[i]+j]);  //调用显示子函数
     }
    }
}


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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