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显示图形。