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

📄 lcd_dis.c

📁 AT89C51单片机控制LCD12864液晶显示器显示汉字;
💻 C
字号:
/***************************************************************\
|*          12864LCD显示程序 proteus7.1仿真AMPIRE128*64       *|
|*        Copyright (c) 2007山师.传播       */
/*        All rights reserved.                  */
          /*赵彦彬                                  *|
|*                                       *|
|*          
\***************************************************************/






#include <reg52.h>
                          
#include <string.h>


typedef unsigned char uchar;
typedef unsigned int  uint;
typedef struct dword                
{
 uchar dd[64];                      
};

struct dword code dis[30] =        // 数据表
{
 0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0xFF,
      0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,
      0x00,0x7F,0x20,0x20,0x20,0x20,0x20,0x3F,
      0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00,
 0x08,0x08,0x08,0x88,0x68,0x18,0x0F,0xE8,
      0x08,0x08,0x08,0x88,0x08,0x0C,0x08,0x00,
      0x00,0x40,0x21,0x11,0x0D,0x41,0x81,0x7F,
      0x01,0x05,0x09,0x31,0x61,0x00,0x00,0x00,
 0x00,0xFC,0x00,0x00,0xFF,0x00,0x02,0xF2,
      0x12,0x12,0xFE,0x12,0x12,0xFB,0x12,0x00,
      0x00,0x8F,0x40,0x30,0x0F,0x00,0x00,0x3F,
      0x00,0x00,0xFF,0x10,0x20,0x1F,0x00,0x00,
 0x04,0x44,0x94,0x24,0x6F,0x04,0xE4,0x24,
      0x24,0x24,0x2F,0xF4,0x24,0x06,0x04,0x00,
      0x04,0x04,0xFD,0x04,0x02,0x00,0x3F,0x40,
      0x40,0x42,0x44,0x43,0x40,0x40,0x70,0x00,
 0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,
      0xA0,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
      0x00,0x40,0x40,0x20,0x10,0x0C,0x03,0x00,
      0x01,0x06,0x08,0x10,0x20,0x60,0x20,0x00,
 0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,
      0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,
      0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,
      0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00,
 0x80,0x40,0x20,0xF8,0x47,0x48,0x48,0x48,
      0xC8,0x7F,0x48,0x48,0x4C,0x68,0x40,0x00,
      0x00,0x00,0x00,0xFF,0x00,0x00,0x02,0x0B,
      0x12,0x62,0xD2,0x0A,0x06,0x02,0x00,0x00,
 0x10,0x10,0x10,0xFF,0x90,0x30,0xAA,0x72,
      0x22,0xFE,0x21,0x71,0xA9,0xAC,0xA0,0x00,
      0x02,0x42,0x81,0x7F,0x00,0x01,0xFE,0x92,
      0x92,0xFF,0x92,0x92,0xFE,0x01,0x00,0x00, 
0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,
      0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,
      0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,
      0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00,
0x00,0xFE,0x22,0x5A,0x96,0x0C,0x24,0x24,
      0x25,0x26,0x24,0x34,0xA4,0x14,0x0C,0x00,
      0x00,0xFF,0x04,0x08,0x87,0x81,0x41,0x31,
      0x0F,0x01,0x3F,0x41,0x41,0x41,0x70,0x00,
      
 0x40,0x48,0x48,0x48,0xFF,0x48,0x68,0x40,
      0x0C,0x30,0xC0,0x30,0x0E,0x00,0x00,0x00,
      0x40,0x30,0x0F,0x08,0x1F,0x22,0x42,0x48,
      0x44,0x43,0x40,0x41,0x46,0x6C,0x20,0x00,
 0x00,0x00,0xE4,0x24,0x2C,0x34,0x25,0x26,
      0xA4,0xB4,0x6C,0x26,0x24,0x30,0x20,0x00,
      0x40,0x30,0x0F,0x80,0x92,0x92,0x49,0x49,
      0x44,0x24,0x22,0x11,0x08,0x00,0x00,0x00,
 0x10,0x10,0xD0,0xFF,0x90,0x10,0x10,0xD0,
      0xFF,0x90,0x10,0x20,0x10,0x08,0xC6,0x00,
      0x04,0x03,0x00,0xFF,0x00,0x04,0x03,0x00,
      0xFF,0x00,0x81,0x44,0x22,0x11,0x0C,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x20,0x22,0x2A,0x2A,0xAA,0x6A,0x3A,0x2F,
      0x2A,0x6A,0xAA,0x2A,0x2A,0x22,0x20,0x00,
      0x04,0x04,0x02,0x01,0xFF,0x49,0x49,0x49,
      0x49,0x49,0xFF,0x01,0x02,0x06,0x02,0x00,

