实验一LCD实验.docx
- 文档编号:26930472
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:47
- 大小:510.31KB
实验一LCD实验.docx
《实验一LCD实验.docx》由会员分享,可在线阅读,更多相关《实验一LCD实验.docx(47页珍藏版)》请在冰豆网上搜索。
实验一LCD实验
电子信息专业实验报告
课程:
数字信息技术专业实验
题目:
LCD实验
学生:
茹滋岩(2012141451109)
张书恺(2012141451007)
蒋正东(2012141451)
邓童虎(2012141451)
组号:
5
点阵型12864液晶的使用
【实验目的】
熟悉点阵型128*64液晶显示器的驱动电路及使用方法。
掌握用AT89S52来控制液晶显示器的方法
掌握用扫描法识别矩阵按键的方法
进一步熟悉EDA实验平台
【实验器材】
EDA实验箱、PC机、DB25-ISP下载线、USB转换线、USB-BLASTER编程器等
软件:
QuatusII、KeiluVision2、ISPlay等。
【实验原理】
单片机简介
在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。
Intel公司首先推出了MCS-51系列单片机:
集成8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。
寻址范围64K,并有控制功能较强的布尔处理。
80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。
当前常用的80C51系列单片机主要产品厂商有:
Intel、ATMEL、Philips、华邦、Dallas、STC、Siemens(Infineon)等。
实验板上使用的AT89S52是与MCS-51单片机产品兼容的产品,它具有8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作、0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器等功能。
各管脚功能简介如下:
P0口:
P0口是一个8位漏极开路的双向I/O口。
需要指出的是,在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
引脚号第二功能:
P1.0T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5MOSI(在系统编程用)
P1.6MISO(在系统编程用)
P1.7SCK(在系统编程用)
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
端口引脚第二功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INTO(外中断0)
P3.3INT1(外中断1)
P3.4TO(定时/计数器0)
P3.5T1(定时/计数器1)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
RST——复位输入(高电平复位)
ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
PSEN——程序储存允许(PSEN)
EA/VPP——外部访问允许,访问外部程序存储器,EA端保持低电平。
EA端为高电平,执行内部程序存储器的指令。
液晶简介
液晶作为显示器件广泛应用于各种电子仪器、便携设备上,点阵液晶可以方便的显示各种字符、图片。
WGM12864H液晶显示模块采用三星公司的KS0107液晶控制器,能够显示128*64像素图形或4行16*16中文字符。
一.系统硬件电路
1.WGM12864H液晶模块
2.WGM12864H操作指令
(1)显示开关控制。
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
1
1
1
1
1
D
此命令用于控制液晶显示器开关。
D=1:
显示开。
显示器可以进行各种显示操作。
D=0:
显示关。
不能对显示器进行各种显示操作。
开显示时,液晶模块DDRAM的内容显示在LCD屏幕上,控制显示器的开关并不影响DDRAMA中的数据和内部状态。
(2)设置显示起始行。
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
1
A5
A4
A3
A2
A1
A0
WGM12864H液晶模块共有64行,由Z地址计数器进行控制。
Z地址计数器是一个六位计数器A5:
A0,此计数器具有循环计数功能,它是用于行扫描同步,当一行扫描完成时此计数器自动加一,指向下一行扫描数据,RST复位后Z计数器为0。
起始行可以是64行中的任一行,如设置A5:
A0为62,则起始行于DDRAM中的行对应关系如下:
DDRAM的行
62
63
0
1
2
3
……
60
61
显示的行
1
2
3
4
5
6
……
63
64
此命令常用于滚动显示文本/图像信息。
(3)设置页地址。
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
0
1
1
1
A2
A1
A0
WGM12864H液晶显示屏的128*64点阵与DDRAM的128*64位显存相对应,如下图所示:
X地址计数器为DDRAM的页指针。
所谓页地址就是DDRAM的行地址,8行为页。
WGM液晶显示器共64行,即8页,A2:
A0表示0~7页。
读写数据对页地址没有影响,页地址由本指令或RST信号改变,复位后页地址为0。
(4)设置列地址。
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
1
A5
A4
A3
A2
A1
A0
Y地址计数器为DDRAM列指针。
DDRAM共128列,分为左右两屏,每屏列地址均编址为0-63。
此指令将A5:
A0送入Y地址计数器,作为DDRAM的Y地址指针。
在对DDRAMA进行读写操作后,Y地址指针自动加一,指向下一个DDRAM单元。
当Y地址计数器计数到63后,自动翻转为当前屏的0列。
(5)写显示数据。
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
1
D7
D6
D5
D4
D3
D2
D1
D0
D7-D0为显示数据,此指令把D7-D0写入相应DDRAM单元,Y地址指针自动加一。
(6)读状态。
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
0
BF
0
ON/OFF
RST
0
0
0
0
当R/W=1、D/I=0、E=1时,状态分别输出到数据总线DB7-DB0相应位置。
BF:
BF标志提供内部工作情况。
BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。
BF=0时模块为准备状态,随时可接受外部指令和数据。
ON/OFF:
表示显示器开关触发器状态。
RST:
RST=1表示内部正在进行初始化,此时模块不接受外部指令和数据。
(7)读显示数据。
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
1
D7
D6
D5
D4
D3
D2
D1
D0
当R/W=1、D/I=1、E=1时,此时DDRAM相应单元数据被输出到数据总线DB7-DB0相应位置,Y地址指针自动加一。
使用此12864液晶时,数据总线DB7-DB0分别接单片机的Px.7-Px.0,R/W、D/I、CS1、CS2、RST分别接单片机其它五个IO口进行控制。
液晶其它引脚按引脚功能图上接线即可。
3.4*4矩阵键盘模块
键盘电路图如下:
这是一种简单的非编码键盘,线路简单,识别可靠。
4条行线、4条列线分别接单片机IO口,列线上加上拉电阻,提高抗干扰性。
在行列交叉点接入16个按键。
由于按键数量较多,没有给每一个按键单独加防抖电路,防抖功能依靠软件上延时实现。
键盘工作原理:
先给行线、列线赋1,然后给某一个列线赋0,检查行线,若某一行线为0,则表示有按键被按下,此时进行约10ms的延时,再次判断是否有按键被按下。
确认有按键被按下后,根据赋0的列线和检测到为0的行线即可唯一确定被按下的是哪个键。
然后所有线赋1,再给另外一列赋0,以后的工作同上。
这样逐列扫描键盘即可。
软件中给这每个键赋不同的值,即可识别出16个按键。
如果扫描时间足够短,使用这种逐列扫描的方式可以有效识别所按按键。
4.单片机的基本工作电路
单片机的基本工作电路同以上几例,在此不再赘述。
二.系统主要程序设计
1.4*4行列式16键键盘扫描程序流程图
2.主程序流程图
三.完整源程序
参考程序如下:
/********************************************************************/
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineulongunsignedlong
#definelcdbusP0
sbitlcddi=P1^0;
sbitlcdrw=P1^1;
sbitlcde=P1^4;
sbitlcdcs1=P1^2;
sbitlcdcs2=P1^3;
sbitlcdbf=P0^7;
/********************************************************************/
ucharcodetitle[]=
{
/*--文字:
--*/
/*--宋体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,
/*--文字:
请--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x40,0x42,0x4C,0xC4,0x00,0x22,0xAA,0xAA,0xAA,0xBF,0xAA,0xAA,0xAA,0x22,0x20,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0xFF,0x0A,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00,
/*--文字:
输--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x44,0xF4,0x4F,0xE4,0x44,0x64,0x90,0x98,0x94,0x93,0x14,0x98,0x08,0xD0,0x10,0x00,
0x04,0x04,0x04,0xFF,0x02,0x02,0xFF,0x4A,0x8A,0x7F,0x00,0x3F,0x80,0xFF,0x00,0x00,
/*--文字:
入--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x00,0x00,0x00,0x01,0x83,0x76,0x18,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x03,0x04,0x18,0x30,0x10,0x00,
/*--文字:
数--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,
0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00,
/*--文字:
据--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x08,0x08,0x08,0xFF,0x88,0x40,0xFE,0x92,0x92,0x92,0xF2,0x92,0x92,0x9E,0x80,0x00,
0x02,0x42,0x81,0x7F,0x40,0x30,0x0F,0xFC,0x44,0x44,0x47,0x44,0x44,0xFC,0x00,0x00,
/*--文字:
:
--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--文字:
--*/
/*--宋体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,
};
ucharcodekey[]=
{
/*--文字:
0--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*--文字:
1--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*--文字:
2--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,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,
/*--文字:
6--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*--文字:
7--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*--文字:
8--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*--文字:
9--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*--文字:
.--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
/*--文字:
+--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,
/*--文字:
---*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
/*--文字:
*--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,
/*--文字:
/--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,
/*--文字:
*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/********************************************************************/
voiddelay10ms()
{
uchari,j;
for(i=50;i>0;i--)
for(j=250;j>0;j--);
}
/********************************************************************/
voiddelayus(uintn)
{
while(n--);
}
/********************************************************************/
ucharscankey()//P2口(p2.0~p2.3列p2.4~p2.7行)列接上拉电阻
{
ucharkey,rk;
ucharbz=1;//当有按键按下后,此标志置零,以此确定有按键被按下,并送显示。
lcdrw=1;lcde=1;//将LCD使能端置一,防止对按键扫描干扰,LCDRW端置一,防止对已显示数据干扰。
do{
P2=0xff;
P2_0=0;
key=P2&0xF0;
if(key!
=0xF0)
{
delay10ms();
key=P2&0xF0;
if(key!
=0xF0)
{
switch(key)
{
case0xe0:
key=0;break;
case0xd0:
key=4;break;
case0xb0:
key=8;break;
case0x70:
key=12;break;
}
bz=0;rk=key;
key=key&0xF0;
while(key!
=0xF0)
{
key=P2;
key=key&0xF0;
}
delayus(800);
}
}
P2=0xff;
P2_1=0;
key=P2;
key=key&0xf0;
if(key!
=0xf0)
{
delay10ms();
key=P2&0xf0;
if(key!
=0xf0)
{
switch(key)
{
case0xe0:
key=1;break;
case0xd0:
key=5;break;
case0xb0:
key=9;break;
case0x70:
key=13;break;
}
bz=0;rk=key;
key=key&0xf0;
while(key!
=0xf0)
{
key=P2;
key=key&0xf0;
}
delayus(800);
}
}
P2=0xff;
P2_2=0;
key=P2;
key=key&0xf0;
if(key!
=0xf0)
{
delay10m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 LCD