您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页LCD实验

LCD实验

来源:纷纭教育
点阵型128液晶的使用

【实验目的】

熟悉点阵型128*液晶显示器的驱动电路及使用方法。 掌握用ATS52来控制液晶显示器的方法 掌握用扫描法识别矩阵按键的方法 进一步熟悉EDA实验平台

【实验器材】

EDA实验箱、PC机、DB25-ISP下载线、USB转换线、USB-BLASTER编程器等 软件:Quatus II 、Keil uVision2、ISPlay等 。

【实验原理】

液晶作为显示器件广泛应用于各种电子仪器、便携设备上,点阵液晶可以方便的显示各种字符、图片。WGM128H液晶显示模块采用三星公司的KS0107液晶控制器,能够显示128*像素图形或4行16*16中文字符。 一. 系统硬件电路

1. WGM128H液晶模块

2. WGM128H操作指令

(1) 显示开关控制。

R/W 0 D/I 0 DB7 0 DB6 0 DB5 1 DB4 1 DB3 1 DB2 1 DB1 1 DB0 D 此命令用于控制液晶显示器开关。

D=1:显示开。显示器可以进行各种显示操作。

D=0:显示关。不能对显示器进行各种显示操作。

开显示时,液晶模块DDRAM的内容显示在LCD屏幕上,控制显示器的开关并不影响DDRAMA中的数据和内部状态。

(2) 设置显示起始行。

R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 1 A5 A4 A3 A2 A1 A0 0 WGM128H液晶模块共有行,由Z地址计数器进行控制。Z地址计数器是一个六位计数器A5:A0,此计数器具有循环计数功能,它是用于行扫描同步,当一行扫描完成时此计数器自动加一,指向下一行扫描数据,RST复位后Z计数器为0。起始行可以是行中的任一行,如设置A5:A0为62,则起始行于DDRAM中的行对应关系如下:

DDRAM的行 显示的行 62 1 63 2 0 3 1 4 2 5 3 6 „„ „„ 60 63 61 此命令常用于滚动显示文本/图像信息。 (3) 设置页地址。

R/W 0 D/I 0 DB7 1 DB6 0 DB5 1 DB4 1 DB3 1 DB2 A2 DB1 A1 DB0 A0 WGM128H液晶显示屏的128*点阵与DDRAM的128*位显存相对应,如下图所示:

X地址计数器为DDRAM的页指针。所谓页地址就是DDRAM的行地址,8行为页。WGM液晶显示器共行,即8页,A2:A0表示0~7页。读写数据对页地址没有影响,页地址由本指令或RST信号改变,复位后页地址为0。

(4) 设置列地址。

R/W 0 D/I 0 DB7 0 DB6 1 DB5 A5 DB4 A4 DB3 A3 DB2 A2 DB1 A1 DB0 A0 Y地址计数器为DDRAM列指针。DDRAM共128列,分为左右两屏,每屏列地址均编址为0-63。此指令将A5:A0送入Y地址计数器,作为DDRAM的Y地址指针。在对DDRAMA进行读写操作后,Y地址指针自动加一,指向下一个DDRAM单元。当Y地址计数器计数到63后,自动翻转为当前屏的0列。

(5) 写显示数据。

R/W 0 D/I 1 DB7 D7 DB6 D6 DB5 D5 DB4 D4 DB3 D3 DB2 D2 DB1 D1 DB0 D0 D7-D0为显示数据,此指令把D7-D0写入相应DDRAM单元,Y地址指针自动加一。 (6) 读状态。

R/W 1 D/I 0 DB7 BF DB6 0 DB5 ON/OFF DB4 RST DB3 0 DB2 0 DB1 0 DB0 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 1 D/I 1 DB7 D7 DB6 D6 DB5 D5 DB4 D4 DB3 D3 DB2 D2 DB1 D1 DB0 D0 当R/W=1、D/I=1、E=1时,此时DDRAM相应单元数据被输出到数据总线DB7-DB0相应位置,Y地址指针自动加一。