 0x80,0x70,0x00,0xFF,0x10,0x20,0xFE,0x92,
      0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
      0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x40,
      0x23,0x04,0x08,0x14,0x62,0xC3,0x40,0x00,

 0x24,0x24,0xA4,0xFE,0x23,0x22,0x80,0x70,
      0x00,0xFF,0x00,0x40,0x20,0x30,0x00,0x00,
      0x08,0x06,0x01,0xFF,0x81,0x42,0x20,0x18,
      0x06,0x01,0x06,0x08,0x30,0x60,0x20,0x00,

 0x82,0x92,0x92,0x92,0x92,0xFF,0x00,0x00,
      0x00,0xFF,0x92,0x92,0x9A,0xD3,0x82,0x00,
      0x20,0x18,0x00,0x3C,0x40,0x41,0x44,0x48,
      0x58,0x41,0x40,0x70,0x00,0x08,0x30,0x00,

 0x00,0x40,0x7F,0x44,0x44,0x26,0xA4,0x00,
      0x3F,0x48,0x48,0xC4,0x46,0x40,0x70,0x00,
      0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,
      0x49,0x49,0x49,0xFF,0x01,0x00,0x00,0x00,

 0x00,0x00,0x00,0xF8,0x48,0x4C,0x4A,0x49,
      0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
      0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,
      0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,

 0x10,0x10,0x10,0xFF,0x90,0x50,0x20,0x20,
      0x20,0xFF,0xA0,0x22,0x24,0x30,0x20,0x00,
      0x02,0x42,0x81,0x7F,0x00,0x80,0x40,0x30,
      0x0F,0x00,0x3F,0x40,0x40,0x40,0x70,0x00,

 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x46,0x2F,0x1F,0x06,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

 0x04,0x04,0x04,0xC4,0x3F,0x04,0x04,0x04,
      0xE4,0x04,0x1F,0x84,0xC4,0x06,0x04,0x00,
      0x04,0x02,0x01,0xFF,0x00,0x20,0x10,0x08,
      0x3F,0x42,0x41,0x40,0x40,0x40,0x70,0x00,

 0x10,0x0C,0x04,0x44,0x24,0x94,0x45,0x26,
      0x44,0x94,0x24,0x64,0x04,0x14,0x0C,0x00,
      0x08,0x08,0x04,0x02,0xFD,0x44,0x44,0x44,
      0x44,0x44,0xFD,0x02,0x04,0x0C,0x04,0x00,

 0x00,0x00,0x00,0x00,0xFE,0x22,0x22,0x22,
      0x22,0x22,0x22,0xFF,0x02,0x00,0x00,0x00,
      0x00,0x80,0x40,0x30,0x0F,0x02,0x02,0x02,
      0x02,0x42,0x82,0x7F,0x00,0x00,0x00,0x00,

 0x88,0x98,0x64,0x2C,0xB2,0xCD,0x00,0xFC,
      0x26,0x25,0x24,0x24,0x24,0xFE,0x04,0x00,
      0x00,0x12,0x52,0x89,0x44,0x3F,0x80,0x43,
      0x31,0x0F,0x01,0x3F,0x41,0x43,0x70,0x00,

 0x20,0x20,0x20,0x22,0x24,0x2C,0x20,0xE0,
      0x3F,0x20,0x20,0x20,0x20,0xF0,0x20,0x00,
      0x00,0x40,0x20,0x10,0x08,0x04,0x03,0x00,
      0x02,0x04,0x4C,0x80,0x40,0x3F,0x00,0x00,

