⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16032-1.c

📁 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动 12864LCD驱动
💻 C
字号:
#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char
uchar *p,*p1,*p2;/*建立数组指针*/
uchar data i;
uchar data wbyte; /*与汉字数组相对应*/
uchar data Column;/*定义列*/
uchar data Page;/*定义页*/
sbit E=P3^2;/*时钟脉冲信号*/
sbit R_W=P3^1;/*输入串列资料信号*/
sbit RS=P3^0;
sbit D_I=P3^0;/*晶片选择信号;1为晶片致能,0为晶片除能*/
sbit W_bite=P1^7;/*对应P1口的最高位*/
char code Hanzi[16]=  /*第一行汉字数组*/
{
 0X03,0X0F,/*两个图形字符*/
 0xc4,0xcf,/*南*/
 0xbe,0xa9,/*京*/
 0xb9,0xfa,/*国*/
 0xcf,0xd4,/*显*/
 0xb5,0xe7,/*电*/
 0xd7,0xd3,/*子*/
 0X0F,0X03 /*两个图形字符*/
};
char code Hanzi1[20]=  /*第二行汉字数组*/
{
 0x0e,0x02,/*两个图形字符*/
 0xb1,0xb1,/*北*/
 0xbe,0xa9,/*京*/
 0xc4,0xfe,/*宁*/
 0xba,0xcd,/*和*/
 0xb5,0xe7,/*电*/
 0xd7,0xd3,/*子*/
 0xbf,0xc6,/*科*/
 0xbc,0xbc,/*技*/
 0x02,0x0e /*两个图形字符*/
};
char code Tu[16][21]=  /*图形数组*/
{
 0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,
 0x00,0x70,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x08,0x00,0x00,0x5F,0x00,
 0x00,0x70,0x00,0x03,0xC0,0x00,0x3F,0x00,0x00,0xEC,0x00,0x1C,0x00,0x00,0xFF,0x00,
 0x00,0x7E,0x00,0x03,0xC0,0x00,0x7D,0x80,0x06,0xFE,0x00,0x1E,0x00,0x00,0xEE,0x00,
 0x00,0xFC,0x00,0x07,0xF0,0x00,0x01,0xC0,0x07,0xFE,0x00,0x0E,0x00,0x01,0xFC,0x00,
 0x03,0xF0,0x00,0x1F,0xF0,0x01,0xBC,0xC0,0x07,0xFC,0x00,0x0F,0xE0,0x01,0xF8,0x00,
 0x01,0xFC,0x00,0x3F,0xE0,0x01,0xFC,0xC0,0x07,0xF8,0x00,0x3E,0x70,0x00,0x3C,0x00,
 0x00,0xFF,0x80,0xFF,0xC0,0x01,0xFC,0xE0,0x03,0xF0,0x01,0xFE,0x70,0x00,0x3F,0x00,
 0x01,0xFD,0xC0,0xF3,0xE0,0x03,0xDF,0xE0,0x03,0xF0,0x01,0xDF,0xF0,0x00,0x7F,0x80,
 0x0F,0xFD,0xC0,0x67,0xE0,0x03,0xFF,0xE0,0x00,0xFC,0x01,0xFF,0xE0,0x01,0xEF,0x80,
 0x0F,0xFD,0x80,0x0F,0xE0,0x03,0x7F,0xE0,0x01,0xFC,0x00,0xFF,0xC0,0x03,0xCE,0x00,
 0x06,0xF9,0x80,0x1F,0x80,0x03,0x3E,0xE0,0x0F,0xBC,0x00,0xFF,0x80,0x03,0x8E,0x00,
 0x06,0x7F,0x80,0x0B,0x80,0x03,0x7E,0xE0,0x0F,0xF0,0x00,0xFF,0x80,0x03,0x0E,0x00,
 0x06,0xFB,0x80,0x01,0xF0,0x03,0xFC,0xE0,0x05,0xF0,0x00,0x7C,0x00,0x01,0x8E,0x00,
 0x06,0x7F,0x80,0x3F,0x98,0x01,0xE1,0xE0,0x03,0xFF,0x00,0x0F,0xE0,0x00,0xCE,0x00,
 0x00,0x3F,0x00,0x3D,0xBC,0x00,0xFF,0xC0,0x3F,0xFF,0x80,0x07,0xE0,0x00,0x7C,0x00,
 0x00,0x37,0x00,0x37,0x98,0x00,0x0F,0x80,0x1C,0x01,0x00,0x00,0x00,0x00,0x3C,0x00,
 0x00,0x00,0x00,0x31,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uchar data j=16;/*所建立的第一行汉字数组中元素的个数*/
/*为在液晶中第一行得显示数据*/
uchar data j1=20;/*所建立的第二行汉字数组中元素的个数*/
/*为在液晶中第二行得显示数据*/
uchar data k=0x81;/*起始点:80h-8fh为在第一行显示*/
uchar data k1=0x90;/*起始点:90h-9fh为在第二行显示*/
/********************扩充指令集画图********************/
uchar data z=21;/*图形数组的页,为实际点阵行数*/
uchar data y=16;/*图形数组的列,为实际点阵列数除以8*/
uchar data Column=1;/*起始点设定:为在液晶中显示的实际起始列*/
uchar data Page=6;/*起始点设定:为在液晶中显示的实际起始行*/
/**************************************************/
void WCom(uchar);/*写指令*/
void Clearlcd();/*清屏*/
void Imim();/*初始化*/
void Dat(uchar);/*送数据*/
void Delay();/*延时*/
void Hanz();/*写第一行汉字*/
void Hanz1();/*写第二行汉字*/
void Tuxing();/*扩充指令集画图子程序*/
void Clearlcd1();/*扩充指令集清屏子程序*/
/********************主程序********************/
void main()
{
 //Delay();
 //Delay();
 //Delay();/*延时*/
 Imim();/*初始化*/
 p=Hanzi;/*指针指向数组的首地址*/
 p1=Hanzi1;/*指针指向数组的首地址*/
 p2=Tu;/*指针指向数组的首地址*/
 Hanz();/*写第一行汉字程序*/
 Hanz1();/*写第二行汉字程序*/
 Delay();
 Delay();
 Delay();
 Delay();
 Clearlcd();/*清屏*/
 Tuxing();/*扩充指令集画图子程序*/
 loop:goto loop;
 }

/********************写指令子程序********************/
void WCOM(uchar d)    /*写指令程序*/
{
 uchar data i;
 uchar data j;
 D_I=1;/*片选信号选通*/
 P1=0xf8;/*读写信号与暂存器选择信号致1*/
 for(i=0;i<8;i++)/*写入8次*/
 {
  R_W=W_bite;/*将p1口最高位数据送入*/
  P1=P1<<1;/*令0xf8循环左移*/
  E=1;/*脉冲信号高*/
  E=0;/*脉冲信号低*/
 }
 P1=d;/*将要写入信号送到P1口*/
 for(j=0;j<2;j++)/*数据送两次*/
 {
  for(i=0;i<4;i++)/*送高四位*/
  {

   R_W=W_bite;/*将p1口最高位数据送入*/
   P1=P1<<1; /*P1口数据逻辑左移*/
   E=1;/*脉冲信号高*/
   E=0;/*脉冲信号低*/
  }
  for(i=0;i<4;i++)/*送四个0*/
  {
   R_W=0;/*将0送入*/
   E=1;/*脉冲信号高*/
   E=0;/*脉冲信号低*/
  }
 }
 D_I=0;/*关闭片选信号*/
}
/********************送数据子程序********************/
void Dat(uchar d)
{
 uchar data i;
 uchar data j;
 D_I=1;/*片选信号选通*/
 P1=0xfa;/*读写信号致0,暂存器选择信号致1*/
 for(i=0;i<8;i++)/*写入8次*/
 {
  R_W=W_bite;/*将p1口最高位数据送入*/
  P1=P1<<1;  /*P1口数据逻辑左移*/
  E=1;/*脉冲信号高*/
  E=0;/*脉冲信号低*/
 }
 P1=d;/*将要送数据送到P1口*/
 for(j=0;j<2;j++)/*数据送两次*/
 {
  for(i=0;i<4;i++)/*送高四位*/
  {
   R_W=W_bite;/*将p1口最高位数据送入*/
   P1=P1<<1; /*P1口数据逻辑左移*/
   E=1;/*脉冲信号高*/
   E=0;/*脉冲信号低*/
  }
  for(i=0;i<4;i++) /*送四个0*/
  {

   R_W=0;/*将0送入*/
   E=1;/*脉冲信号高*/
   E=0;/*脉冲信号低*/
  }
 }
 D_I=0;/*关闭片选信号*/
}
/********************初始化子程序********************/
void Imim()
{
 P0=0xff;
 P1=0xff;
 P2=0xff;
 P3=0xff;/*使程序运行稳定*/
 D_I=0;/*关闭片选信号*/
 E=0;  /*脉冲信号致低*/
 Delay();
 WCOM(0x38);/*功能设定*/
 Delay();
 WCOM(0x08);/*关显示指令*/
 Delay();
 WCOM(0x06);/*游标右移*/
 Delay();
 WCOM(0x01);/*清屏*/
 Delay();
 Delay();
 WCOM(0x0f);/*开显示指令*/
 Delay();
}
/********************延时子程序********************/
void Delay()
{
 uchar data i,j;
 for(i=0;i<255;i++)
 {
  for(j=0;j<255;j++);
 }
}
/********************基本指令集清屏子程序********************/
void Clearlcd()
{
 WCOM(0x01);/*清除显示*/
}
/********************写第一行汉字主程序********************/
void Hanz()
{
 WCOM(k); /*设置第一行起始点*/
 for(i=0;i<j;i++,p++)
 {
  wbyte=*p;
  Dat(wbyte);/*将汉字数组数据送入*/
 }
}
/********************写第二行汉字主程序********************/
void Hanz1()
{
  WCOM(k1);/*设置第二行起始点*/
  for(i=0;i<j1;i++,p1++)
 {
  wbyte=*p1;
  Dat(wbyte);/*将汉字数组数据送入*/
 }
}
/********************扩充指令集画图子程序********************/
void Tuxing()
{
 uchar data v;
 uchar data w;
 uchar data x;
 uchar data h;
 WCOM(0x34);/*功能设定*/
 WCOM(0x36);/*扩充功能设定*/
 Clearlcd1();/*在扩充功能下清屏*/
 for(h=0;h<z;h++)  /*页循环*/
 {
  v=Column|0x80;
  w=Page|0x80;
  WCOM(w);/*送入起始页地址*/
  WCOM(v);/*送入起始列地址*/
  Page++; /*准备对下一页进行操作*/
  for(x=0;x<y;x++) /*列循环*/
   {
    wbyte=*p2;
    Dat(wbyte);/*循环送入图形数据*/
    p2++;
   }
 }
}
/********************扩充指令集清屏子程序********************/
void Clearlcd1()
{
  uchar data Disp_Page;
  uchar data i;
  uchar data j;
  for(i=0;i<32;i++)/*共32页*/
  {
   Disp_Page=i|0x80;/*设置页地址*/
   WCOM(Disp_Page);/*送入页地址*/
   WCOM(0x80);/*送入起始列地址*/
   for(j=0;j<20;j++)
   {
    Dat(0x00);/*清屏*/
   }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -