LCD12864图形液晶并口显示.docx
《LCD12864图形液晶并口显示.docx》由会员分享,可在线阅读,更多相关《LCD12864图形液晶并口显示.docx(17页珍藏版)》请在冰豆网上搜索。
LCD12864图形液晶并口显示
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引脚说明
引脚号
引脚名称
方向
功能说明
1
VSS
-
模块的电源地
2
VDD
-
模块的电源正端
3
VO
-
液晶显示对比度调节端
4
RS(CS)
H/L
数据/命令选择端(H/L)(串片选)
5
R/W(SID)
H/L
读/写选择端(H/L)(串数据口)
6
E(SCLK)
H/L
使能信号(串同步时钟信号)
7
D0
H/L
数据口
8
D1
H/L
数据口
9
D2
H/L
数据口
10
D3
H/L
数据口
11
D4
H/L
数据口
12
D5
H/L
数据口
13
D6
H/L
数据口
14
D7
H/L
数据口
15
PSB
H/L
并/串选择:
H并行L串行
16
NC
空脚
17
RST
H/L
复位,低电平有效
18
NC
空脚
19
BLA
-
背光电源正极
20
BLK
-
背光电源负极
主要技术参数
显示容量
128X64
芯片工作电压
3.3~5.5V
模块最佳工作电压
5.0V
与MCU接口
8位或4位并行/3位串行
工作温度(常温型)
-10°C~+60°C
工作温度(宽温型)
-20°C~+70°C
查阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集
1、指令表1:
(RE=0:
基本指令表),如下图,讲解了12864的基本指令集和扩充指令集。
当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0。
“RE”为基本指令集与扩充指令集的选择控制位元,往后的指令集将维持在最后的状态。
当选择G=0:
绘图显示OFF,汉字显示的时,12864屏只能显示8X4=32个汉字,下面是汉字显示的坐标
二、12864液晶屏驱动电路
所需原件清单
原件名称
所属类(Category)
所属子类(Sub-category)
AT89C52
MicroprocessorICs
8051Family
POT-HG
Resistors
Variable
RESPACK-8
Resistors
ResistorPacks
LCD12864A
自制
-
将表格所列原件添加到对象选择器窗口,绘制如下12864液晶屏驱动电路。
AT89C52的P0口连接12864的并行数据口,RP1为P0口的上拉排阻。
三、52代码编写
(1)打开keiluVision4,建立一个新的工程,工程名为"12864graphicLCDparalleldisplay",保存类型*.uvproj,单片机型号AT89C52。
在工程中添加12864graphicLCDparalleldisplay.c文件,如下图
(2)代码编写
/*********************12864液晶显示***********************
*功能说明:
将数组内的字符串显示到12864上面
*******************************************************************/
#include//52系列单片机头文件
#include
#defineucharunsignedchar//define宏定义
#defineuintunsignedint//define宏定义
/*12864端口定义*/
#defineLCD_dataP0//数据口
sbitLCD_RS=P1^0;//寄存器选择输入
sbitLCD_RW=P1^1;//液晶读/写控制
sbitLCD_EN=P2^5;//液晶使能控制
sbitLCD_PSB=P1^2;//串/并方式控制
ucharcodeTABROW1[][17]={//字符串的末尾都有一个ASCIII的\0,所以为17
"去年今日此门中,",
"人面桃花相映红。
",
"人面不知何处去,",
"桃花依旧笑春风。
"
};
/*****************************************
*毫秒级延时函数
******************************************/
voidDelay_ms(ucharms)
{
uchari,j;
for(i=ms;i>0;i--)
for(j=112;j>0;j--);
}
/*****************************************
*检测12864是否忙标志位
******************************************/
bitCheck_12864_busy()
{
bitfgbusy;//忙标志位名称
LCD_RS=0;//命令选择
LCD_RW=1;//液晶读控制
LCD_EN=1;//使能开
_nop_();//空指令
fgbusy=(bit)(LCD_data&0x80);//获取忙碌标志BF的值,BF=1忙
LCD_EN=0;//使能关
returnfgbusy;//返回标志位数值,判断12864内部动作是否完成
}
/*****************************************
*向12864写命令
******************************************/
voidWrite_12864_cmd(ucharcmd)
{
while(Check_12864_busy());//忙则一直等待
LCD_RS=0;//命令选择
LCD_RW=0;//液晶写控制
LCD_data=cmd;//发送命令
LCD_EN=1;//使能开
_nop_();//空指令
_nop_();
LCD_EN=0;//使能关
}
/*****************************************
*向12864写要显示的数据
******************************************/
voidWrite_12864_data(uchardat)
{
while(Check_12864_busy());//忙则一直等待
LCD_RS=1;//数据选择
LCD_RW=0;//液晶写控制
LCD_data=dat;//发送数据
LCD_EN=1;//使能开
_nop_();//空指令
_nop_();
LCD_EN=0;//使能关
}
/*****************************************
*12864初始化
******************************************/
voidinit_12864()
{
LCD_PSB=1;//8位并口方式
Write_12864_cmd(0x30);//扩充指令集设置:
8位设置,RE=0:
基本指令集设置,G=0:
绘图显示OFF
Delay_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);
}
voiddisplay_row(ucharrow)//显示一行文字
{
uchari=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++;
}
}
voidmain()
{
ucharrow;
init_12864();//调用12864初始化函数
while
(1)
{
for(row=0;row<4;row++)//依次显示4行文字
display_row(row);
}
}
代码写好后,单击
按钮,打开{OptionsforTarget}对话框,点选{Target}选项卡,在{Xtal(MHz):
}后面的框格里,填写"12.0",设置单片机的频率为12M,如下图
点选{Output}选项卡,勾选{CreateHEXFile}前面的复选框,如下图
编译时生成.HEX文件。
单击OK按钮,关闭对话框。
单击全部编译
按钮,结果如下
0错误,0警告,编译通过,并生成12864graphicLCDparalleldisplay.HEX文件。
把12864graphicLCDparalleldisplay.hex文件添加到AT89C52。
仿真:
单击仿真进程控制按钮
里面的运行按钮
,查看仿真结果。
四、操作实验箱
(1)硬件连接
采用USBISP下载方式,下载器如下图,实验箱采用USB窃电,无需外接电源
将下载器一端连接USB接口,如下图,指示灯亮
另一端连接“单片机核心板”的ISP插座(防呆的),如下图
单片机核心板上单片机引脚EA需要拉高,拉高选择单片机内部程序执行,而不是外部程序执行,如下图
(2)软件操作
双击“烧录软件”文件夹下
图标,打开软件烧录界面,如下图
在SelectChip下面选择AT89S52芯片
,其它默认。
单击右侧“文件”下的
图标按钮,如图
,打开文件选取对话框,选取"12864graphicLCDparalleldisplay.hex"文件,如下图
单击
图标按钮,回到软件烧录界面,下面空白处显示调入Flash文件:
matrixkeyboard.hex。
如下图
单击
图标按钮,下面空白处显示1:
擦除,写Flash,效验Flash,成功,(2015/12/2217:
06:
38),如下图
下载完成。
(3)“单片机核心板”模块连接“LCD12864”模块。
将“单片机核心板”模块上的“12864-1”接线座与“LCD12864”模块上的“12864-1”接线座相连;
将“单片机核心板”模块上的“12864-2”接线座与“LCD12864”模块上的“12864-2”接线座相连.
操作程序的运行状况。
五、作业练习
1、改动LCD12864液晶并口显示代码,让12864显示图形。