LCD12864图形液晶并口显示

合集下载

LCD12864图形液晶并口显示2

LCD12864图形液晶并口显示2

LCD12864图形液晶并口显示【教学引入】液晶屏,在生活中很常见,我们常见的液晶显示器,如电脑的显示器,电视机,手机等等。

液晶屏在生活中已得到了普遍应用,它显示个各种各样的画面。

上次呢,我们让12864显示了汉字,这次我们让它显示图形。

【教学目标】1、掌握LCD12864液晶屏的绘图用法;2、编写LCD12864液晶屏的指令代码;【知识目标】1、掌握LCD12864液晶屏的绘图用法;2、掌握LCD12864液晶屏指令代码;【教学准备】电脑、Proteus、Keil、MCS-51系列单片机综合实验箱【教学方法】教法:讲授法、讨论法学法:练习法、探究法【教学课时】四课时【教学过程】一、12864液晶介绍12864液晶屏不仅能显示汉字,还能显示图形。

今天呢,我们就来看看液晶屏怎么显示图形的。

首先呢,我们看看显示坐标关系1、图形显示坐标水平方向X——以字节为单位垂直方向Y——以位为单位由图可知,水平方向为0~31,以位为单位;垂直方向为0~7、8~16,以2个字节为单位,分为上下两个块。

如下图2、图片取模有了图像显示的坐标,我们该把图片变成代码了,PCtoLCD2002不仅能取模汉字,还能取模图片。

字模软件PCtoLCD2002双击图标打开软件可以看到下图所示的画面,此软件也是绿色软件打开后可以直接使用。

软件有两种工作模式:字符模式和图形模式;上图界面是字符模式。

可以通过菜单栏模式(C)切换工作模式。

我们选择图形模式,最大化,如下图。

单击工具栏中的图标按钮,看到如下图所示的对话框。

我们可以根据自己的实际需要而进行的设置,因其简单易用这里不再详细讲述其使用方法。

设置完成后,单击左下角的确定保存。

设置如下图回到PCtoLCD2002完美版-(图形模式)界面,单击按钮,导入要显示的128X64的bmp图片,单击图标按钮,可以看到软件下方的数据显示区域出现的对应的显示数据。

如下图阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集1、指令表2:(RE=1:扩充指令集),如下图,讲解了12864的扩充指令集。

LCD12864并口

LCD12864并口

#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;extern const unsigned char shuzi_table[];#define LCD_DataIn P4DIR=0x00 //数据口方向设置为输入#define LCD_DataOut P4DIR=0xff //数据口方向设置为输出#define LCD2MCU_Data P4IN#define MCU2LCD_Data P4OUT#define LCD_CMDOut P3DIR|=0x07 //P3口的低三位设置为输出#define LCD_RS_H P3OUT|=BIT0 //P3.0#define LCD_RS_L P3OUT&=~BIT0 //P3.0#define LCD_RW_H P3OUT|=BIT1 //P3.1#define LCD_RW_L P3OUT&=~BIT1 //P3.1#define LCD_EN_H P3OUT|=BIT2 //P3.2#define LCD_EN_L P3OUT&=~BIT2 //P3.2/*******************************************函数名称:Delay_1ms功能:延时约1ms的时间参数:无返回值:无********************************************/void Delay_1ms(void){uchar i;for(i = 150;i > 0;i--) _NOP();}/*******************************************函数名称:Delay_Nms功能:延时N个1ms的时间参数:n--延时长度返回值:无********************************************/void Delay_Nms(uint n){uint i;for(i = n;i > 0;i--) Delay_1ms();}/*******************************************函数名称:Write_Cmd功能:向液晶中写控制命令参数:cmd--控制命令返回值:无********************************************/ void Write_Cmd(uchar cmd){uchar lcdtemp = 0;LCD_RS_L;LCD_RW_H;LCD_DataIn;do //判忙{LCD_EN_H;_NOP();lcdtemp = LCD2MCU_Data;LCD_EN_L;}while(lcdtemp & 0x80);LCD_DataOut;LCD_RW_L;MCU2LCD_Data = cmd;LCD_EN_H;_NOP();LCD_EN_L;}/******************************************* 函数名称:Write_Data功能:向液晶中写显示数据参数:dat--显示数据返回值:无********************************************/ void Write_Data(uchar dat){uchar lcdtemp = 0;LCD_RS_L;LCD_RW_H;LCD_DataIn;do //判忙{LCD_EN_H;_NOP();lcdtemp = LCD2MCU_Data;LCD_EN_L;}while(lcdtemp & 0x80);LCD_DataOut;LCD_RS_H;LCD_RW_L;MCU2LCD_Data = dat;LCD_EN_H;_NOP();LCD_EN_L;}/*******************************************函数名称:Ini_Lcd功能:初始化液晶模块参数:无返回值:无********************************************/void Ini_Lcd(void){LCD_CMDOut; //液晶控制端口设置为输出// Delay_Nms(500);Write_Cmd(0x30); //基本指令集Delay_1ms();Write_Cmd(0x02); // 地址归位Delay_1ms();Write_Cmd(0x0c); //整体显示打开,游标关闭Delay_1ms();Write_Cmd(0x01); //清除显示Delay_1ms();Write_Cmd(0x06); //游标右移Delay_1ms();Write_Cmd(0x80); //设定显示的起始地址}/*******************************************函数名称:Clear_GDRAM功能:清除液晶GDRAM中的随机数据参数:无返回值:无********************************************/void Clear_GDRAM(void){uchar i,j,k;Write_Cmd(0x34); //打开扩展指令集i = 0x80;for(j = 0;j < 32;j++){Write_Cmd(i++);Write_Cmd(0x80);for(k = 0;k < 16;k++){Write_Data(0x00);}}i = 0x80;for(j = 0;j < 32;j++){Write_Cmd(i++);Write_Cmd(0x88);for(k = 0;k < 16;k++){Write_Data(0x00);}}Write_Cmd(0x30); //回到基本指令集}/*******************************************函数名称:Draw_TX功能:显示一个16*16大小的图形参数:Yaddr--Y地址Xaddr--X地址dp--指向图形数据存放地址的指针返回值:无********************************************/void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp) {uchar j;uchar k=0;// Write_Cmd(0x01); //清屏,只能清除DDRAMWrite_Cmd(0x34); //使用扩展指令集,关闭绘图显示for(j=0;j<16;j++){Write_Cmd(Yaddr++); //Y地址Write_Cmd(Xaddr); //X地址Write_Data(dp[k++]);Write_Data(dp[k++]);}Write_Cmd(0x36); //打开绘图显示// Write_Cmd(0x30); //回到基本指令集模式}。

12864液晶图像显示图文教程——最全版

12864液晶图像显示图文教程——最全版

由图可以看到水平坐标一个单位是两字节(即 16 位 D15~D0),X 地址会自动加 1,是直接加一个单位 (即两字节 16 位),比如 0001(也即 0X80+000X80+01),从第一行第一列跳到第一行第二列。 代码: void display_image(uchar *p) { uchar i,j; write_cmd(0x34);//扩充指令集动作 write_cmd(0x34);//关绘图显示功能 /*上半屏显示设置*/ for(i=0;i<32;i++)//上半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x80); //水平地址 for(j=0;j<16;j++) { write_data(*p);//连续写入 16 个字节 p++; } } /*下半屏半屏显示设置*/ for(i=0;i<32;i++)//下半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x88);//水平地址 for(j=0;j<16;j++)//连续写入 16 个字节 { write_data(*p); p++; } } write_cmd(0x36);//开绘图显示 write_cmd(0x30);//回到基本指令集 } 源程序: #include <reg52.h> #include "12864.h" X 坐标(水平)方向以 2 字节 Byte 为单位,Y 坐标(垂直) 方向以 1 位 Bit 为单位,先连续写入垂直与水平坐标,再写入 两字节数据到 GDRAM。 这里是这样进行的:i=0 时,j=0,1 时,写入两字节到垂直 (0X80+00)水平(0X80+00)这格(D15~D0)里;然后 X 坐标地址自增 1, 地址变为垂直 (0X80+00) , 水平 (0X80+01) 这格,在 j=2,3 时写入两字节,………一直到垂直(0X80+00) 水平(0X80+07)这格,在 j=14,15 时写入两字节,此时循环 for(j=0;j<16;j++)结束跳出,刚好第一行 128 位写完数据;然后 i++,开始写第二行……

LCD12864-并口调试分享

LCD12864-并口调试分享

12864并口调试一、查技术手册得读时序图和指令表如下1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF 标志时BF 需为0,方可接受新的指令;如果在送出一个指令前并不检查BF 标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。

2、“ RE”为基本指令集与扩充指令集的选择控制位元,当变更“ RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“ RE”位元。

由上,读程序如下:二、查技术手册得写时序图和指令表如下由上,写程序如下:三、LCD初始化由数据手册,以上写指令注释:Wr_Command(0x30,0); //执行基本指令集动作Wr_Command(0x0C,1); //开显示及光标设置Wr_Command(0x01,1); //显示清屏Wr_Command(0x06,1); //显示光标移动设置四、GPIO并行输出数据在STM32操作一个IO口有下面四种方式:1、位带操作#define busy PAin(11)2、寄存器操作#define busy ((GPIOA->IDR)&(1<<11)?1:0)3、标准库函数操作#define busy GPIO_SetBits(GPIOA, GPIO_Pin_11) 4、HAL库操作#define busy HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11)根据包装线硬件原理图,LCD部分IO口分配如下:可见,IO分配是比较杂乱的,先对各GPIO进行初始化。

本例采用寄存器方式开发,GPIO 数据输出程序如下:总结下来,寄存器操作有以下特点:“与1相‘&’、与0相‘|’、不影响原值”例:#define LED0 (1<<10)#define LED0_SET(x) GPIOB->ODR=(GPIOB->ODR&~LED0)|(x ? LED0:0) ‘GPIOB->ODR&~LED0’ 把第10位”&0清0”;把其余位“与1相&,不影响原值”。

LCD12864液晶中文说明书

LCD12864液晶中文说明书
液晶显示模块技术手册
J12864中文/JGD12864中文/FY12864ZW
特色:(1)模组背部自带10K3*3硬封可调电位器,可以调到理想对比度
(2)LED背光极性可调,JP4为液晶背光正负反接处,此模组背光为4颗LED灯,非普通背光
(3)模组自带原装三星正品防静电电容,抗干扰性更强C6C7C8
C固定为0
第二字节:(并行)8位数据的高4位—格式DDDD0000第三字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T=25℃VDD=4.5V)
四、用户指令集
1、指令表1:(RE=0:基本指令集)
指令
指令码
说明
执行时间
(540
KHZ)
RS
RW
DB7
DB6
DB5
DB4
(4)串并口可通过两种方式调节1PSB脚控制2JP2短路到+
为并口短路到-为串口
(5)自改3.3V可通过JP3调节,默认接+级为5V,接-为3.3V,C4C5加极性电容即可型号
为106A14FH4,背光电阻33欧改成3.3欧
+
一、液晶显示模块概述
12864中文汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
RAM
1
1
D7
D6
D5
D4
D3
D2
D1
D0
从内部RAM读取资料
(DDRAM/CGRAM/IRAM/G
72us
72us
读取忙碌标志
(BF)和地址
0
1
BF

LCD12864资料

LCD12864资料

12864LCD液晶显示屏一、概述二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

三、基本特性:(1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接口说明:*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。

2.2并行接口管脚名称电平管脚功能描述管脚号1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对比度(亮度)调整RS=“H”,表示DB7——DB0为4 RS(CS)H/L显示数据RS=“L”,表示DB7——DB0为显示指令数据5 R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR 或DR6 E(SCLK) H/L 使能信号7 DB0 H/L 三态数据线8 DB1 H/L 三态数据线9 DB2 H/L 三态数据线10 DB3 H/L 三态数据线11 DB4 H/L 三态数据线12 DB5 H/L 三态数据线13 DB6 H/L 三态数据线14 DB7 H/L 三态数据线15 PSB H/LH:8位或4位并口方式,L:串口方式(见注释1)16 NC - 空脚17 /RESET H/L 复位端,低电平有效(见注释2)18 VOUT - LCD驱动电压输出端19 A VDD 背光源正端(+5V)(见注释3)20 K VSS 背光源负端(见注释3)*注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。

LCD12864液晶显示器中文说明

LCD12864液晶显示器中文说明

一、液晶显示模块概述12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压);显示内容:128列× 64行显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等二、外形尺寸1.外形尺寸图2.主要外形尺寸项目标准尺寸单位模块体积113.0×65.0×12.8mm定位尺寸105.0×55.0mm视域73.4×38.8 mm行列点阵数128×64dots点距离0.52×0.52 mm点大小0.48×0.48 mm二、模块引脚说明128X64 引脚说明引脚号引脚名称方向功能说明1 VSS - 模块的电源地2 VDD - 模块的电源正端3 V0 - LCD驱动电压输入端4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号5 R/W(SID) H/L 并行的读写选择信号;串行的数据口6 E(CLK) H/L 并行的使能信号;串行的同步时钟7 DB0 H/L 数据08 DB1 H/L 数据19 DB2 H/L 数据210 DB3 H/L 数据311 DB4 H/L 数据412 DB5 H/L 数据513 DB6 H/L 数据614 DB7 H/L 数据715 PSB H/L 并/串行接口选择:H-并行;L-串行16 NC 空脚17 /RET H/L 复位低电平有效18 NC 空脚19 LED_A - 背光源正极(LED+5V)20 LED_K - 背光源负极(LED-OV)逻辑工作电压(VDD):4.5~5.5V电源地(GND):0V工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)三、接口时序模块有并行和串行两种连接方法(时序如下):8位并行连接时序图MPU写资料到模块MPU从模块读出资料2、串行连接时序图串行数据传送共分三个字节完成:第一字节:串口控制—格式11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节:(并行)8位数据的高4位—格式DDDD0000第三字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T=25℃VDD=4.5V)四、用户指令集指令指令码说明执行时间(540KHZ)RSRWDB7DB6DB5DB4DB3DB2DB1DB清除显示0 0 0 0 0 0 0 0 0 1将DDRAM填满“20H”,并且设定DDRAM的地址计数器(AC)到“00H”4.6ms地址归位0 0 0 0 0 0 0 0 1 X设定DDRAM的地址计数器(AC)到“00H”,并且将游标移到开头原点位置;这个指令并不改变DDRAM的内容4.6ms进入点设定0 0 0 0 0 0 0 1 I/D S指定在资料的读取与写入时,设定游标移动方向及指定显示的移位72us显示状态开/关0 0 0 0 0 0 1 D C BD=1:整体显示ONC=1:游标ONB=1:游标位置ON72us游标或显示移位控制0 0 0 0 0 1S/CR/LX X设定游标的移动与显示的移位控制位元;这个指令并不改变DDRAM的内容72us功能设定0 0 0 0 1 DL XREX XDL=1 (必须设为1)RE=1:扩充指令集动作72us备注:1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。

LCD12864详解

LCD12864详解

12864液晶一、概述带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

基本特性:低电源电压(VDD:+3.0--+5.5V)显示分辨率:128×64点内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)内置 128个16×8点阵字符2MHZ时钟频率显示方式:STN、半透、正显驱动方式:1/32DUTY,1/5BIAS视角方向:6点背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10通讯方式:串行、并口可选内置DC-DC转换电路,无需外加负压无需片选信号,简化软件设计工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接口说明:*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。

2.2并行接口管脚号管脚名称电平管脚功能描述1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据5R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR6 E(SCLK) H/L 使能信号7 DB0 H/L 三态数据线8 DB1 H/L 三态数据线9 DB2 H/L 三态数据线10 DB3 H/L 三态数据线11 DB4 H/L 三态数据线12 DB5 H/L 三态数据线13 DB6 H/L 三态数据线14 DB7 H/L 三态数据线15 PSB H/L H:8位或4位并口方式,L:串口方式(见注释1)16 NC - 空脚17 /RESET H/L 复位端,低电平有效(见注释2)18 VOUT - LCD驱动电压输出端19 A VDD 背光源正端(+5V)(见注释3)20 K VSS 背光源负端(见注释3)*注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LCD12864图形液晶并口显示【教学引入】液晶屏,在生活中很常见,我们常见的液晶显示器,如电脑的显示器,电视机,手机等等。

液晶屏在生活中已得到了普遍应用,它显示个各种各样的画面。

【教学目标】1、掌握LCD12864液晶屏的用法;2、编写LCD12864液晶屏的指令代码;【知识目标】1、掌握LCD12864液晶屏的用法;2、掌握LCD12864液晶屏指令代码;【教学准备】电脑、Proteus、Keil【教学方法】教法:讲授法、讨论法学法:练习法、探究法【教学课时】四课时【教学过程】一、12864液晶介绍(1)12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。

12864点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。

12864M汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

12864引脚说明查阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集1、指令表1:(RE=0:基本指令表),如下图,讲解了12864的基本指令集和扩充指令集。

当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0。

“RE”为基本指令集与扩充指令集的选择控制位元,往后的指令集将维持在最后的状态。

当选择G=0 :绘图显示OFF,汉字显示的时,12864屏只能显示8X4=32个汉字,下面是汉字显示的坐标二、12864液晶屏驱动电路AT89C52的P0口连接12864的并行数据口,RP1为P0口的上拉排阻。

三、52代码编写(1)打开keil uVision4,建立一个新的工程,工程名为"12864 graphic LCD parallel display",保存类型*.uvproj,单片机型号AT89C52。

在工程中添加12864 graphic LCD parallel display.c文件,如下图(2)代码编写/*********************12864液晶显示************************功能说明:将数组内的字符串显示到12864上面*******************************************************************/#include<reg52.h> //52系列单片机头文件#include<intrins.h>#define uchar unsigned char // define 宏定义#define uint unsigned int // define 宏定义/*12864端口定义*/#define LCD_data P0 //数据口sbit LCD_RS = P1^0; //寄存器选择输入sbit L CD_RW = P1^1; //液晶读/写控制sbit L CD_EN = P2^5; //液晶使能控制sbit L CD_PSB = P1^2; //串/并方式控制uchar code TABROW1[][17]={ //字符串的末尾都有一个ASCIII的\0,所以为17 "去年今日此门中,","人面桃花相映红。