使用此128液晶时,数据总线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键键盘扫描程序流程图

开始 行列全赋1 第一列置0 行线全为1? N 读入IO口查表对照求出键返回键值 Y 行列全赋1 第二列置0 行线全为1? N 读入IO口查表对照求出键返回键值 Y 行列全赋1 第三列置0 N 行线全为1? 读入IO口查表对照求出键返回键值 Y 行列全赋1 第四列置0 行线全为1? N 读入IO口查表对照求出键返回键值 Y 子程序返回

2. 主程序流程图

三. 完整源程序 参考程序如下:

/********************************************************************/ #include< atx51.h> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long

#define lcdbus P0

sbit lcddi=P1^0; sbit lcdrw=P1^1; sbit lcde=P1^4; sbit lcdcs1=P1^2; sbit lcdcs2=P1^3; sbit lcdbf=P0^7;

/********************************************************************/ uchar code title[]= {

/*-- 文字: --*/

/*-- 宋体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,0x,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, } ;

uchar code key[]= {

/*-- 文字: 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, } ;

/********************************************************************/ void delay10ms() { uchar i,j; for(i=50;i>0;i--) for(j=250;j>0;j--); }

/********************************************************************/ void delayus(uint n) { while(n--); }

/********************************************************************/ uchar scankey() // P2口(p2.0~p2.3列p2.4~p2.7行) 列接上拉电阻 {

uchar key,rk; uchar bz=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) { case 0xe0:key=0;break; case 0xd0:key=4;break; case 0xb0:key=8;break; case 0x70: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) { case 0xe0:key=1;break; case 0xd0:key=5;break; case 0xb0:key=9;break; case 0x70: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) { delay10ms(); key=P2&0xf0; if(key!=0xf0) { switch(key) { case 0xe0:key=2 ;break; case 0xd0:key=6 ;break; case 0xb0:key=10;break; case 0x70:key=14;break; } bz=0;rk=key; key=key&0xf0; while(key!=0xf0) { key=P2; key=key&0xf0; } delayus(800); } }

P2=0xff; P2_3=0; key=P2;

key=key&0xf0; if(key!=0xf0) { delay10ms(); key=P2&0xf0; if(key!=0xf0) { switch(key) { case 0xe0:key=3;break; case 0xd0:key=7;break; case 0xb0:key=11;break; case 0x70:key=15;break; } bz=0;rk=key; key=key&0xf0; while(key!=0xf0) { key=P2; key=key&0xf0; } delayus(800); } }

}while(bz==1); bz=1;

return (rk) ;

/********************************************************************/ void writeinst(uchar x) //写指令 { lcdrw=0; lcddi=0; lcde=1;//P2_3=1; lcdbus=x; delayus(5); lcde=0; }

/********************************************************************/ void writedata(uchar x) //写送显数据 { lcdrw=0; lcddi=1; lcde=1;//P2_3=1; lcdbus=x; delayus(5); lcde=0; }

/********************************************************************/ void clr() //清屏 { uchar x=0,y=0; lcdcs1=1; lcdcs2=1; for(x=0;x<8;x++) { writeinst(0xb8+x); writeinst(0x40); for(y=0;y<;y++) writedata(0x00); } }

/********************************************************************/ void sethang(uchar x)//设置显示其实行。 { lcdcs1=1; lcdcs2=1; writeinst(0xc0+x%); }

/********************************************************************/ void LCDInit() { clr(); writeinst(0xb8); //定位到第0页 writeinst(0x40); //定位到第0列 writeinst(0x3f); //开显示 }

/********************************************************************/ void display16_16(uchar x,uchar y,uchar code * buff) //在第X 页第Y列 显示16*16字符 { uchar j; if(y<=63) { lcdcs1=1; lcdcs2=0; }

if(y>=) { lcdcs2=1; lcdcs1=0; } writeinst(0xb8+x); writeinst(0x40+y%); for(j=0;j<16;j++) writedata(*(buff+j)); writeinst(0xb9+x); writeinst(0x40+y%); for(j=16;j<32;j++) writedata(*(buff+j)); }

