单片机控制12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)

PROTEUS仿真电路图:

单片机控制12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)_第1张图片

仿真实验结果展示:

单片机控制12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)_第2张图片

汉字取模过程(软件下载链接在文末):

第一步:打开液晶仿真排版软件

设定相关参数:
单片机控制12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)_第3张图片

输入汉字:
单片机控制12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)_第4张图片
随便找个位置将图片保存:
单片机控制12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)_第5张图片
第二步:打开液晶汉字模提取软件

设定相关参数:
单片机控制12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)_第6张图片

将刚才保存的图片打开并保存数据:
单片机控制12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)_第7张图片

C语言程序代码:

#include 
#define LCDLCDDisp_Off   0x3e
#define LCDLCDDisp_On    0x3f
#define Page_Add     0xb8//页地址
#define LCDCol_Add     0x40//列地址
#define Start_Line     0xC0//行地址
/*****液晶显示器的端口定义*****/
#define data_ora P0 /*液晶数据总线*/
sbit LCDMcs=P2^4 ;    /*片选1*/
sbit LCDScs=P2^3 ;    /*片选2*/
sbit LCDDi=P2^2 ;     /*数据/指令 选择*/
sbit LCDRW=P2^1 ;     /*读/写 选择*/
sbit LCDEnable=P2^0 ;     /*读/写 使能*/

//