 0x40,0x40,0x42,0xCC,0x00,0x20,0x10,0xFC,
      0x4B,0x48,0x4A,0xFC,0x48,0x4C,0x08,0x00,
      0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,
      0x22,0x22,0x22,0x3F,0x22,0x32,0x20,0x00,

 0x10,0x10,0xF0,0x1F,0x10,0xF2,0x82,0x82,
      0xFE,0x82,0x82,0x82,0xFE,0x83,0x82,0x00,
      0x40,0x22,0x15,0x08,0x14,0x23,0x80,0x40,
      0x3F,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 //山东师范大学传播学院赵彦彬春恨秋悲皆自扰花容月貌为谁妍

};


sbit DI  =P3^7;      							 // 数据\指令 选择
sbit RW  =P3^6;      							 // 读\写 选择
sbit E   =P3^5;      							 // 读\写使能
sbit CS2 =P3^4;      							 // 片选1
sbit CS1 =P3^3;      							 // 片选2
sbit RST =P3^2;      							 // 复位





/**********************************************\
|*   写命令子程序                             *|
|*                 *|
\**********************************************/ 
void write_cmd(uchar cmd)             //写命令子程序 
{ RW=0;
  DI=0;   		 //DI=0 写命令 
  E=1;
  P1=cmd;
  E=0;       //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR 
   }

/**********************************************\
|*   写数据子程序                             *|

|*   调用函数: null                           *|
\**********************************************/ 
void write_dat(uchar dat)             //写数据子程序
{ RW=0;
  DI=1;   //DI=1  写数据
  E=1;
  P1=dat;
  E=0;    //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR 
   }

/**********************************************\
|*   设置显示起始行 X地址和Y地址              *|
|*   入口参数:st_line 显示起始行 0~63        *| 
|*             x_add   页地址  8行为一页 0~7  *|
|*   		   y_add   Y地址  0~128           *|

\**********************************************/ 

void set_dis(uchar st_line,uchar x_add,uchar y_add)  //设置显示起始行 X地址和Y地址
{
//write_cmd(st_line+0xc0);                //+0xc0是参照设置起始行的格式
 write_cmd(x_add+0xb8);                  //+0xb8是参照设置页地址的格式
  if(y_add<64) { CS1=0;CS2=1;write_cmd(y_add+0x40);} //Y_add地址实际上只有0~63 采用CS1和CS2选左右半屏
      else     { CS1=1;CS2=0;write_cmd(y_add);}      //选第一片时,+64第二片为y_add-64+64
 }



/***********************************************\
|*   写汉字子程序1 可以在任意位置写入          *|
|*   入口参数:st_line 显示起始行 0~63         *| 
|*             x_add   页地址  8行为一页 0~7   *|
|*   		   y_add   Y地址  0~128            *|
       
              count 汉字个数
/*调用set_dis write_dat
\***********************************************/ 
void write_word(uchar st_line,uchar x_add,uchar y_add,uchar *buf,uchar count) //写入汉字
{ uchar i,j,k=1;
 set_dis(st_line, x_add,y_add);
 for(j=0;j<count;j++)                //显示的字数
 {
 for(i=0;i<16;i++)
   write_dat(*(buf+i+j*32)) ;        //字的下半部分,x_add+1
 set_dis(st_line,x_add+1,y_add);
 for(i=16;i<32;i++)
   write_dat(*(buf+i+j*32));         
 set_dis(st_line,x_add,y_add=y_add+16);

if(y_add==128)                   //一行的字数超过8 y_add>128时换行
{                         //为什么每次换行第一列子的上半部分出现错误?

x_add=2*k;

y_add=0;
set_dis(st_line, x_add,y_add);
k++;
}
}

}




/****************************************************\
|*   主程序入口                                     *|
|*   12864LCD显示程序 proteus7.1 仿真AMPIRE128*64   *|
\****************************************************/ 
void main(void)                               //主程序

{
write_word(0,0,0,&dis,30);



write_cmd(0x3f); 
CS1=CS2=1;
while(1)
{}
}
 

⌨️ 快捷键说明

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