/********************************************************************/

void display8_16(uchar x,uchar y,uchar code * buff) //在第X 页第Y列 显示8*16字符 { uchar j; if(y<=63){lcdcs1=1;lcdcs2=0;} if(y>=){lcdcs1=0;lcdcs2=1;} writeinst(0xb8+x); writeinst(0x40+y%); for(j=0;j<8;j++) writedata(*(buff+j)); writeinst(0xb9+x); writeinst(0x40+y%); for(j=8;j<16;j++) writedata(*(buff+j)); }

/********************************************************************/ void main() { uchar i=0,j=0,k=0; EA=0; LCDInit(); sethang(0);//设置显示其实行为各页第一行。 P2=0XFF;//将FPGA中与门的另一路输入置1,防止对LCD使能端干扰 for(i=0;i<8;i++) { display16_16(0,i*16,title+i*32); } i=0;j=0; while(1) { for(i=2;i<8;i+=2)//页控制 { for(j=0;j<16;j+=1)//列控制 { k=scankey(); if(k==15) { j-=2; sethang(0); P2=0XFF; display8_16(i,(j+1)*8,key+k*16); } else { sethang(0); P2=0XFF;

display8_16(i,j*8,key+k*16); } } if(k==15)i-=2; } delayus(50000); LCDInit(); sethang(0); for(i=0;i<8;i++) { display16_16(0,i*16,title+i*32); } } }

/********************************************************************/

【实验内容】

一. 电路连线提示

本实验中使用FPGA连接液晶、键盘、单片机,FPGA的内容本实验不做要求,在此简要阐明本实验中所用数据线及其在FPGA内部的联系。

FPGA内部联系如图:

各引脚对应关系如下图:

从图中可看出,LCD的使能端与键盘第四列公共一个物理线路“KEYS0/LCD”,所以在FPGA内部用一个与门联系两个输入,两个输入分时控制这个公共线路。FPGA中其他线路可以近似看做从“input”到“output”的单向“导线”。 二. 实验步骤:

1. FPGA板插入底板,通过USB-blaster连接电脑。ATS52单片机的ISP下

载线连接电脑并口,并与底板连接。安装FPGA实验板时注意方向,使FPGA板子的开关在做左手边。注意引脚都要插入FPGA板子下面的排孔里,不要错位。

2. 打开EDA底板电源。

3. 将“桌面\\EDA实验-51部分-LCD实验\\底板驱动”路径下 “LCD128.qpf”

文件烧入FPGA中。

具体步骤如下:

a) 用USB转换线将 USB BLASTER 与PC机相连,USB BLASTER的

另一端连接到FPGA核心板右下角J12口。如果连接正常,USB BLASTER绿灯点亮。

b) 双击“桌面\\EDA实验-51部分-LCD实验\\底板驱动”路径下

“LCD128.qpf”文件,启动Quartus II;

c) 单击菜单栏中 Tools\\Programmer ,打开FPGA程序下载窗口;

d) 单击界面右上角“Hardware Setup”,在“Currently selected Hardware”

下拉列表中选择“USB-Blaster[USB-0]”,激活USB-Blaster,单击“close”关闭;

e) 单击“Add File”,路径选择“桌面\\EDA实验-51部分-LCD实验\\底

板驱动”,选中文件“LCD1602.sof”,勾选Program/Configure;

f) 给EDA主板供电,单击“start”,将底板驱动程序烧录到FPGA中。

烧录后不要将此程序关掉,也不要断电,否则程序会丢失,需要重新烧录。

4.

生成HEX文件

