实验一LCD实验.docx

上传人:b****4 文档编号:26930472 上传时间:2023-06-24 格式:DOCX 页数:47 大小:510.31KB
下载 相关 举报
实验一LCD实验.docx_第1页
第1页 / 共47页
实验一LCD实验.docx_第2页
第2页 / 共47页
实验一LCD实验.docx_第3页
第3页 / 共47页
实验一LCD实验.docx_第4页
第4页 / 共47页
实验一LCD实验.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

实验一LCD实验.docx

《实验一LCD实验.docx》由会员分享,可在线阅读,更多相关《实验一LCD实验.docx(47页珍藏版)》请在冰豆网上搜索。

实验一LCD实验.docx

实验一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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1