12864显示汉字
- 格式:doc
- 大小:156.00 KB
- 文档页数:8
12864中文字库液晶模块使用说明书第 1 页共16 页一、12864液晶显示模块概述1. 12864液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置国标GB2312码简体中文字库(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
可与CPU 直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。
具有多种功能:光标显示、画面移位、睡眠模式等。
2. 外观尺寸:93×70mm(4X8C), 84×44mm(2X8C),110×65mm(2x8 C _2), 116×39mm(2X10),180×65mm(4X16A)3. 视域尺寸:73×39mm(4X8C), 78×25mm(2x8 C _2), 70×20mm(2X8C),85×20mm(2X10), 132×39mm(4X16A),补充说明:外观尺寸可根据用户的要求进行适度调整。
二、模块引脚说明1)表—1:(128X32)、(160X32)模块引脚说明引脚名称 方向 说明 引脚名称方向 说明1 VSS - GND(0V) 11 DB4 I/O 数据42 VDD - Supply Voltage For Logic (+5v) 12 DB5 I/O 数据53 VO - Supply Voltage For LCD (悬空)13 DB6 I/O 数据64 RS(CS) H/L H: Data L: Instruction Code 14 DB7 I/O 数据75 R/W(STD) H/L H: Read L: Write15 PSB H/L 16032此脚为:RESET脚 6 E(SCLK) H,H/L Enable Signal7 DB0 I/O 数据0 16 /RST H/L 16032此脚为空8 DB1 I/O 数据1 17 LEDK - 16032此脚为A9 DB2 I/O 数据2 18 LEDA - 16032此脚为K10 DB3 I/O 数据3 注:以上K为负,A为正4)表—4:(256X64)引脚说明引脚名称 方向 说明引脚名称 方向 说明 1 FG - FRAME GROUND 11 DB0 I/O 数据0 2 VSS - GND(0V)12 DB1 I/O 数据1 3 VDD - Supply Voltage For Logic (+5v) 13 DB2 I/O 数据2 4 NC - 空脚14 DB3 I/O 数据3 5 R/W H/L H: Read L: Write 15 DB4 I/O 数据4 6 E1 H,H/L Enable Signal1 16 DB5 I/O 数据5 7 E2 H,H/L Enable Signal217 DB6 I/O 数据6 8 RS H/L H: Data L: Instruction Code 18 DB7 I/O 数据7 9 NC - 空脚19 NC - 空脚 10 /RST H/L Reset Signal 低电平有效 20 NC - 空脚注 K背光源负极(LED-OV)A背光源正极(LED+5V)三、12864液晶硬件接口1、逻辑工作电压(VDD):4.5~5.5V2、电源地(GND):0V3、LCD 驱动电压(V0):0~-10V4、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温) 保存温度(Tstg):-10~65℃(常温)5、电气特性见附图1 外部连接图(参考附图2)模块有并行和串行两种连接方法(时序如下): 1、8位并行连接时序图MPU 写资料到模块RSR/WEMPU从模块读出资料RSR/WE2、串行连接时序图CS C LS T3、AC电气特性(TA=25℃ VCC=5V)condition Min. Typ. Max. UnitSYMBOL Characteristics Testfrequency Rf=39KΩ480 540 600 KHz Fosc OSCTIME UNIT PARAMETER SYMBOL MESUREFOR WRITE MODE(WRITING DATA FROM MPU TO ST7920)System cycle time TC 13,000 nsAddress setup time TAS 1,500 nsAddress hold time TAH 1,500 nsData setup time TDSW 1,000 nsData hold time TH 20 nsEnable pulsewidth TPW 1,500 nsEnable rise/fall time TR,TF 25 nsFOR READ MODE(READING DATA FROM ST7920 TO MPU)System cycle time TC 13,000 nsAddress setup time TAS 1,500 nsAddress hold time TAH 1,500 nsData setup time TDDR 1,000 nsData hold time TH 20 ns Enable pulsewidth TPW 1,500 ns Enable rise/fall time TR,TF 25 ns四、用户指令集指令表—2:(RE=1:扩充指令集)指令码指令RS RW DB7 DB6 DB5DB4 DB3 DB2DB1DB0说明执行时间(540KHZ )待命模式 0 0 0 0 0 0 0 0 0 1将DDRAM 填满“20H ”,并且设定DDRAM 的地址计数器(AC )到“00H ” 72us卷动地址或IRAM 地址选择 0 0 0 0 0 0 0 0 1 SR SR=1:允许输入垂直卷动地址 SR=0:允许输入IRAM 地址72us反白选择 0 0 0 0 0 0 0 1 R1 R0选择4行中的任一行作反白显示,并可决定反白与否 72us 睡眠模式0 0 0 0 0 0 1 SL X XSL=1:脱离睡眠模式 SL=0:进入睡眠模式72us扩充功能设定0 0 0 0 1 1 X1REG 0RE=1:扩充指令集动作RE=0:基本指令集动作G=1 :绘图显示ONG=0 :绘图显示OFF72us设定IRAM地址或卷动地址0 0 0 1 AC5AC4 AC3 AC2AC1AC0SR=1:AC5—AC0为垂直卷动地址SR=0:AC3—AC0为ICON IRAM地址72us设定绘图RAM地址0 0 1 AC6 AC5AC4 AC3 AC2AC1AC0设定CGRAM地址到地址计数器(AC)72us备注:1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
12864串行显示中文,按键选择显示页面,并且可调数值。
单片机P1口接矩阵按键,其它接口按程序中定义去接只需要接12864LCD上GND VCC RS RW E PSB RST A K程序如下/********************************12864.h头文件*******************************/ #ifndef _12864_h#define _12864_h/*****包含头文件**************/#include<reg51.h>/********定义I/0口**********/#define GPIO_KEY P1sbit LCD12864_SCLK = P2^7; //Esbit LCD12864_SID = P2^5; //RWsbit LCD12864_CS = P2^6; //RSsbit LCD12864_RET= P2^0;sbit LCD12864_PSB =P2^2;/*声明全局变量*/extern unsigned char keyvalue;/******声明全局函数*********/void Delay1ms(unsigned int); //声明延时函数unsigned char KeyDown(void);void LCD_sendbyte(unsigned char);void WrCom(unsigned char);void WrDat(unsigned char);void LcdInit(void);//void Print(unsigned char);void SetAddress( unsigned char,unsigned char );void DisplayString(unsigned char x ,unsigned char y,unsigned char *add);#endif/********************************12864.C*************************************/ #include"12864.h"#include<reg51.h>#include"string.h"//#define LCM_ST7920_FIRST_LINE_ADDRESS 0x80//#define LCM_ST7920_SECOND_LINE_ADDRESS 0x90//#define LCM_ST7920_THIRD_LINE_ADDRESS 0x88//#define LCM_ST7920_FOURTH_LINE_ADDRESS 0x98/*定义全局变量*/unsigned char keyvalue=0;/****************************************************************************** ** 函数名: Delay1ms* 函数功能: 延时函数,延时1ms* 输入: c* 输出 e : 无* 说名: 该函数是在12MHZ晶振下,12分频单片机的延时。
单片机综合实训题目:12864液晶显示专业:电气工程与自动化班级:自动化12-13班*名:***学号:********1.1 基于单片机控制液晶显示系统的设计任务设计一款基于单片机AT89S51液晶滚动显示系统。
1.2 系统设计要求(1)通过单片机的控制使液晶进行滚动显示学校。
(2)通过单片机的控制使液晶进行滚动显示专业。
(3)通过单片机的控制使液晶进行滚动显示姓名。
(4)通过单片机的控制使液晶进行滚动显示学号。
1.3 系统设计思路根据系统设计要求,初步思路如下:(1)通过单片机最小系统的控制使液晶进行滚动显示。
(2)液晶模块采用LCD12864。
(3)系统采用并口连接方式。
(4)通过驱动ST7920控制器使用其自带字库来提取所需文字。
二、液晶显示控制电路与程序方案设计2.1系统设计思路与框图液晶显示器YM12864R 的控制器ST7920 可以显示字母、数字符号、中文字型及自定图形显示,只要一个最小的微处理系统,将液晶显示模块的接口作为I/O 设备直接与之连接,就可以进行控制液晶显示器和数据传输,从而达到理想的显示效果。
使用P3 口给液晶显示器提供控制信号,P0 口给液晶显示器传送数据。
YM12864R 液晶显示器的控制信号有PSB、RS、R/W、E,其中RS、R/W、E分别对应接在AT89C51 的P3.0、P3.1、P3.2、P2.3 上,在本次设计中采用并行接口,故PSB接高电平,而8位数据口DB0~ DB7对应接在P0 口上。
背光灯的电源正极、液晶显示器模块的电源正极以及LCD 驱动电压输入端都接在+5V 的稳压电源上。
背光灯负极和模块的电源负极统一接地。
液晶显示器模块的复位脚连接开关按纽与地相连。
选择按键接高电平,即可实现单片机对液晶显示汉字的控制。
系统设计图框如下图2.1所示,主要由单片机的最小系统AT89C51、YM12864R 液晶显示电路及外围电路构成。
图2.1 系统设计框图2.2框图模块功能描述及技术指标分析时钟振荡器模块:利用晶体本身的特性,可以利用晶振与电容搭建振荡电路与AT89C51引脚XTAL1及XTAL2相连,向单片机提供一个频率定度较高的时钟脉冲,具体连接见原理图。
#include<stdio.h>#include<reg52.h>#include<math.h>#include<intrins.h>sbit RS=P0^0;sbit RW=P0^1;sbit E=P0^2;sbit PSB=P0^3;sbit RES=P0^4;#define LCD12864_DatePort P2unsigned char lcd_x,lcd_y;unsigned char h[]={"aaaaaaaaaaaaaaaa"};unsigned char code image[1024]={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,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,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x1F,0xC1,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0xFF,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1F,0xFF,0xFC,0x00,0x00,0x01,0xFF,0xFE,0x1F,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x07,0xFF,0xFF,0x9E,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x7F,0xFF,0xFF,0x80,0x00,0x0F,0xFF,0xFF,0xEC,0x60,0x00,0x00,0x00,0x00, 0x00,0x00,0xFF,0xFF,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xE0,0x40,0x00,0x00,0x00,0x00, 0x00,0x01,0xFF,0x3E,0x3F,0xC0,0x00,0x1F,0xE3,0xE7,0xF0,0x80,0x00,0x00,0x00,0x00, 0x00,0x01,0xFE,0x1E,0x1F,0xE0,0x00,0x3F,0xE3,0xC3,0xF9,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0xFC,0x1C,0x1F,0xE0,0x00,0x3F,0xC1,0xC3,0xFC,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0xFC,0x6D,0x9F,0xF0,0x00,0x7F,0xC1,0x81,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x6D,0x8F,0xF0,0x00,0x7F,0xCD,0xB1,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x6D,0x9F,0xF0,0x00,0x7F,0xCF,0xB1,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x1C,0x1F,0xF0,0x00,0xFF,0xC5,0xF3,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFE,0x1E,0x1F,0xF8,0x00,0xFF,0xE3,0xC3,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFF,0x3E,0x3F,0xF8,0x00,0xFF,0xE3,0xE7,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xFF,0xF3,0xFF,0xF8,0x00,0xFF,0xFE,0x7F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x0F,0xF8,0xC1,0xCF,0xFC,0x00,0xFF,0x9C,0x38,0xFF,0x80,0x00,0x00,0x00,0x00, 0x00,0x0F,0xE0,0x7F,0x83,0xFC,0x01,0xFE,0x0F,0xF0,0x3F,0x80,0x00,0x00,0x00,0x00, 0x00,0x1F,0xFF,0x00,0x3F,0xFC,0x01,0xFF,0xE0,0x07,0xFF,0x80,0x00,0x00,0x00,0x00, 0x00,0x1F,0xFF,0xFB,0xFF,0xFC,0x01,0xBF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00, 0x00,0x1F,0xFF,0xFF,0xFF,0xFC,0x01,0xDF,0xFF,0xFF,0xFB,0x80,0x00,0x00,0x00,0x00, 0x00,0x3F,0xFF,0xFF,0xFF,0xFC,0x03,0xC7,0xFF,0xFF,0xE7,0x80,0x00,0x00,0x00,0x00, 0x00,0x7F,0xFF,0xFF,0xFF,0xFC,0x07,0xC1,0xFF,0xFF,0x8F,0xC0,0x00,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xFE,0x0F,0xE0,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xF8,0x00,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00, 0x01,0xFC,0x7F,0xFF,0xFF,0x3F,0x1F,0x8E,0x00,0x00,0xE3,0xF0,0x00,0x00,0x00,0x00, 0x03,0xF8,0x7F,0xFF,0xFC,0x1F,0xBF,0x87,0xC8,0x1F,0x83,0xF0,0x00,0x00,0x00,0x00, 0x03,0xF8,0x7F,0xFF,0xE0,0x1F,0xFF,0x87,0xFF,0xFC,0x01,0xF8,0x00,0x00,0x00,0x00, 0x03,0xF8,0x7F,0x00,0x00,0x1F,0xFF,0x04,0xE0,0x00,0x01,0xF8,0x00,0x00,0x00,0x00, 0x07,0xF8,0x7F,0x00,0x00,0x0F,0xFF,0x04,0x60,0x00,0x01,0xF8,0x00,0x00,0x00,0x00, 0x07,0xF8,0x7F,0x00,0x00,0x0F,0xFF,0x0C,0x60,0x00,0x01,0xFC,0x00,0x00,0x00,0x00, 0x07,0xF8,0x7F,0x00,0x00,0x0F,0xFF,0x0C,0x60,0x00,0x01,0xFC,0x00,0x00,0x00,0x00, 0x07,0xF8,0x7F,0x00,0x00,0x0F,0xFF,0x06,0x60,0x00,0x01,0xFC,0x00,0x00,0x00,0x00, 0x07,0xB8,0x3E,0x00,0x00,0x19,0xF3,0x87,0xE0,0x00,0x01,0xBC,0x00,0x00,0x00,0x00, 0x07,0x18,0x00,0x00,0x00,0x18,0xE3,0x80,0x00,0x00,0x01,0x18,0x00,0x00,0x00,0x00, 0x00,0x1C,0x00,0x00,0x00,0x10,0x01,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x00,0x00,0x00,0x30,0x01,0xC0,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x00,0x00,0x00,0x60,0x00,0xE0,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x00,0x00,0x00,0x40,0x00,0x70,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x80,0x00,0x00,0xC0,0x00,0x78,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, 0x00,0x0D,0xE0,0x00,0x03,0xB8,0x01,0x9C,0x00,0x00,0x3B,0x00,0x00,0x00,0x00,0x00, 0x00,0x18,0x78,0x00,0x0F,0x7C,0x03,0xCF,0x00,0x00,0xE7,0x80,0x00,0x00,0x00,0x00, 0x00,0x10,0x1C,0x00,0x3E,0xFC,0x03,0xF3,0xE0,0x03,0xDF,0x80,0x00,0x00,0x00,0x00, 0x00,0x1A,0x0B,0xC1,0xE3,0xF8,0x01,0xF8,0xFC,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xF1,0x80,0xEF,0xE0,0x00,0x7F,0xF0,0x1F,0xFC,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,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};void delay_ms(unsigned char z) //延时{unsigned i,j;for(i=0;i<z;i++)for(j=0;j<110;j++);}void LCD12864_WriteCmd(unsigned int cmd) //写命令{RS=0;RW=0;E=0;LCD12864_DatePort=cmd;delay_ms(5);E=1;delay_ms(5);E=0;}void LCD12864_WriteDate(unsigned char dat) //写数据{RS=1;RW=0;E=0;LCD12864_DatePort=dat;delay_ms(5);E=1;delay_ms(5);E=0;}void LCD12864_Init(){PSB=1; //1并行,0串行LCD12864_WriteCmd(0x30); //基本指令操作//delay_ms(5);LCD12864_WriteCmd(0x0c); //显示开,关光标//delay_ms(5);LCD12864_WriteCmd(0x01); //清除led的显示内容//delay_ms(5);LCD12864_WriteCmd(0x06);}/*====================================================函数功能:清除GCROM的内容,如果不清除会出现花屏现象清除方法:向GCROM中写入0x00来清除内========================================================*/ void LCD12864_ClearGDRAM(){unsigned char i,j,k;lcd_x=0x80;lcd_y=0x80;LCD12864_WriteCmd(0x34);for(i=0;i<2;i++){for(j=0;j<32;j++){LCD12864_WriteCmd(lcd_y+j);LCD12864_WriteCmd(lcd_x);for(k=0;k<16;k++){LCD12864_WriteDate(0x00);}}lcd_x=0x88;}LCD12864_WriteCmd(0x36);LCD12864_WriteCmd(0x30);}/*================================================================ 函数功能:向12864中写入一幅图片函数参数:lcd_x为水平显示位置,lcd_y为垂直显示位置,函数将12864屏分成上下两屏写入,上半屏LCD_x=0x80,下半屏lcd_x=0x88=================================================================*/ void LCD12864_WriteImage(unsigned char *p){unsigned char i,j,k;lcd_x=0x80;lcd_y=0x80;LCD12864_WriteCmd(0x34);for(i=0;i<2;i++) //分为上下两屏{for(j=0;j<32;j++){LCD12864_WriteCmd(lcd_y+j);LCD12864_WriteCmd(lcd_x);for(k=0;k<16;k++) //写入显示数据{LCD12864_WriteDate(*p++);}}lcd_x=0x88;}LCD12864_WriteCmd(0x36);LCD12864_WriteCmd(0x30);}bit LCD12864_CheckBusy() //读忙碌状态{bit i;RS=0;RW=1;E=1;LCD12864_DatePort=0xff;delay_ms(1);i=(bit)(LCD12864_DatePort&0x80);E=0;return(i);}unsigned char LCD12864_ReadByte( void ){unsigned char ReturnValue ;LCD12864_CheckBusy() ;LCD12864_DatePort = 0xff ;RS=1;RW=1;E=0;E=1;ReturnValue =LCD12864_DatePort;E=0;return ReturnValue ;}void LCD12864_DrawPoint( unsigned char X, unsigned char Y, unsigned char Color ) {unsigned char Row , Tier , Tier_bit ;unsigned char ReadOldH, ReadOldL ;LCD12864_WriteCmd( 0x34 ) ;LCD12864_WriteCmd( 0x36 ) ;Tier = X >> 4 ;Tier_bit = X & 0x0f ;if( Y < 32 ){Row = Y ;}else{Row = Y - 32 ;Tier += 8 ;}LCD12864_WriteCmd( Row + 0x80 ) ;LCD12864_WriteCmd( Tier + 0x80 ) ;LCD12864_ReadByte();ReadOldH = LCD12864_ReadByte() ;ReadOldL = LCD12864_ReadByte() ;LCD12864_WriteCmd( Row + 0x80 ) ;LCD12864_WriteCmd( Tier + 0x80 ) ;if( Tier_bit < 8 ){switch( Color){case 0 : ReadOldH &=( ~( 0x01 << ( 7 - Tier_bit ))) ; break ;case 1 : ReadOldH |= ( 0x01 << ( 7 - Tier_bit )) ; break ;case 2 : ReadOldH ^= ( 0x01 << ( 7 - Tier_bit )) ; break ;default : break ;}LCD12864_WriteDate( ReadOldH ) ;LCD12864_WriteDate( ReadOldL ) ;}else{switch(Color){case 0 : ReadOldL &= (~( 0x01 << ( 15 - Tier_bit ))) ; break ;case 1 : ReadOldL |= ( 0x01 << ( 15 - Tier_bit )) ; break ;case 2 : ReadOldL ^= ( 0x01 << ( 15 - Tier_bit )) ; break ;default : break ;}LCD12864_WriteDate( ReadOldH ) ;LCD12864_WriteDate( ReadOldL ) ;}LCD12864_WriteCmd( 0x30 ) ;}void LCD12864_DrawLine_X( unsigned char X0, unsigned char X1, unsigned char Y, unsigned char Color ){ unsigned char Temp ;if( X0 > X1 ){Temp = X1 ;X1 = X0 ;X0 = Temp ;}for( ; X0 <= X1 ; X0++ )LCD12864_DrawPoint( X0, Y, Color ) ;}void LCD12864_DrawLine_Y( unsigned char X, unsigned char Y0, unsigned char Y1, unsigned char Color ){unsigned char Temp ;if( Y0 > Y1 ){Temp = Y1 ;Y1 = Y0 ;Y0 = Temp ;}for(; Y0 <= Y1 ; Y0++)LCD12864_DrawPoint( X, Y0, Color) ;}void LCD12864_DrawLine( unsigned char StartX, unsigned char StartY, unsigned char EndX, unsigned char EndY, unsigned char Color ){int t, distance; /*根据屏幕大小改变变量类型(如改为int型)*/int x = 0 , y = 0 , delta_x, delta_y ;char incx, incy ;delta_x = EndX - StartX ;delta_y = EndY - StartY ;if( delta_x > 0 ){incx = 1;}else if( delta_x == 0 ){LCD12864_DrawLine_Y( StartX, StartY, EndY, Color ) ;return ;}else{incx = -1 ;}if( delta_y > 0 ){incy = 1 ;}else if(delta_y == 0 ){LCD12864_DrawLine_X( StartX, EndX, StartY, Color ) ;return ;}else{incy = -1 ;}delta_x = abs( delta_x );//求绝对值delta_y = abs( delta_y );if( delta_x > delta_y ){distance = delta_x ;}else{distance = delta_y ;}LCD12864_DrawPoint( StartX, StartY, Color ) ;/* Draw Line*/for( t = 0 ; t <= distance+1 ; t++ ){LCD12864_DrawPoint( StartX, StartY, Color ) ;x += delta_x ;y += delta_y ;if( x > distance ){x -= distance ;StartX += incx ;}if( y > distance ){y -= distance ;StartY += incy ;}}}void LCD12864_DrawCross(){LCD12864_DrawLine_X( 0, 127 , 0, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 7, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 15, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 23, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 31, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 39, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 47, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 55, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 63, 1 ) ;LCD12864_DrawLine_Y( 0, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 15, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 31, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 47, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 63, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 79, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 95, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 111, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 127, 0 , 63, 1 ) ;}void LCD12864_Draw_ObliqueLine(){LCD12864_DrawLine( 0, 0, 127, 63, 1 ) ;LCD12864_DrawLine( 0, 63, 127, 0 , 1 ) ;LCD12864_DrawLine( 12, 0, 127, 63, 1 ) ;LCD12864_DrawLine( 52, 63, 127, 0 , 1 ) ;LCD12864_DrawLine( 32, 63, 98, 0, 1 ) ;LCD12864_DrawLine( 67, 0, 127, 63 , 1 ) ;}void LCD12864_DisplayOneChar(unsigned char X, unsigned char Y, unsigned char Data) {switch(Y){case 0:Y=0X80;break; //根据行数来选择相应地址case 1:Y=0X90;break;case 2:Y=0X88;break;case 3:Y=0X98;break;}LCD12864_WriteCmd( Y+X ); //这里不检测忙信号,发送地址码LCD12864_WriteDate(Data);}void LCD12864_DisplayListChar(unsigned char X, unsigned char Y, unsigned char *Data) {switch(Y){case 0:Y=0X80;break; //根据行数来选择相应地址case 1:Y=0X90;break;case 2:Y=0X88;break;case 3:Y=0X98;break;}LCD12864_WriteCmd( Y+X ); //这里不检测忙信号,发送地址码X = X*2;Y = 0;while( Data[Y] != 0 ) //若到达字串尾则退出{if (X <= 0x0F) //X坐标应小于0xF{LCD12864_WriteDate(Data[Y]);X++;Y++;}else break;}}void main(){LCD12864_Init();// write_com(0x1c);LCD12864_ClearGDRAM();//LCD12864_WriteImage(image);//LCD12864_Draw_ObliqueLine();LCD12864_DrawCross();//LCD12864_DisplayListChar(0,0,h);while(1);}。
Proteus仿真图:汉字用取模软件取得地址程序:#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit wr=P2^0;sbit rd=P2^1;sbit ce=P2^2;sbit cd=P2^3;sbit rst=P2^4;void delay(uint t);void init_12864();void write_data(uchar dat);void write_cmd1(uchar cmd);void write_cmd2(uchar dat,uchar cmd);void write_cmd3(uchar data1,uchar data2,uchar cmd); uchar read_status();void check_status();void clear_screen();void display_char(uchar x,uchar y,uchar ch);//注意汉字数组要加code放到外部存储器中,如果不加code则空间不够uchar code HZ0[6][32]={{/*-- 文字: 华--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x11,0x00,0x11,0x10,0x21,0x20,0x61,0xC0,0xA3,0x00,0x2D,0x08,0x21,0x08,0x20,0xF8, 0x22,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00},/*-- 文字: 东--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x12,0x00,0x22,0x00,0x3F,0xE0,0x02,0x00, 0x02,0x00,0x22,0x40,0x22,0x20,0x42,0x10,0x82,0x10,0x0E,0x00},/*-- 文字: 交--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x02,0x00,0xFF,0xF8,0x00,0x00,0x10,0x40,0x20,0x20,0x40,0x10,0x10,0x40, 0x08,0x80,0x05,0x00,0x02,0x00,0x05,0x00,0x18,0xC0,0xE0,0x38},/*-- 文字: 通--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x47,0xF0,0x21,0x20,0x20,0xC0,0x07,0xF0,0x04,0x90,0xE4,0x90,0x27,0xF0,0x24,0x90, 0x24,0x90,0x27,0xF0,0x24,0x90,0x24,0xB0,0x50,0x00,0x8F,0xF8},/*-- 文字: 大--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x05,0x00,0x05,0x00, 0x05,0x00,0x08,0x80,0x08,0x80,0x10,0x40,0x20,0x20,0xC0,0x18},/*-- 文字: 学--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x24,0x20,0x12,0x40,0x00,0x80,0xFF,0xF8,0x80,0x08,0x80,0x08,0x3F,0xC0,0x00,0x80, 0x03,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00}};uchar code HZ1[4][32]={/*-- 文字: 电--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x00,0x02,0x08,0x02,0x08,0x01,0xF8},/*-- 文字: 气--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x20,0x00,0x20,0x00,0x3F,0xF8,0x40,0x00,0x9F,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x20, 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x28,0x00,0x18,0x00,0x08},/*-- 文字: 学--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x24,0x20,0x12,0x40,0x00,0x80,0xFF,0xF8,0x80,0x08,0x80,0x08,0x3F,0xC0,0x00,0x80, 0x03,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00},/*-- 文字: 院--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x00,0x80,0xF0,0x40,0x97,0xF8,0x94,0x08,0xA0,0x00,0xA3,0xF0,0x90,0x00,0x90,0x00, 0x97,0xF8,0x91,0x20,0xE1,0x20,0x82,0x20,0x84,0x28,0x88,0x18}};uchar code HZ2[6][32]={{/*-- 文字: 零--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x3F,0xE0,0x02,0x00,0xFF,0xF8,0x82,0x08,0xBA,0xE8,0x02,0x00,0x3A,0xE0,0x0D,0x80, 0x30,0x60,0xC2,0x18,0x1F,0xC0,0x00,0x80,0x1D,0x00,0x03,0x00},/*-- 文字: 七--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x78,0x07,0x80,0xFC,0x00,0x04,0x00, 0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x08,0x04,0x08,0x03,0xF8},/*-- 文字: 电--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10, 0x42,0x10,0x7F,0xF0,0x42,0x00,0x02,0x08,0x02,0x08,0x01,0xF8},/*-- 文字: 牵--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x3F,0xE0,0x05,0x00,0x08,0x80,0x10,0x40,0xFF,0xF8,0x80,0x08,0x22,0x00, 0x3F,0xE0,0x42,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00},/*-- 文字: 二--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00},/*-- 文字: 班--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x01,0x00,0xF9,0x78,0x21,0x20,0x25,0x20,0x25,0x20,0xFD,0x20,0x25,0x78,0x25,0x20, 0x29,0x20,0x21,0x20,0x3A,0x20,0xE2,0x20,0x04,0xF8,0x08,0x00}};uchar code HZ3[3][32]={{/*-- 文字: 占--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x04,0x00,0x04,0x00,0x04,0x00,0x07,0xF8,0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xE0, 0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x7F,0xE0,0x40,0x20},/*-- 文字: 俊--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x10,0x80,0x11,0x00,0x12,0x20,0x27,0xF0,0x20,0x10,0x62,0x20,0xA4,0x10,0x29,0x08, 0x21,0xE0,0x22,0x20,0x25,0x40,0x20,0x80,0x23,0x60,0x2C,0x18},/*-- 文字: 龙--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x80,0x04,0x40,0x04,0x00,0xFF,0xF8,0x05,0x00,0x09,0x10,0x09,0x20, 0x09,0x40,0x11,0x80,0x11,0x00,0x23,0x08,0x4D,0x08,0x80,0xF8}};//汉字显示函数,处在x y处显示汉字hzvoid display_HZ(uchar x,uchar y,uchar *hz)////x 0-3 y 0-7{uchar i,j=0;for(i=0;i<16;i++){write_cmd3(((j/2)<<4)|(y*2),x,0x24);//地址指针设置..低地址,高地址,命令write_cmd2(hz[j++],0xc0);write_cmd2(hz[j++],0xc0);}}void main(){uchar i,j=0;init_12864();for(i=0;i<6;i++)display_HZ(0,1+i,HZ0[i]);//显示:华东交通大学for(i=0;i<4;i++)display_HZ(1,1+i,HZ1[i]);显示:电气学院for(i=0;i<6;i++)display_HZ(2,1+i,HZ2[i]);显示:零七电牵二班for(i=0;i<3;i++)display_HZ(3,2+i,HZ3[i]);显示:占俊龙//for(i=0;i<128;i++)//{// display_char(i/16,i%16,'0'+i);//}//clear_screen();}//显示字符函数,处在x y处显示chvoid display_char(uchar x,uchar y,uchar ch)//x 0-7 y 0-15{write_cmd3((((x*2)<<4)+y),0x00,0x24);//地址指针位置write_cmd2(ch-32,0xc0);//t6963c字符表与ASCII差32@@@@@@@@@@@@@@@@ }void delay(uint t){uint i,j;for(i=0;i<t;i++)for(j=0;j<50;j++);}void init_12864(){rst=1;delay(10);rst=0;wr=1;rd=1;ce=1;cd=1;rst=1;check_status();write_cmd3(0x01,0x00,0x21);//光标指针设置check_status();write_cmd3(0x00,0x00,0x42);//图形区首地址check_status();write_cmd3(16,0x00,0x43);//图形区宽度check_status();write_cmd1(0x80);//显示方式设置,正常显示check_status();//write_cmd1(0x94);//。
J12864中文液晶使用说明
一、硬件连接
二、软件设置
1.安装液晶库文件
将液晶库文件拷贝到单片机的编程环境中,以便在程序中调用相关函数。
2.初始化液晶
在程序的初始化函数中,调用液晶库提供的初始化函数,以初始化液晶参数和相关引脚。
三、显示中文字符
然后,在程序中调用液晶库中的函数,以显示中文字符。
通常的调用方式为:
lcd_draw_chinese(x, y, "你好");
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
-"你好":待显示的中文字符
四、显示英文字符和数字
显示英文字符和数字与显示中文字符类似,只是液晶库提供了额外的函数用于显示英文字符和数字。
调用方式如下:
显示英文字符:
lcd_draw_english(x, y, "Hello");
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
- "Hello":待显示的英文字符
显示数字:
lcd_draw_number(x, y, number);
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
- number:待显示的数字
五、显示图形
六、注意事项
2.操纵液晶模块时应轻拿轻放,避免撞击或扭曲。
3.在使用中文液晶时,应注意控制芯片ST7920的工作电压和时序要求。
4.如果需要显示中文字符,首先要将中文字库文件转换成液晶可识别的格式。
5.当在程序中使用液晶库进行液晶控制时,需注意调用顺序和参数的正确性。
总结:。
#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define DATA P0 //LCD12864数据线sbit RS=P2^2; // 数据\指令选择sbit RW=P2^1; // 读\写选择sbit EN=P2^0; // 读\写使能sbit CS1=P2^3; // 片选1sbit CS2=P2^4; // 片选2/********************************//* 定义中文字库*//********************************/uchar code Hzk[]={/*-- 文字: 各 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x20,0x20,0x10,0x08,0x8F,0xB4,0x44,0x44,0xA4,0x9C,0x04,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x01,0x7F,0x42,0x42,0x42,0x42,0x42,0x42,0x7F,0x01,0x03,0x01, 0x00,/*-- 文字: 位 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xC0,0x30,0xEC,0x03,0x2A,0xC8,0x09,0x0A,0x0E,0x08,0xE8,0x48,0x08,0x00, 0x00,0x01,0x00,0x00,0x7F,0x20,0x20,0x20,0x27,0x20,0x30,0x2E,0x21,0x20,0x20,0x20, 0x00,/*-- 文字: 单 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF8,0x28,0x29,0x2E,0x2A,0xF8,0x28,0x2C,0x2B,0x2A,0xF8,0x00,0x00, 0x00,0x08,0x08,0x0B,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x0B,0x08,0x08, 0x00,/*-- 文字: 机 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00, 0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78, 0x00,/*-- 文字: 爱 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x40,0xB2,0x96,0x9A,0x92,0xF6,0x9A,0x93,0x91,0x99,0x97,0x91,0x90,0x30, 0x00,0x40,0x20,0xA0,0x90,0x4C,0x47,0x2A,0x2A,0x12,0x1A,0x26,0x22,0x40,0xC0,0x40, 0x00,/*-- 文字: 好 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xF2,0x8A,0x86,0x82,0x80, 0x00,0x80,0x43,0x22,0x14,0x0C,0x73,0x20,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00, 0x00,/*-- 文字: 者 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x20,0x24,0x24,0x24,0x24,0xA4,0xBF,0x64,0x24,0x34,0x28,0x26,0x24,0x20, 0x00,0x04,0x04,0x04,0x02,0x02,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00, 0x00,/*-- 文字: 你 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x40,0xF0,0x2C,0x43,0x20,0x98,0x0F,0x0A,0xE8,0x08,0x88,0x28,0x1C,0x08, 0x00,0x00,0x00,0x7F,0x00,0x10,0x0C,0x03,0x21,0x40,0x3F,0x00,0x00,0x03,0x1C,0x08, 0x00,/*-- 文字: 们 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x40,0xF0,0x1C,0x03,0xF0,0x01,0x0E,0x04,0x00,0x04,0x04,0x04,0xFC,0x00, 0x00,0x00,0x00,0x7F,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x3F,0x00, 0x00,/*-- 文字: 辛 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x84,0x84,0x94,0xA4,0xC4,0x85,0x86,0x84,0xC4,0xA4,0x94,0x84,0x84,0x80, 0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x00,0x00, 0x00,/*-- 文字: 苦 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x44,0x44,0x44,0x44,0x5F,0x44,0xF4,0x44,0x44,0x5F,0x44,0x44,0x44,0x44, 0x00,0x00,0x00,0x00,0x7E,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x7E,0x00,0x00,0x00, 0x00,/*-- 文字: 了 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xF2,0x12,0x0A,0x0A,0x06,0x06,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,/*-- 文字: 希 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x20,0x30,0x30,0xA9,0x6A,0x3A,0x24,0xE4,0x2A,0x29,0x30,0x20,0x20,0x20, 0x00,0x08,0x04,0x02,0x01,0x3F,0x01,0x01,0x01,0xFF,0x01,0x21,0x61,0x3F,0x00,0x00, 0x00,/*-- 文字: 望 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x04,0x04,0xFC,0x85,0x46,0x24,0x04,0x80,0x7E,0x2A,0x2A,0xAA,0xAA,0xFE,0x00, 0x00,0x00,0x40,0x42,0x4A,0x4A,0x4A,0x4A,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x42,0x40, 0x00,/*-- 文字: 大 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20, 0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40, 0x00,/*-- 文字: 家 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x18,0x04,0x14,0x94,0x94,0xD5,0xB6,0x14,0x14,0x94,0x04,0x14,0x0C,0x04, 0x00,0x00,0x29,0x29,0x15,0x14,0x4A,0x89,0x44,0x3F,0x06,0x09,0x09,0x10,0x30,0x10, 0x00,/*-- 文字: 能 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0xB8,0x97,0x92,0x90,0x94,0xB8,0x10,0x00,0x7F,0x48,0x48,0x44,0x74,0x20, 0x00,0x00,0xFF,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x3F,0x44,0x44,0x42,0x72,0x20, 0x00,/*-- 文字: 多 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x20,0x90,0x88,0x54,0x53,0xA2,0x22,0x12,0x0A,0x06,0x00,0x00, 0x00,0x00,0x81,0x89,0x89,0x44,0x44,0x42,0x25,0x29,0x11,0x11,0x09,0x05,0x03,0x01, 0x00,/*-- 文字: 多 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x20,0x90,0x88,0x54,0x53,0xA2,0x22,0x12,0x0A,0x06,0x00,0x00, 0x00,0x00,0x81,0x89,0x89,0x44,0x44,0x42,0x25,0x29,0x11,0x11,0x09,0x05,0x03,0x01, 0x00,/*-- 文字: 交 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x08,0x88,0x48,0x38,0x28,0x09,0x0E,0x0C,0x08,0x98,0x28,0x68,0x48,0x08, 0x00,0x00,0x80,0x80,0x40,0x41,0x22,0x14,0x18,0x0C,0x16,0x23,0x61,0xC0,0x40,0x00, 0x00,/*-- 文字: 流 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04, 0x00,0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70, 0x00,/*-- 文字: 学 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,/*-- 文字: 习 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x02,0x02,0x0A,0x12,0x22,0x62,0x02,0x82,0x82,0x42,0x02,0xFE,0x00,0x00,0x00,0x00,0x04,0x0C,0x04,0x02,0x02,0x01,0x01,0x00,0x20,0x40,0x80,0x7F,0x00, 0x00,/*-- 文字: 24 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/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,};/****************************************//* 定义ASCII字库8列*16行*//****************************************/uchar code Ezk[]={/*-- 文字: Q --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F, 0x00,/*-- 文字: Q --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F, 0x00,/*-- 文字: 3 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E, 0x00,/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24, 0x00,/*-- 文字: 5 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E, 0x00,/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24, 0x00,/*-- 文字: 1 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00, 0x00,/*-- 文字: 5 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E, 0x00,/*-- 文字: 2 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30, 0x00,/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24, 0x00,/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24, 0x00,/*-- 文字: --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,/*-- 文字: --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,/*-- 文字: --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,/*-- 文字: --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,/*-- 文字: --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,/*-- 文字: --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,};/*状态检查,LCD是否忙*/void CheckState(){uchar dat;//状态信息(判断是否忙)RS=0; // 数据\指令选择,D/I(RS)=“L”,表示 DB7∽DB0 为显示指令数据 RW=1; //R/W=“H”,E=“H”数据被读到DB7∽DB0do{DATA=0x00;EN=1; //EN下降源_nop_(); //一个时钟延时dat=DATA;EN=0;dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)}while(!(dat==0x00));}/*写命令到LCD中*/SendCommandToLCD(uchar com){CheckState();//状态检查,LCD是否忙RS=0; //向LCD发送命令。
Proteus仿真图:汉字用取模软件取得地址程序:#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit wr=P2^0;sbit rd=P2^1;sbit ce=P2^2;sbit cd=P2^3;sbit rst=P2^4;void delay(uint t);void init_12864();void write_data(uchar dat);void write_cmd1(uchar cmd);void write_cmd2(uchar dat,uchar cmd);void write_cmd3(uchar data1,uchar data2,uchar cmd); uchar read_status();void check_status();void clear_screen();void display_char(uchar x,uchar y,uchar ch);//注意汉字数组要加code放到外部存储器中,如果不加code则空间不够uchar code HZ0[6][32]={{/*-- 文字: 华--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x11,0x00,0x11,0x10,0x21,0x20,0x61,0xC0,0xA3,0x00,0x2D,0x08,0x21,0x08,0x20,0xF8, 0x22,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00},/*-- 文字: 东--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x12,0x00,0x22,0x00,0x3F,0xE0,0x02,0x00, 0x02,0x00,0x22,0x40,0x22,0x20,0x42,0x10,0x82,0x10,0x0E,0x00},/*-- 文字: 交--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x02,0x00,0xFF,0xF8,0x00,0x00,0x10,0x40,0x20,0x20,0x40,0x10,0x10,0x40, 0x08,0x80,0x05,0x00,0x02,0x00,0x05,0x00,0x18,0xC0,0xE0,0x38},/*-- 文字: 通--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x47,0xF0,0x21,0x20,0x20,0xC0,0x07,0xF0,0x04,0x90,0xE4,0x90,0x27,0xF0,0x24,0x90, 0x24,0x90,0x27,0xF0,0x24,0x90,0x24,0xB0,0x50,0x00,0x8F,0xF8},/*-- 文字: 大--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x05,0x00,0x05,0x00, 0x05,0x00,0x08,0x80,0x08,0x80,0x10,0x40,0x20,0x20,0xC0,0x18},/*-- 文字: 学--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x24,0x20,0x12,0x40,0x00,0x80,0xFF,0xF8,0x80,0x08,0x80,0x08,0x3F,0xC0,0x00,0x80, 0x03,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00}};uchar code HZ1[4][32]={/*-- 文字: 电--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x00,0x02,0x08,0x02,0x08,0x01,0xF8},/*-- 文字: 气--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x20,0x00,0x20,0x00,0x3F,0xF8,0x40,0x00,0x9F,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x20, 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x28,0x00,0x18,0x00,0x08},/*-- 文字: 学--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x24,0x20,0x12,0x40,0x00,0x80,0xFF,0xF8,0x80,0x08,0x80,0x08,0x3F,0xC0,0x00,0x80, 0x03,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00},/*-- 文字: 院--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x00,0x80,0xF0,0x40,0x97,0xF8,0x94,0x08,0xA0,0x00,0xA3,0xF0,0x90,0x00,0x90,0x00, 0x97,0xF8,0x91,0x20,0xE1,0x20,0x82,0x20,0x84,0x28,0x88,0x18}};uchar code HZ2[6][32]={{/*-- 文字: 零--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x3F,0xE0,0x02,0x00,0xFF,0xF8,0x82,0x08,0xBA,0xE8,0x02,0x00,0x3A,0xE0,0x0D,0x80, 0x30,0x60,0xC2,0x18,0x1F,0xC0,0x00,0x80,0x1D,0x00,0x03,0x00},/*-- 文字: 七--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x78,0x07,0x80,0xFC,0x00,0x04,0x00, 0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x08,0x04,0x08,0x03,0xF8},/*-- 文字: 电--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10, 0x42,0x10,0x7F,0xF0,0x42,0x00,0x02,0x08,0x02,0x08,0x01,0xF8},/*-- 文字: 牵--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x3F,0xE0,0x05,0x00,0x08,0x80,0x10,0x40,0xFF,0xF8,0x80,0x08,0x22,0x00, 0x3F,0xE0,0x42,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00},/*-- 文字: 二--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00},/*-- 文字: 班--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x01,0x00,0xF9,0x78,0x21,0x20,0x25,0x20,0x25,0x20,0xFD,0x20,0x25,0x78,0x25,0x20, 0x29,0x20,0x21,0x20,0x3A,0x20,0xE2,0x20,0x04,0xF8,0x08,0x00}};uchar code HZ3[3][32]={{/*-- 文字: 占--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x04,0x00,0x04,0x00,0x04,0x00,0x07,0xF8,0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xE0, 0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x7F,0xE0,0x40,0x20},/*-- 文字: 俊--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x10,0x80,0x11,0x00,0x12,0x20,0x27,0xF0,0x20,0x10,0x62,0x20,0xA4,0x10,0x29,0x08, 0x21,0xE0,0x22,0x20,0x25,0x40,0x20,0x80,0x23,0x60,0x2C,0x18},/*-- 文字: 龙--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x80,0x04,0x40,0x04,0x00,0xFF,0xF8,0x05,0x00,0x09,0x10,0x09,0x20, 0x09,0x40,0x11,0x80,0x11,0x00,0x23,0x08,0x4D,0x08,0x80,0xF8}};//汉字显示函数,处在x y处显示汉字hzvoid display_HZ(uchar x,uchar y,uchar *hz)////x 0-3 y 0-7{uchar i,j=0;for(i=0;i<16;i++){write_cmd3(((j/2)<<4)|(y*2),x,0x24);//地址指针设置..低地址,高地址,命令write_cmd2(hz[j++],0xc0);write_cmd2(hz[j++],0xc0);}}void main(){uchar i,j=0;init_12864();for(i=0;i<6;i++)display_HZ(0,1+i,HZ0[i]);//显示:华东交通大学for(i=0;i<4;i++)display_HZ(1,1+i,HZ1[i]);显示:电气学院for(i=0;i<6;i++)display_HZ(2,1+i,HZ2[i]);显示:零七电牵二班for(i=0;i<3;i++)display_HZ(3,2+i,HZ3[i]);显示:占俊龙//for(i=0;i<128;i++)//{// display_char(i/16,i%16,'0'+i);//}//clear_screen();}//显示字符函数,处在x y处显示chvoid display_char(uchar x,uchar y,uchar ch)//x 0-7 y 0-15{write_cmd3((((x*2)<<4)+y),0x00,0x24);//地址指针位置write_cmd2(ch-32,0xc0);//t6963c字符表与ASCII差32@@@@@@@@@@@@@@@@ }void delay(uint t){uint i,j;for(i=0;i<t;i++)for(j=0;j<50;j++);}void init_12864(){rst=1;delay(10);rst=0;wr=1;rd=1;ce=1;cd=1;rst=1;check_status();write_cmd3(0x01,0x00,0x21);//光标指针设置check_status();write_cmd3(0x00,0x00,0x42);//图形区首地址check_status();write_cmd3(16,0x00,0x43);//图形区宽度check_status();write_cmd1(0x80);//显示方式设置,正常显示check_status();//write_cmd1(0x94);//。
#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit LCD_RS=P3^5;//数据和命令端sbit LCD_EN=P3^4;//使能端sbit LCD_RW=P3^3;sbit CS1=P2^1;sbit CS2=P2^2;uchar code a[]={/*-- 文字: 中--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,/*-- 文字: 国--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,0x02,0xFE,0x00,0x00, 0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00,/*-- 文字: 湖--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x21,0x86,0x60,0x90,0x90,0xFF,0x90,0x90,0x00,0xFE,0x92,0x92,0xFE,0x00,0x00,0x04,0xFC,0x03,0x00,0x1F,0x10,0x10,0x90,0x5F,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,/*-- 文字: 北--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x20,0x20,0x20,0x20,0xFF,0x00,0x00,0x00,0xFF,0x40,0x20,0x30,0x18,0x10,0x00,0x10,0x30,0x18,0x08,0x04,0x7F,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,/*-- 文字: 省--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x10,0x90,0x88,0x86,0xC0,0xC0,0xBF,0xA0,0x90,0x90,0x8A,0x84,0x18,0x00,0x00,0x01,0x01,0x00,0x00,0xFF,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0xFF,0x00,0x00,0x00,/*-- 文字: 襄--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x02,0xA2,0xAE,0xAA,0xFA,0xAE,0xA3,0xA2,0xFE,0xAA,0xAA,0xAE,0x22,0x02,0x00, 0x22,0x22,0x12,0x12,0x0A,0xFF,0x42,0x22,0x06,0x0B,0x12,0x2A,0x66,0xC2,0x42,0x00,/*-- 文字: 阳--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x02,0x22,0x5A,0x86,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0xFF,0x04,0x08,0x04,0x03,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,/*-- 文字: 市--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x04,0x04,0x04,0xE4,0x24,0x24,0x25,0xFE,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x00,0x00,0x10,0x20,0x1F,0x00,0x00,0x00,/*-- 文字: 襄--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x02,0xA2,0xAE,0xAA,0xFA,0xAE,0xA3,0xA2,0xFE,0xAA,0xAA,0xAE,0x22,0x02,0x00, 0x22,0x22,0x12,0x12,0x0A,0xFF,0x42,0x22,0x06,0x0B,0x12,0x2A,0x66,0xC2,0x42,0x00,/*-- 文字: 樊--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x48,0x28,0xFF,0x28,0x02,0xAC,0x44,0xAA,0x00,0x48,0x28,0xFF,0x28,0x48,0x00,0x02,0x42,0x42,0x23,0x22,0x12,0x0A,0x07,0x0A,0x12,0x22,0x62,0xC3,0x42,0x02,0x00,/*-- 文字: 学--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*-- 文字: 院--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,};void xunhuan (uint x){int y,z;for(y=x;y>0;y--)for (z=120;z>0;z--);}void write_c(uchar c) //写指令端{LCD_RW=0;LCD_RS=0;LCD_EN=1;P1=c;LCD_EN=0;xunhuan(1);LCD_EN=1;//xunhuan(5);}void write_d(uchar d)//写数据{LCD_RW=0;LCD_RS=1;LCD_EN=1;P1=d;LCD_EN=0;xunhuan(1);LCD_EN=1;//xunhuan(5);}void pianxuan(screen) //片选{switch(screen){case 0:CS1=0;CS2=0;break;case 1:CS1=1;CS2=0;break;case 2:CS1=0;CS2=1;break;case 3:CS1=1;CS2=1;break;}}void qinping(screen)//清屏,从第一行第一列开始{uint x,y; //页的设置位pianxuan(screen);//选择哪个清屏for(x=0xb8;x<0xc0;x++){write_c(x);//页初始值为0XB8到0xc0共八页write_c(0x40);//列的初始地址为0x40,共64列for(y=0;y<64;y++){write_d(0x00);//选择全部清屏}}}/*LCD显示汉字字库函数*/void lcd_display_hanzi(uchar screen,uchar page,uchar lie,uint mun){ //screen:选择屏幕参数,page:选择页参数0-3,lie列参数0-3,mun:显示第几个汉字的参数int i; //page页其实就是行,是行计数器页指针共九位计数器,高三位为X,低六位为Ymun=mun*32;pianxuan(screen) ; //片选看哪个段write_c(0x40+(lie*16)); //一个汉字占用两个字节write_c(0xb8+(page*2)); //一个字节显示for ( i=0;i<16;i++){write_d(a[mun++]);}write_c(0x40+(lie*16));write_c(0xb8+(page*2)+1);for (i=0;i<16;i++){write_d(a[mun++]);}}void LCD_init(){write_c(0x3f);// 显示开启write_c(0xc0); //显示起始行,从第一位开始,从0到63 write_c(0xb8);// 设置页得地址从0到7write_c(0x40); //设置列的地址,从第一位开始,从0到63 }void main(){LCD_init();qinping(0);lcd_display_hanzi(0,0,0,0); //LCD显示汉字lcd_display_hanzi(0,0,1,1); //LCD显示汉字lcd_display_hanzi(0,0,2,2); //LCD显示汉字lcd_display_hanzi(0,0,3,3); //LCD显示汉字lcd_display_hanzi(1,0,0,4); //LCD显示汉字lcd_display_hanzi(1,0,1,5); //LCD显示汉字lcd_display_hanzi(1,0,2,6); //LCD显示汉字lcd_display_hanzi(1,0,3,7); //LCD显示汉字lcd_display_hanzi(2,1,0,8); //LCD显示汉字lcd_display_hanzi(2,1,1,9); //LCD显示汉字lcd_display_hanzi(2,1,2,10); //LCD显示汉字lcd_display_hanzi(2,1,3,11); //LCD显示汉字while(1);}在protues中的仿真原理图,真实情况下的仿真效果。
#include<reg52.h>#include<intrins.h>//声明_nop_();#define uchar unsigned char#define uint unsigned int//sbit ce=P2^3;//#define LCD_databus P0sbit rs=P2^2;sbit en=P2^0;sbit rw=P2^1;sbit cs1=P2^4;sbit cs2=P2^3;uchar num;/*void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}*/void write_LCD_command(uchar value)//指令函数{rs=0;//RS=1为数据操作,RS=0为写指令或读状态rw=0;// LCD_databus=value;P0=value;en=1;_nop_();//延时一个机器周期12M晶振的话就是1us 只是为了更精确的延时_nop_();en=0;}void write_LCD_data(uchar value)//数据函数{rs=1;//RS=1为数据操作,RS=0为写指令或读状态rw=0;// LCD_databus=value;P0=value;en=1;_nop_();_nop_();//延时一个机器周期12M晶振的话就是1us 只是为了更精确的延时en=0;}void Set_page(uchar page)//设置页,12864LCD共有8页,每页有8行点阵点。
{page=0xb8|page;//首页地址为0XB8write_LCD_command(page);}void Set_line(uchar startline)//设置显示的起始行,共有0--63行,一般从0行开始显示{startline=0xc0|startline;//起始行地址0XC0write_LCD_command(startline);}void Set_column(uchar column)//设置显示的列{column=column&0x3f; //列的最大值为0X3F,即64column=0x40|column; //列的首地址为0X40,write_LCD_command(column);}void Set0n0ff(uchar onoff)//设置显示开关,onoff取值为0或{onoff=0x3e|onoff;//0X3E是关显示,0X3F是开显示write_LCD_command(onoff);//所以若onoff为0,则表示关显示,onoff为1,则表示开显示}void SelectScreen(uchar screen)//选屏幕{switch(screen){case 0:cs1=0;cs2=0;break;case 1:cs1=0;cs2=1;break;case 2:cs1=1;cs2=0;break;default:break;}}void ClearScreen(uchar screen)//青萍{uchar i,j;SelectScreen(screen);for(i=0;i<8;i++){Set_page(i);Set_column(0);for(j=0;j<64;j++){write_LCD_data(0x00);}}}void InitLCD()//初始化{SelectScreen(0);Set0n0ff(0);SelectScreen(0);Set0n0ff(1);SelectScreen(0);ClearScreen(0);Set_line(0);}void show(uchar screen,uchar page,uchar column,uchar *p)//screen表示选择屏幕,page表示页,column表示列,*p表示汉字的数组{uchar i;SelectScreen(screen); //选屏Set_page(page); //设置页,写上半页Set_column(column);//设置列for(i=0;i<16;i++) //控制16列的数据输出{write_LCD_data(p[i]);} //汉字的上半部分Set_page(page+1); //写下半页Set_column(column); //控制列for(i=0;i<16;i++) //控制16列的数据输出{write_LCD_data(p[i+16]);} //汉字的下半部分}/*void Display(uchar ss,uchar page,uchar column,uchar *p){uchar i;SelectScreen(ss);Set_page(page);Set_column(column);for(i=0;i<16;i++){write_LCD_data(p[i]);}}*unsigned char code huan[]= // 欢{0x04,0x24,0x44,0x84,0x64,0x9C,0x40,0x30,0x0F,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,0x10,0x08,0x06,0x01,0x82,0x4C,0x20,0x18,0x06,0x01,0x06,0x18,0x20,0x40,0x80,0x00};*/unsigned char code pu[]={0x04,0x04,0x24,0x24,0x64,0xAF,0x24,0x34,0x24,0xAF,0x64,0x34,0x24,0x86,0x04,0x00, 0x01,0x01,0x01,0xFD,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0xFF,0x05,0x01,0x01,0x00,};unsigned char code ti[]={ 0x10,0x10,0x10,0xFF,0x90,0x50,0x00,0xFE,0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,0x02,0x42,0x81,0x7F,0x00,0x82,0x42,0x3A,0x42,0x82,0xFE,0x92,0x9A,0xD2,0x42,0x00,};unsigned char code ben[]={ 0x00,0x10,0x10,0x10,0x10,0xF0,0x10,0xFF,0x10,0xF0,0x10,0x10,0x18,0x10,0x00,0x00, 0x10,0x10,0x08,0x04,0x0B,0x08,0x08,0xFF,0x08,0x08,0x0B,0x04,0x08,0x18,0x08,0x00,};unsigned char code wushu[]={0x00,0x40,0x42,0x42,0x42,0x42,0xFE,0x42,0xC2,0x42,0x43,0x42,0x60,0x40,0x00,0x00, 0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x70,0x00,unsigned char code shu[]={0x10,0x10,0xD0,0xFF,0x90,0x38,0xC8,0x08,0xC8,0x38,0x90,0x10,0xFF,0x10,0x10,0x00,0x04,0x03,0x00,0xFF,0x20,0x10,0x0C,0x03,0x04,0x18,0x40,0x81,0x7F,0x00,0x00,0x00,};unsigned char code ming[]={0x00,0xFC,0x44,0x44,0x44,0xFE,0x04,0x00,0xFE,0x22,0x22,0x22,0x22,0xFF,0x02,0x00, 0x00,0x0F,0x04,0x04,0x04,0x8F,0x40,0x30,0x0F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00, };unsigned char code jing[]={ 0x20,0x58,0xCF,0x48,0x48,0x24,0xA4,0xAC,0xB5,0xA6,0xB4,0xAC,0xE6,0xB4,0x20,0 x00,0x02,0x02,0x7F,0x22,0x92,0x80,0x4F,0x3A,0x0A,0x0A,0x7A,0x8A,0x8F,0x80,0xE0,0x00, };unsigned char code yy[]={0x08,0x08,0x08,0x88,0x08,0xF8,0x09,0x0E,0x08,0xF8,0x08,0x88,0x08,0x0C,0x08,0x00, 0x00,0x04,0x02,0x41,0x30,0x0F,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x06,0x00,0x00, };unsigned char code fei[]={ 0x08,0x88,0x88,0x88,0x88,0xFF,0x00,0x00,0x00,0xFF,0x88,0x88,0xC8,0x8C,0x08,0x00, 0x10,0x10,0x10,0x10,0x10,0xFF,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x18,0x10,0x00,};unsigned char code tai[]={0x00,0x40,0x60,0x50,0x48,0x44,0x43,0x40,0x40,0x40,0x48,0x50,0x60,0xC0,0x00,0x00, 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFF,0x02,0x00,0x00,0x00, };unsigned char code douhao[]={ 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 };unsigned char code lai[]={0x00,0x08,0x28,0x48,0xC8,0x08,0x08,0xFF,0x08,0x88,0x48,0x68,0x0C,0x88,0x00,0x00, 0x21,0x21,0x11,0x11,0x09,0x05,0x03,0xFF,0x03,0x05,0x09,0x19,0x11,0x31,0x11,0x00,unsigned char code yi[]={ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};unsigned char code wuti[]={0x40,0x3C,0x10,0xFF,0x90,0xA0,0x10,0x1F,0xF0,0x10,0xF0,0x10,0x10,0xF8,0x10,0x00, 0x02,0x02,0x01,0xFF,0x00,0x10,0x0C,0x43,0x30,0x0E,0x41,0x80,0x40,0x3F,0x00,0x00, };unsigned char code he[]={0x80,0x40,0x20,0xF8,0x07,0x04,0xE4,0x24,0x24,0xF4,0x24,0x04,0xFC,0x06,0x04,0x00, 0x00,0x00,0x00,0xFF,0x00,0x00,0x0F,0x04,0x04,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00, };unsigned char code chu[]={0x00,0x00,0xE0,0x1E,0x10,0x10,0xF0,0x00,0x00,0xFF,0x20,0x40,0x80,0x80,0x00,0x00, 0x82,0x41,0x20,0x1B,0x04,0x1B,0x20,0x40,0x40,0x5F,0x40,0x40,0x40,0x61,0x20,0x00, };unsigned char code re[]={ 0x20,0x24,0x24,0x24,0xAF,0xE4,0xBC,0xA4,0xA4,0xA4,0xAF,0xE4,0xA6,0x34,0x20,0 x00,0x04,0x44,0x32,0x01,0x77,0x84,0x8C,0x94,0xB4,0x84,0x84,0xC7,0x10,0x60,0x00,0x00, };unsigned char code chen[]={0x00,0x40,0x20,0x10,0x08,0x0C,0x00,0x7F,0x00,0x04,0x08,0x10,0x30,0x60,0x00,0x00, 0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x46,0x64,0x40,0x00, };unsigned char code ai[]={0x20,0x20,0x20,0xFF,0x20,0x20,0x10,0xD8,0x94,0x93,0x90,0xD4,0x98,0x30,0x00,0x00, 0x10,0x30,0x10,0x1F,0x08,0x8C,0x85,0x44,0x34,0x0F,0x14,0x24,0x44,0xC6,0x44,0x00, };unsigned char code juhao[]={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 };void main()InitLCD();ClearScreen(0);Set_line(0);show(1,0,1*16,pu);////1表示左屏显示,0表示从0页开始显示。