unsigned char code Bmp1[]=
{
/*------------------------------------------------------------------------------
 
  宽×高(像素): 128×16
  字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/256字节
  显示的汉字:关关雎鸠在河之洲
------------------------------------------------------------------------------*/
/*--  调入了一幅图像:C:\Users\dhd\Desktop\1111111.bmp  --*/
/*--  宽度x高度=128x16  --*/
0x00,0x10,0x10,0x11,0x12,0x1C,0x10,0xF0,0x10,0x18,0x14,0x13,0x1A,0x90,0x00,0x00,
0x00,0x10,0x10,0x11,0x12,0x1C,0x10,0xF0,0x10,0x18,0x14,0x13,0x1A,0x90,0x00,0x00,
0x00,0xFC,0x24,0x24,0xFE,0x24,0x10,0xFC,0x4B,0x49,0xFE,0x48,0x68,0x4C,0x08,0x00,
0x10,0x10,0xFF,0x10,0xF8,0x10,0x00,0xFC,0x04,0x16,0x45,0x84,0x7E,0x04,0x00,0x00,
0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0xE8,0x08,0x88,0x08,0x0C,0x08,0x00,
0x10,0x21,0x62,0x06,0x82,0xE2,0x22,0x22,0x22,0xF2,0x22,0x02,0xFE,0x03,0x02,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x90,0x50,0x30,0x10,0x00,0x00,0x00,
0x10,0x22,0x64,0x0C,0x80,0x20,0xC0,0xFF,0x20,0xC0,0xFC,0x20,0xC0,0xFF,0x00,0x00,
0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x21,0x41,0xC1,0x41,0x00,
0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x21,0x41,0xC1,0x41,0x00,
0x10,0x3F,0x11,0x11,0x0F,0x08,0x00,0xFF,0x22,0x22,0x3F,0x22,0x23,0x32,0x20,0x00,
0x40,0x30,0x0F,0x00,0x3F,0x10,0x08,0x13,0x12,0x12,0x1A,0x52,0x82,0x7F,0x02,0x00,
0x08,0x04,0x02,0xFF,0x00,0x40,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x60,0x40,0x00,
0x04,0x04,0xFE,0x01,0x00,0x0F,0x04,0x04,0x04,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00,
0x00,0x20,0x10,0x10,0x28,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0x40,0x60,0x20,0x00,
0x04,0x04,0xFE,0x01,0x00,0x40,0x30,0x0F,0x00,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00,


};
unsigned char code Bmp2[]=
{
/*------------------------------------------------------------------------------
  宽×高(像素): 128×16
  字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/256字节
  显示的汉字:窈窕淑女君子好逑
--------------------------------------------------------------------------
*/
0x10,0x0E,0x04,0x94,0x4C,0x24,0x05,0x86,0x84,0xE4,0x8C,0x94,0xC4,0x94,0x0C,0x00,
0x10,0x0E,0x44,0x94,0x0C,0x04,0xF5,0x06,0xF4,0x04,0x0C,0xD4,0x84,0x14,0x0C,0x00,
0x10,0x22,0x64,0x0C,0xC0,0x40,0xFF,0x44,0x44,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0xE0,0x3F,0x20,0x20,0x20,0xE0,0x20,0x20,0x30,0x20,0x00,
0x10,0x10,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x12,0x18,0x10,0x00,
0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xE2,0x92,0x8A,0xC6,0x80,0x00,
0x40,0x42,0x44,0xCC,0x00,0x08,0x28,0x48,0x08,0xFF,0x08,0x4A,0x2C,0x08,0x00,0x00,
0x00,0x21,0x31,0x29,0x25,0x2B,0xB1,0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00,
0x00,0x88,0x88,0x45,0x42,0x31,0x0F,0x00,0x3F,0x42,0x45,0x48,0x58,0x40,0x70,0x00,
0x04,0x04,0xFE,0x09,0x24,0x42,0x3F,0x82,0x44,0x20,0x13,0x0C,0x13,0x60,0x20,0x00,
0x00,0x80,0x80,0x42,0x45,0x24,0x28,0x10,0x18,0x24,0x23,0x40,0xC0,0x00,0x00,0x00,
0x40,0x20,0x10,0x0C,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x22,0x15,0x08,0x14,0x63,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x1F,0x20,0x42,0x42,0x49,0x50,0x4F,0x40,0x41,0x42,0x66,0x20,0x00,

};
unsigned char code Bmp3[]=
{
/*------------------------------------------------------------------------------
  宽×高(像素): 128×16
  字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/256字节
  显示的汉字:参差荇菜左右流之
------------------------------------------------------------------------------*/

0x20,0x20,0x20,0x28,0xA8,0x6C,0x3B,0x28,0xA8,0x6A,0xAC,0x28,0x20,0x30,0x20,0x00,
0x00,0x04,0x24,0x24,0x25,0x26,0xA4,0x7C,0x24,0x26,0x25,0x34,0x26,0x84,0x00,0x00,
0x04,0x84,0x84,0x44,0x24,0x9F,0x04,0x24,0x24,0x2F,0x24,0x24,0x34,0xA6,0x04,0x00,
0x04,0x04,0x24,0x64,0xA4,0x2F,0x64,0xA4,0x24,0x2F,0x94,0x54,0x14,0x06,0x04,0x00,
0x08,0x08,0x08,0x08,0x88,0x78,0x0F,0x08,0x08,0x08,0x08,0x88,0x0C,0x08,0x00,0x00,
0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x88,0x0C,0x08,0x00,
0x10,0x22,0x64,0x0C,0x80,0x44,0x44,0x64,0x55,0x4E,0x44,0x54,0x66,0xC4,0x00,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x90,0x50,0x30,0x10,0x00,0x00,0x00,
0x04,0x84,0x82,0x81,0x4A,0x4A,0x49,0x25,0x24,0x12,0x10,0x09,0x02,0x06,0x02,0x00,
0x41,0x21,0x11,0x89,0x85,0x8B,0x89,0x89,0xF9,0x89,0x8D,0x89,0xC1,0x81,0x01,0x00,
0x08,0x08,0x04,0x02,0xFF,0x00,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x00,
0x02,0x42,0x42,0x22,0x12,0x0A,0x06,0xFF,0x06,0x0A,0x12,0x12,0x22,0x63,0x22,0x00,
0x20,0x50,0x48,0x46,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x60,0x40,0x00,
0x08,0x04,0x02,0x01,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x01,0x00,0x00,
0x04,0x04,0xFE,0x01,0x00,0x80,0x40,0x3F,0x00,0xFF,0x00,0x3F,0x40,0x40,0x70,0x00,
0x00,0x20,0x10,0x10,0x28,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0x40,0x60,0x20,0x00,

};
unsigned char code Bmp4[]=
{
/*------------------------------------------------------------------------------
   宽×高(像素): 128×16
  字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/256字节
  显示的汉字:窈窕淑女寤寐求之
------------------------------------------------------------------------------*/

0x10,0x0E,0x04,0x94,0x4C,0x24,0x05,0x86,0x84,0xE4,0x8C,0x94,0xC4,0x94,0x0C,0x00,
0x10,0x0E,0x44,0x94,0x0C,0x04,0xF5,0x06,0xF4,0x04,0x0C,0xD4,0x84,0x14,0x0C,0x00,
0x10,0x22,0x64,0x0C,0xC0,0x40,0xFF,0x44,0x44,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0xE0,0x3F,0x20,0x20,0x20,0xE0,0x20,0x20,0x30,0x20,0x00,
0x10,0x0C,0xF4,0x84,0x84,0xF4,0x05,0x56,0xD4,0x74,0x54,0x54,0xD4,0x14,0x0C,0x00,
0x10,0x0C,0xF4,0x84,0x84,0xF4,0x05,0x46,0x44,0x44,0xF4,0x44,0x44,0x54,0x0C,0x00,
0x00,0x08,0x28,0x48,0xC8,0x08,0x08,0xFF,0x88,0x0A,0x8C,0x48,0x6C,0x08,0x00,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x90,0x50,0x30,0x10,0x00,0x00,0x00,
0x00,0x21,0x31,0x29,0x25,0x2B,0xB1,0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00,
0x00,0x88,0x88,0x45,0x42,0x31,0x0F,0x00,0x3F,0x42,0x45,0x48,0x58,0x40,0x70,0x00,
0x04,0x04,0xFE,0x09,0x24,0x42,0x3F,0x82,0x44,0x20,0x13,0x0C,0x13,0x60,0x20,0x00,
0x00,0x80,0x80,0x42,0x45,0x24,0x28,0x10,0x18,0x24,0x23,0x40,0xC0,0x00,0x00,0x00,
0x02,0x42,0x3E,0x02,0x02,0xFF,0x02,0xFA,0x4B,0x4A,0x4A,0x4A,0x4B,0xFA,0x02,0x00,
0x02,0x42,0x3E,0x02,0x02,0xFF,0x42,0x22,0x12,0x0A,0xFF,0x0A,0x32,0x63,0x22,0x00,
0x00,0x10,0x10,0x08,0x04,0x42,0x81,0x7F,0x00,0x03,0x04,0x04,0x08,0x18,0x08,0x00,
0x00,0x20,0x10,0x10,0x28,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0x40,0x60,0x20,0x00,

};
/****************************************************************************
函数功能:LCD延时程序
入口参数:t
出口参数:
****************************************************************************/
void LCDdelay(unsigned int t)
{
	unsigned int i,j;
	for(i=0;i<t;i++);
	for(j=0;j<10;j++);
}
/****************************************************************************
状态检查,LCD是否忙


*****************************************************************************/
void CheckState()		
{
   unsigned char dat,DATA;//状态信息(判断是否忙)
   LCDDi=0; // 数据\指令选择,D/I(RS)="L" ,表示 DB7∽DB0 为显示指令数据 
   LCDRW=1; //R/W="H" ,E="H"数据被读到DB7∽DB0 
   do
   {
      DATA=0x00;
      LCDEnable=1;	//EN下降源
	  LCDdelay(2);//延时
	  dat=DATA;
      LCDEnable=0;
      dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
    }
    while(!(dat==0x00));
}
/*****************************************************************************
函数功能:写命令到LCD程序,RS(DI)=L,RW=L,EN=H,即来一个脉冲写一次
入口参数:cmdcode
出口参数:
*****************************************************************************/
void write_com(unsigned char cmdcode)
{
    CheckState();//检测LCD是否忙
	LCDDi=0;
	LCDRW=0;
	P1=cmdcode;		
	LCDdelay(2);
	LCDEnable=1;
	LCDdelay(2);
	LCDEnable=0;
}
/*****************************************************************************
函数功能:LCD初始化程序
入口参数:
出口参数:
*****************************************************************************/
void init_lcd()
{
	LCDdelay(100);	
	LCDMcs=1;//刚开始关闭两屏
	LCDScs=1;
	LCDdelay(100);
	write_com(LCDLCDDisp_Off);	 //写初始化命令
	write_com(Page_Add+0);
	write_com(Start_Line+0);
	write_com(LCDCol_Add+0);
	write_com(LCDLCDDisp_On);
}
/*****************************************************************************
函数功能:写数据到LCD程序,RS(DI)=H,RW=L,EN=H,即来一个脉冲写一次
入口参数:LCDDispdata
出口参数:
*****************************************************************************/
void write_data(unsigned char LCDDispdata)
{
    CheckState();//检测LCD是否忙
	LCDDi=1;
	LCDRW=0;
	P1=LCDDispdata;
	LCDdelay(2);
	LCDEnable=1;
	LCDdelay(2);
	LCDEnable=0;
}
/*****************************************************************************
函数功能:清除LCD内存程序
入口参数:pag,col,hzk
出口参数:
*****************************************************************************/
void Clr_Scr()
{
	unsigned char j,k;
	LCDMcs=0; //左、右屏均开显示
	LCDScs=0;
 	write_com(Page_Add+0);
 	write_com(LCDCol_Add+0);
 	for(k=0;k<8;k++)//控制页数0-7,共8页
 	{
		write_com(Page_Add+k); //每页每页进行写
  		for(j=0;j<64;j++)  //每页最多可写32个中文文字或64个ASCII字符
		{
      		write_com(LCDCol_Add+j);
			write_data(0x00);//控制列数0-63,共64列,写点内容,列地址自动加1
		}
	}
}
/*****************************************************************************
函数功能:左屏位置显示
入口参数:page,column,hzk
出口参数:
*****************************************************************************/
void Bmp_Left_Disp(unsigned char page,unsigned char column, unsigned char code *Bmp)
{
	unsigned char j=0,i=0;
	for(j=0;j<2;j++)
	{
		write_com(Page_Add+page+j);
		write_com(LCDCol_Add+column);
		for(i=0;i<64;i++) 
			write_data(Bmp[128*j+i]);
	}
}
/*****************************************************************************
函数功能:右屏位置显示
入口参数:page,column,hzk
出口参数:
*****************************************************************************/
void Bmp_Right_Disp(unsigned char page,unsigned char column, unsigned char code *Bmp)
{
	unsigned char j=0,i=0;
	for(j=0;j<2;j++)
	{
		write_com(Page_Add+page+j);
		write_com(LCDCol_Add+column);
		for(i=64;i<128;i++) 
			write_data(Bmp[128*j+i]);
	}
}


void main()
{
	init_lcd();
	Clr_Scr();
	LCDMcs=0; //左屏开显示
	LCDScs=1;
	Bmp_Left_Disp(0,0,Bmp1);// Bmp1为某个汉字的首地址
    Bmp_Left_Disp(2,0,Bmp2);
    Bmp_Left_Disp(4,0,Bmp3);
    Bmp_Left_Disp(6,0,Bmp4);
    
	LCDMcs=1; //右屏开显示
	LCDScs=0;
    Bmp_Right_Disp(0,0,Bmp1);
    Bmp_Right_Disp(2,0,Bmp2);
    Bmp_Right_Disp(4,0,Bmp3);
    Bmp_Right_Disp(6,0,Bmp4);
	while(1)
    {
  
	}
	   }

PROTEUS仿真文件、HEX文件和C语言程序文件:

相关文件下载

字模提取软件:

两个十分好用的取模软件下载

你可能感兴趣的:(单片机,嵌入式,单片机)