","人面不知何处去,","桃花依旧笑春风。

"};/****************************************** 毫秒级延时函数******************************************/void Delay_ms(uchar ms){uchar i,j;for(i=ms;i>0;i--)for(j=112;j>0;j--);}/****************************************** 检测12864是否忙标志位******************************************/bit Check_12864_busy(){bit fgbusy; //忙标志位名称LCD_RS=0; //命令选择LCD_RW=1; //液晶读控制LCD_EN=1; //使能开_nop_(); //空指令fgbusy=(bit)(LCD_data&0x80);//获取忙碌标志BF的值,BF=1忙LCD_EN=0; //使能关return fgbusy; //返回标志位数值,判断12864内部动作是否完成}/****************************************** 向12864写命令******************************************/void Write_12864_cmd(uchar cmd){while(Check_12864_busy());//忙则一直等待LCD_RS=0; //命令选择LCD_RW=0; //液晶写控制LCD_data=cmd; //发送命令LCD_EN=1; //使能开_nop_(); //空指令_nop_();LCD_EN=0; //使能关}/****************************************** 向12864写要显示的数据******************************************/void Write_12864_data(uchar dat){while(Check_12864_busy()); //忙则一直等待LCD_RS=1; //数据选择LCD_RW=0; //液晶写控制LCD_data=dat; //发送数据LCD_EN=1; //使能开_nop_(); //空指令_nop_();LCD_EN=0; //使能关}/****************************************** 12864初始化******************************************/void init_12864(){LCD_PSB=1; //8位并口方式Write_12864_cmd(0x30); //扩充指令集设置:8位设置,RE=0:基本指令集设置,G=0:绘图显示OFFDelay_ms(5);Write_12864_cmd(0x30); //基本指令集设置:DL=1,RE=0基本指令集动作Delay_ms(5);Write_12864_cmd(0x0c); //显示状态开/关,D=1整体显示ON,C=B=0游标、游标位置关。

Delay_ms(5);Write_12864_cmd(0x01); //清除显示Delay_ms(5);}void display_row(uchar row) //显示一行文字{uchar i=0,row_ad[4]={0x80,0x90,0x88,0x98}; //row_ad为四行汉字的第一个字的X坐标Write_12864_cmd(row_ad[row]); //设定汉字显示坐标,第row行、第一个while(TABROW1[row][i]!='\0') //到了字符串末尾,跳出while循环{Write_12864_data(TABROW1[row][i]); //写第row行,第i个数据i++;}}void main(){uchar row;init_12864(); //调用12864初始化函数while(1){for(row=0;row<4;row++) //依次显示4行文字display_row(row);}}代码写好后,单击按钮,打开{Options for Target}对话框,点选{Target}选项卡,在{Xtal(MHz):}后面的框格里,填写"12.0",设置单片机的频率为12M,如下图点选{Output}选项卡,勾选{Create HEX File}前面的复选框,如下图编译时生成.HEX文件。

单击OK 按钮,关闭对话框。

单击全部编译按钮,结果如下0错误,0警告,编译通过,并生成12864 graphic LCD parallel display.HEX文件。

把12864 graphic LCD parallel display.hex文件添加到AT89C52。

仿真:单击仿真进程控制按钮里面的运行按钮,查看仿真结果。

四、操作实验箱(1)硬件连接采用USB ISP下载方式,下载器如下图,实验箱采用USB窃电,无需外接电源将下载器一端连接USB接口,如下图,指示灯亮另一端连接“单片机核心板”的ISP插座(防呆的),如下图单片机核心板上单片机引脚EA需要拉高,拉高选择单片机内部程序执行,而不是外部程序执行,如下图(2)软件操作双击“烧录软件”文件夹下图标,打开软件烧录界面,如下图在 Select Chip 下面选择 AT89S52芯片 ,其它默认。

单击右侧“文件”下的图标按钮,如图,打开文件选取对话框,选取"12864 graphic LCD parallel display.hex"文件,如下图如下图如下图下载完成。

(3)“单片机核心板”模块连接“LCD 12864”模块。

将“单片机核心板”模块上的“12864-1”接线座与“LCD 12864”模块上的“12864-1”接线座相连;将“单片机核心板”模块上的“12864-2”接线座与“LCD 12864”模块上的“12864-2”接线座相连.操作程序的运行状况。

五、作业练习1、改动LCD12864液晶并口显示代码,让12864显示图形。

相关文档
最新文档