具体步骤如下:

a) 单击“开始\\程序”,启动Keil uVision2;

b) 单击“Project\\New Project”,创建新工程;

c) 新工程保存路径为“桌面\\EDA实验-51部分-LCD实验\\程序一”,工

程名设为“工程一”,单击“保存”;

d) 在弹出的“器件选择窗口”中,

选择“Atmel\\ATS52”,单击“确定”;

e) 右键单击窗口右边列表栏中“Source Group 1”,选择“Add File to Group ‘Source Group 1’”;

f) 选中“桌面\\EDA实验-51部分-LCD实验\\程序一”路径下“程序一.c”,

单击“Add”,然后单击“close”;

g) 双击“程序一.c”,打开该文件。

h) 单击窗口左上角“Build Target”按键,编译程序一; i) 单击窗口左上角图标

HEX…”,单击“确定”。

,选中“output”面板,选中“Creative

j) 再次单击窗口左上角“Build Target”按键,将生成“程序二.Hex”

文件;

k) 在路径“桌面\\EDA实验-51部分-LCD实验\\程序一”下,已经生成

“程序一.Hex”文件。

5. 将 程序一.hex 烧入单片机 具体步骤如下:

a) 用DB25-ISP下载线连接单片机ISP程序下载口(EDA主板右下角

J15口)和PC机并口,EDA主板右下角S8拨码开关全部拨向ON;

b) 在桌面双击图标

,启动ISPlay;

c) 单击“检测器件”,听到“嘀嘀嘀”,表示器件检测成功; d) 单击“文件”,选择“桌面\\EDA实验-51部分-LCD实验\\程序一”路

径下“程序一.hex”,单击“打开”;

e) 单击“AUTORUN!”,完成程序的下载;下载完成会听到“嘀嘀嘀”

的响声。

6. 此时128显示器上应该出现“请输入数据:”。现在就可以按下4*4矩阵

键盘上任意键,观察实验现象。按照底板上标志的各按键,填入表一各单元左下角。

表一 按键显示记录 1 2 3 0 4 8 C 5 9 D 6 A E 7 B F 7. 程序分析与改进 目前Main函数中对显示器的控制还不够完善,如果认为有待改进的语句,请改写源程序,改写后的程序不能出现错误,不能减少程序功能。(提示:目前

最大的缺陷是清除键,在清除到当前行第一个字符位后,再按清除键,不能继续清除上一行。)

三. 设计性实验 设计一个128的lcd显示程序,要求能完成按一个按矩阵键盘的按键来显示自己的姓名和学号,按另外一个按键清除lcd显示。

【实验注意事项】

1. ISP下载线与底板连接的插口下方有“MCU

DISABLE”跳线,一定要将此跳线帽拔下,否则MCU将不可用。

2. 单片机上方有一小块带8*8点阵的线路板,实验时请将此板拔下,否则将对显示器产生不利影响。 3. FPGA中写入逻辑后不要将“Quartus Ⅱ”关掉,否则FPGA将不可用,此实验亦无法完成。

4. 实验中不可断电,否则应重新给FPGA写入逻辑。 5. 底板的模式请设置成“3”,否则键盘将不可用,或

者显示容易出错。模式显示如右图数码管位置。

【实验要求】

1. 根据实验内容,填写表1。

2. 分析程序,按要求将修改后的关键部分程序代码记录在报告上,并将程序编译运行烧录到单片机内,记录运行结果。 3. 记录实验后的收获和体会。

【思考与练习】

1. 简述WGM128H的引脚定义及作用。

2. 给液晶模块写命令和写数据之间有什么不同?

3. 单片机与液晶模块、单片机与矩阵按键之间是靠什么联系的?这样做有什么

优点与缺陷?

4. 为什么键盘接口在FPGA中的映射要设置成一部分输入,另一部分输出? 5. 按键扫描程序中“delay10ms();”起什么作用?

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务