FPGA实验之1602字符液晶设计

FPGA实验之1602字符液晶设计
FPGA实验之1602字符液晶设计

FPGA实验之1602字符液晶设计

1. 实验目的:

通过本次实验,掌握使用HDL语言操作1602字符液晶的方法。

2. 实验原理:

(1)1602字符液晶简介

上一课我们学会了LED数码管的原理及使用,下面,我们再来学习字符型液晶模块的使用。液晶屏显示模块与数码管相比,它显得更为与业、漂亮。液晶显示屏以其微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,在通讯、仪器仪表、电子设备、家用电器等低功耗应用系统中得到越来越广泛的应用,使这些电子设备的人机界面变得越来越直观形象,目前已广泛应用与电子表、计算器、IC卡电话机、液晶电视机、便携式电脑、掌上型电子玩具、复印机、传真机等许多方面……

1602字符液晶在实际的产品中运用的也比较多了。而且对于FPGA的学习而言,掌握最常见的液晶屏1602的驱动与用法是每一个学习者必然要经历的过程。所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多数是基于SPLC780C液晶芯片的,控制原理是完全相同的,因此基于SPLC780C 写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

目前市面上最常见的1602液晶背光主要有两种,一种是普通的黄绿色背光,黑色的文字。另一种显示屏是蓝色背光白色字体,如下图所示。前者使用更加广泛,成本低廉。后者显示的效果更加美观,但是价格也相对较高。此外还分别有单芯片与双芯片的版本。LCD背面的黑块内部就封装了控制芯片,市面上许多低廉的1602都是单芯片驱动,性能不稳定,双芯片的价格要上高一些,但是稳定性要远远好于单芯片的1602。本实验板采用了深圳亚斌电子有限公司生产的蓝色背光的双芯片YB1602A 液晶模块。YB1602A采用COB工艺制作,结构稳定,使用寿命长,可以应用于智能仦器仦表,通讯,办公自动化以及军工领域。

1602液晶的正面(绿色背光,黑色字体)

1602液晶的背面(绿色背光,黑色字体)

YB1602A主要特性如下:

◆8位并行数据接口,适配M6800系列时序;

◆可选4位并行数据方式;

◆具有字符发生器ROM,含10880位;

◆192 种5×8 点字体字符;

◆64 种5×10 点字体字符;

◆具有字符发生器RAM,含512位;

◆8 种5×8 点字体字符;

◆4 种5×10 点字体字符;

◆低功耗,高可靠性。

字符型LCD1602通常有14条引脚线或者16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:

根据上述引脚定义可知,实验板上的1602原理图部分如下连接。其中电位器是用来调节LCD的对比度。 VCC-VEE的点位差在4.5V以上,显示字符清晰。

(2)控制器的操作时序说明

ZRtech的教材1602的控制器为SPLC780C,

自己使用的是长沙太阳人的1602液晶,控制器名字叫HD44780,功能都是一样的。

HD44780控制时序表如下图所示:

E=高脉冲,在E的时序下降沿的时候出发

对于液晶屏来说,主要的功能还是作为一种输出设备,所以我们主要掌握的应该是写时序:R/W=L,向液晶写入数据

在进行写操作的时候,RW要置为0,RS根据写的内容不同(指令或数据)置为1或0,同时,大家注意C和D两根红线,我们在将E置为1之前,要先将数据送到数据口上,然后,在C位置,将E置为1,经过tPW延时后,再将E置为0,在这个时间段内必须保证数据口上的数据稳定不变,为有效的数据。同理,由于tPW这些延时相对较短(ns级),所以在程序里也不必考虑延时问题。

主要看写操作,在整个程序里LCD_E控制了整个液晶屏的E端,这就意味着如果LCD_E 在高电平的时候,那么上一个时钟下降沿送入的数据就被送到了LED屏,LCD_E在低电平的时候才显示出来。

时序参数

由以上时序可以看到,如果要写入指令或者数据,首先要使RS与R/W线的电平变化,RS 的高低分别表示即将写入的是数据还是指令。R/W 分别控制是读写,对于写,则R/W 应该保持为低电平。然后在确保RS、RW 稳定后送入使能信号E使之为高电平,在使能信号稳定后,就可以在数据线D0-D7上送入需要写入的命令或者数据了。对于一次读写操作,最短的周期在500-1000ns,也就是不到 1 微秒,这个时间是足够短了。实际使用时,可以适当放慢写入的速度,也可以足够时间显示了,并可以达到理想的效果。

(3)控制器的控制方式

控制器SPLC780内置了DDRAM(显示数据存储器)、CGROM(自定义字符存储器)和AC(地址指针计数器)。CGROM的功能主要是存储用户自定义的字符,在这里我们主要介绍AC和DDRAM:

地址指针计数器AC是可读可写计数器。他是DDRAM和CGRAM共用的地址指针计数器,由当前的最近写入的地址设置指令的标识码来确定。可设置成加一计数器和减一计数器,当读/写操作后地址指针计数器会自动进行修正。AC 还作为光标和闪烁的位置地址指针,指示当前光标和闪烁的位置地址。

DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:

也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H 地址写入“A”字的代码就行了。

但具体的写入是要按LCD模块的指令格式来进行的,后面我们会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如上图。

事实上往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。依次类推。大家看一下控制指令的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,就能看到字母“A” 。

字符代码0x00~0x0F为用户自定义的字符图形RAM(对与5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。后面我会详细说的。

0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。

那么如何对DDRAM的内容和地址进行具体操作呢,下面会详细介绍SPLC780C的指令集。(4)控制器的指令集

下面来介绍SPLC780C的指令集及其设置说明,请浏览该指令集,并找出对DDRAM的内容和地址进行操作的指令。共11条指令:

下面逐一进行说明:

1. 清屏指令(Clear Display,代码01H)

功能:<1> 清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII码20H;

<2> 光标归位,即将光标撤回液晶显示屏的左上方;

<3> 将地址计数器(AC)的值设为0。

该指令多用于上电时或者更新全屏显示内容时。

2. 光标归HOME位指令(Return Home,代码02H)

功能:<1> 把光标撤回到显示器的左上方;将光标或闪烁位返回到显示屏的左上第一字符位上,即DDRAM 地址00H 单元位置;这是因为光标和闪烁位都是以地址指针计数器AC 当前值定位的。如果画面已滚动,则撤销滚动效果,将画面拉回到Home位。

<2> 把地址计数器(AC)的值设置为0;

<3> 保持DDRAM的内容不变

3. 进入模式设置指令,输入方式设置(Enter Mode Set,代码04H~07H)

该指令的功能在于设置显示字符的输入方式,即在CPU 读/写DDRAM 或CGRAM 后,地址指针计数器AC 的修改方式,反应在显示效果上,当写入一个字符后画面或光标的移动。该指令的两个参数I/D (N)和S 确定四种字符的输入方式,如下表所示:

注意:画面滚动方式在CPU 读DDRAM 数据时,或在读/写CGRAM 时无效,也就是说该指令主要应用在CPU 写入DDRAM 数据的操作时。

4. 显示开关控制指令(Display on/off Control,代码08H~0FH)

该指令控制着画面,光标与闪烁的开与关。该指令有三个状态位D、C、B,这三个状态位分别控制这画面,光标和闪烁的显示状态。

闪烁出现在有字符或光标显示的字符位时,正常显示态为当前字符或光标的显示,全亮显示态为该字符位所以点全部显示。若出现在无字符或光标显示的字符位时,正常显示态为无显示,全亮显示态为该字符位所有点全部显示。这种闪烁方式可以设计成块状光标,如同计算机显示器上块状光标闪烁提示符的效果。

该指令实现5 种状态如下表所示:

5. 设定显示屏和光标移动方向指令(Cursor or Display Shift,代码10H、14H、18H、1CH)

执行该指令将产生画面或光标向左或右滚动一个字符位。如果定时间隔地执行该指令将关闭画面或光标的平滑滚动。画面滚动是在一行内循环进行的,也就是说一行的第一个单元和最后一个人连接起来,形成闭环式滚动。画面滚动的显示效果如下所示:

功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:

6. 功能设定指令,工作方式设置(Function Set,代码30H)

该指令设置了控制器的工作方式,包括控制器与CPU 的接口形式和控制器显示驱动器的占空比系数等。该指令有3 个参数,组合功能如下表所示:

7. 设定CGRAM地址指令(40H~7FH)

该指令将 6 位的CGRAM 地址写入地址指针计数器AC 内,随后计算机对数据的操作是对CGRAM 的读/写。

8. 设定DDRAM地址指令(80H~FFH)

该指令将7 位的DDRAM 地址写入地址指针计数器AC 内,随后计算机对数据的操作是对DDRAM 的读/写。

(注意这里我们送地址的时候应该是0x80+Address,这也是前面说到写地址命令的时候要加上0x80的原因)

9. 读取忙信号或者AC地址指令

计算机对指令寄存器通道读操作即RS 为0、R/W 为1 时,将读出此格式的忙标志BF 值和7 位地址指针计数器AC 的值。

读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或者指令; 当BF=0时,液晶显示器可以接收单片机送来的数据或指令;

10. 数据写入DDRAM或者CGRAM指令一览(WriterData to CG or DDRAM)

CPU 向数据寄存器通道写入数据,SPLC780根据当前地址指针计数器AC 值的属性及数值将该数据送入相应的存储器的AC 所指的单元里。如果AC 值为DDRAM地址指针,则认为写入的数据是字符代码并送入DDRAM 的AC 所指单元里。如果AC 值为CGRAM 的地址指针,则认为写入的数据是自定义字符的字模数据并送入CGRAM 内AC所指的单元里。所以CPU 在写数据之前需要设置地址指针或人为的确认地址指针的属性及数值。在写入数据后地址指针计数器AC 将根据最近设置的输入方式最大修改。由此可知,CPU 在在写数据操作之前要做两项工作,其一是设置或确认地址指针计数器AC 值的属性及数值,以确保所写数据能够正确到位,其二是设置或确认输入方式,以确保连续写入数据时AC 值的修改方式符合要求。

11. 从CGRAM或者DDRAM读出数据的指令一览(Read Data From CG or DDRAM)

在SPLC780 的内部运行时序操作下,地址指针计数器AC 值的每一次修改,包括新的AC 值的写入,光标滚动位移所引起的AC 值的修改或由CPU 读写数据操作后所产生的AC 值的修改,SPLC780 都会把当前AC 所指单元的内容送到数据输出寄存器内,供CPU 读取。如果AC 值为DDRAM 地址指针,则认为读取的是DDRAM 内AC 所指的单元的字符代码,如果AC 值为CGRAM 的地址指针,则认为读取的是CGRAM 内AC 所指单元的自定义字符的字模数据。

(5)总结一下基本操作时序:

读状态输入:RS=L,RW=H,E=H

输出:DB0~DB7=状态字

写指令输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码

输出:无

读数据输入:RS=H,RW=H,E=H

输出:DB0~DB7=数据

写数据输入:RS=H,RW=L,E=下降沿脉冲

(E为高电平的时候,进行数据的写入),DB0~DB7=数据

输出:无

呵呵,看到这么多的控制指令希望你没有头晕。其实这么多的指令刚开始的时候没有必要全部掌握,随着学习的深入可以再尝试去用更复杂的控制指令。下面让我们一起插上1602 的液晶吧。当我们硬件连接错误,或者程序错误时就会出现情况:就是上排显示16的白色的块,别急!我们还没写程序呢,一起往下看吧。

3. 实验结果:

LCD1602显示如下字符。

4. 具体实现:

由于实验代码太长,详见程序代码。此程序用了状态机,对照以上的指令应该不难理解吧。主要就是开机等待后,

进行清屏指令;

然后进行功能设置,包括数据位,行,点阵模式。

接着设置显示状态开关,包括显示开关;光标开关;闪烁开关。

然后设置输入方式,滚动方式等等。设置完毕后就可以写DDRAM了,写完一行后要注意换行。

这里要注意的是:

比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)

具体实现代码:稳定复位版本:

[plain] view plaincopyprint?

/************************************************* //Module: lcd1602

//File Name: lcd1602.v

//Version: 2.0

//Date: 2011.12.14

//Author: wang li

//Code Type: RTL

//Description: LCD1602液晶显示

// clk——时钟输入(1位)

// rst——复位信号输入(1位)

// 输入看模块

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

module lcd1602(clk,rst,LCD_E,LCD_RW,LCD_RS,LCD_DATA);

input clk; //时钟信号,50Mhz

input rst; //复位信号,低电平进行复位

output LCD_E; //1602使能引脚,1时读取信息,1->0(下降沿)执行命令

output LCD_RS; //1602数据——H/命令——L 选择端

output LCD_RW; //1602写——L/读——H 选择端

output [7:0] LCD_DA TA; //1602数据传输端口

wire LCD_E;

reg [8:0] count;

reg clk_div1; //500个clk的周期,20ns*500=10us

reg clk_div2; //1000个,20us

reg [7:0] count1; //250个clk_div2的周期,20us*250=5000u=5ms

reg clk_buf;

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

//-----分频模块-----

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

always @(posedge clk or negedge rst)

begin

if(!rst) //rst=0

count<=0;

else

begin

if(count<250) //2500

begin

clk_div1<=0;

count<=count+1'b1;

end

else if(count>=500-1) //5000

count<=0;

else

begin

clk_div1<=1;

count<=count+1'b1;

end

end

end

always @(posedge clk_div1 or negedge rst) begin

if(!rst)

clk_div2<=0;

else

clk_div2<=~clk_div2;

end

always @(posedge clk_div2 or negedge rst) begin

if(!rst) //rst=0

begin

count1<=0;

clk_buf<=0; //

end

else

begin

if(count1<125) //2500

begin

clk_buf<=0;

count1<=count1+1'b1;

end

else if(count1>=250-1) //5000

count1<=0;

else

begin

clk_buf<=1;

count1<=count1+1'b1;

end

end

end

assign LCD_E=clk_buf;

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

//-----显示控制模块-----

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

reg [4:0] state; //当前状态寄存器 ,10个状态

reg [5:0] address; //地址的位置,0~31,

reg [7:0] LCD_DATA;

reg LCD_RW,LCD_RS;

parameter

IDLE = 4'd0, //空闲

CLEAR = 4'd1,

SET_FUNCTION = 4'd2, //工作方式设置指令

SWITCH_MODE = 4'd3, //开关控制指令

SET_MODE = 4'd4, //输入方式设置

SET_DDRAM1 = 4'd5, //设定第一行DDRAM地址指令 WRITE_RAM1 = 4'd6, //向第一行写入的数码

SET_DDRAM2 = 4'd7, //设定第2行DDRAM地址指令 WRITE_RAM2 = 4'd8, //向第2行写入的数码

SHIFT = 4'd9, //设定显示屏或光标移动方向指令

STOP = 4'd10;

reg [7:0] Data_First [15:0];

reg [7:0] Data_Second [15:0];

initial

begin

Data_First[0] = "H";

Data_First[1] = "e";

Data_First[2] = "l";

Data_First[3] = "l";

Data_First[4] = "o";

Data_First[5] = "!";

Data_First[6] = " ";

Data_First[7] = "-";

Data_First[8] = ">";

Data_First[9] = " ";

Data_First[10]= "Z";

Data_First[11]= "R";

Data_First[12]= "t";

Data_First[13]= "e";

Data_First[14]= "c";

Data_First[15]= "h";

Data_Second[0] = "w";

Data_Second[1] = "w";

Data_Second[2] = "w";

Data_Second[3] = ".";

Data_Second[4] = "Z";

Data_Second[5] = "R";

Data_Second[6] = "-";

Data_Second[7] = "t";

Data_Second[8] = "e";

Data_Second[9] = "c";

Data_Second[10]= "h";

Data_Second[11]= ".";

Data_Second[12]= "n";

Data_Second[13]= " ";

Data_Second[14]= " ";

Data_Second[15]= " ";

// Data_First[0] = "a";

// Data_First[1] = "b";

// Data_First[2] = "c";

// Data_First[3] = "d";

// Data_First[4] = "e";

// Data_First[5] = "f";

// Data_First[6] = "g";

// Data_First[7] = "h";

// Data_First[8] = "i";

// Data_First[9] = "j";

// Data_First[10]= "k";

// Data_First[11]= "l";

// Data_First[12]= "n";

// Data_First[13]= "m";

// Data_First[14]= "o";

// Data_First[15]= "p";

//

// Data_Second[0] = "Q"; // Data_Second[1] = "W"; // Data_Second[2] = "E";

// Data_Second[3] = "R";

// Data_Second[4] = "T";

// Data_Second[5] = "Y";

// Data_Second[6] = "U";

// Data_Second[7] = "A";

// Data_Second[8] = "S";

// Data_Second[9] = "D";

// Data_Second[10]= "F";

// Data_Second[11]= "G";

// Data_Second[12]= "Z";

// Data_Second[13]= "X";

// Data_Second[14]= "C";

// Data_Second[15]= "V";

end

//-----状态控制-----

always @(posedge clk_buf or negedge rst) // clk_div1 clk_buf begin

if(!rst)

begin

state<=IDLE;

address<=6'd0;

LCD_DATA<=8'b0000_0000;

LCD_RS<=0;

LCD_RW<=0;

end

else

begin

case(state)

IDLE: //空闲状态

begin

LCD_DA TA<=8'bzzzz_zzzz; //8'bzzzz_zzzz

state<=CLEAR;

end

CLEAR: //清屏指令

begin

LCD_RS<=0;

LCD_RW<=0;

LCD_DATA<=8'b0000_0001; //指令

state<=SET_FUNCTION;

end

SET_FUNCTION: //工作方式设置

begin

LCD_RS<=0;

LCD_RW<=0;

LCD_DATA<=8'b0011_1100; //38h

//第4位DL:0=数据总线为4位;1=数据总线为8位★★★

//第3位N:0=显示1行;1=显示2行★★★

//第2位F:0=5×7点阵/每字符;1=5×10点阵/每字符★★★

state<=SWITCH_MODE;

end

SWITCH_MODE: //显示开关控制指令

begin

LCD_RS<=0;

LCD_RW<=0;

LCD_DATA<=8'b0000_1111; //0Fh

//第2位D:0=显示功能关;1=显示功能开★★★

//第1位C:0=无光标;1=有光标★★★

//第0位B:1=光标闪烁;0=光标不闪烁★★★

state<=SET_MODE;

end

SET_MODE: //设定显示屏或光标移动方向指令

begin

LCD_RS<=0;

LCD_RW<=0;

LCD_DATA<=8'b0000_0110; //06h

//第1位N:0=读或者写一个字符后,地址指针-1,光标-1

// 1=读或者写一个字符后,地址指针+1,光标+1★★★

//第0位S:0=当写一个字符,整屏显示不移动★★★

// 1=当写一个字符,整屏显示左移(N=1)或者右移(N=0),以得到光标不移动而屏幕移动的效果

state<=SHIFT;

end

SHIFT: //设定显示屏或光标移动方向指令

begin

LCD_RS<=0;

LCD_RW<=0;

LCD_DATA<=8'b0001_0100;

//第3位S/C;第2位R/L

// S/C R/L 设定情况

// 0 0 光标左移1格,且地址指针值减1

// 0 1 光标右移1格,且地址指针值加1 ★★★

// 1 0 显示器上字符全部左移一格,但光标不动

// 1 1 显示器上字符全部右移一格,但光标不动

state<=SET_DDRAM1;

end

SET_DDRAM1: //设定第一行DDRAM地址指令

begin

LCD_RS<=0;

LCD_RW<=0;

//-----写入第一行显示起始地址:-----

// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

// 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 第一行

LCD_DATA<=8'h80+8'd0; //第一行第1个位置

address<=6'd0;

state<=WRITE_RAM1;

// Data_First_Buf<=Data_First;

end

WRITE_RAM1: //向第一行写入的数码

begin

if(address<=15) //表示写第一行

begin

LCD_RS<=1;

LCD_RW<=0;

LCD_DA TA<=Data_First[address];

// Data_First_Buf<=(Data_First_Buf<<8); //左移

address<=address+1'b1;

state<=WRITE_RAM1;

end

else

begin

LCD_RS<=0;

LCD_RW<=0;

LCD_DA TA<=8'h80+address;

state<=SET_DDRAM2;

end

end

SET_DDRAM2: //设定第2行DDRAM地址指令

begin

LCD_RS<=0;

LCD_RW<=0;

//-----写入第2行显示起始地址:-----

// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

// 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 第二行

LCD_DATA<=8'hC0+8'd0; //第2行第1个位置

state<=WRITE_RAM2;

// Data_Second_Buf<=Data_Second;

address<=6'd0;

end

WRITE_RAM2: //向第2行写入的数码

begin

if(address<=15) //表示写第一行

begin

LCD_RS<=1;

LCD_RW<=0;

LCD_DA TA<=Data_Second[address];

// Data_Second_Buf<=(Data_Second_Buf<<8);

address<=address+1'b1;

state<=WRITE_RAM2;

end

else

begin

LCD_RS<=0;

LCD_RW<=0;

LCD_DA TA<=8'hC0+address;

state<=STOP;

end

end

STOP:

begin

state<=STOP;

address<=6'd0;

LCD_RW<=1;

end

default:

state<=CLEAR;

endcase

end

end

endmodule

310640505

点击打开链接

5. 实验总结:

通过以上的讲解,相信各位已经可以熟练驱动LCD1602了吧,在今后的使用中,可以试着将一些采集的数据用1602显示出来显示,比如传感器温度啊,时间啊,AD采集的电压值啊…等等。

6. 课后作业:

使用LCD1602显示并实现如下的简易电子钟:显示格式:

The time is:

XX (小时): XX(分钟) : XX(秒)

按reset按键初始时间为,12:00:00。

LED点阵显示屏实验报告解析

16?16点阵LED电子显示屏的设计 摘要:文章介绍了基于单片机AT89C51的16?16点阵LED电子显示屏的设计。分别阐述了显示屏显示的基本原理,硬件设计、控制方法及其程序的实现。经过调试和分析,设计的结果能够实现对汉字的静态和动态显示,动态显示的内容有多种方式,同时又可通过上位机更新显示的内容。 关键字:AT89C51;16?16点阵;LED;显示屏 一绪论 LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的应用于公交汽车,码头,商店,学校和银行等公共场合的信息发布和广告宣传。LED显示屏经历了从单色,双色图文显示屏到现在的全彩色视频显示屏的发展过程,自20世纪八十年代开始,LED显示屏的应用领域已经遍布交通、电信、教育、证券、广告宣传等各方面。 1 LED点阵显示屏概述 LED点阵显示屏的构成型式有多种,其中典型的有两种。一种把所需展示的广告信息烧写固化到EPROM芯片内,能进行固定内容的多幅汉字显示,称为单显示型;另一种在机内设置了字库、程序库,具有程序编制能力,能进行内容可变的多幅汉字显示,称可编程序型。 目前,国内的LED点阵显示屏大部分是单显示型,其显示的内容相对较少,显示花样较单一。一般在产品出厂时,显示内容就已写入显示屏控制系统中的EPROM芯片内,当需要更换显示内容时就非常困难,这样使该类型的显示屏使用范围受到了限制。国内的另一种LED显示屏——可编程序型LED显示屏,虽然增加了显示屏系统的编程能力,显示内容和显示花样都有所增加,但也存在着更换显示内容不便的缺点。随着社会经济的迅速发展,如今的广告牌都存在着显示内容丰富、信息量大、信息更换速度快等特点。因此传统的LED显示屏控制系统已经越来越不能满足现代广告宣传业的需要。而利用PC机通信技术控制LED显示屏,则具有显示内容丰富,信息更换灵活等优点。 2 LED显示屏控制技术状况 显示屏的控制系统包括输入接口电路、信号控制、转换和数字化处理电路及输出接口电路等,涉及的具体技术很多,其关键技术包括串行传输与并行传输技术、动态扫描与静态锁存技术、自动检测及远程控制技术等。

LCD1602中文资料

液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。 这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。 1602采用标准的16脚接口,其中: 第1脚:VSS为地电源 第2脚:VDD接5V正电源 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。 第15~16脚:空脚 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 1602液晶模块内部的控制器共有11条控制指令,如表2所示,

它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符 (有些模块是 DL:高电平时为8位总线,低电平时为4位总线) 指令7:字符发生器RAM地址设置 指令8:DDRAM地址设置 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据

LCD1602液晶显示器

实验11:1602液晶显示屏显示(字符型液晶显示器) 字符型液晶显示器用于数字、字母、符号并可显示少量自定义符号。这类液晶显示器通常 有16根接口线,下表是这16根线的定义。 字符型液晶接口说明 编号符号引脚说明编号符号引脚说明 1 Vss 电源地 9 D 2 数据线2 2 Vdd 电源正 10 D 3 数据线3 3 VL 液晶显示偏压信号 11 D 4 数据线4 4 RS 数据/命令选择端 12 D 5 数据线5 5 R/W 读/ 写选择端 13 D 6 数据线6 6 E 使能信号 14 D 7 数据线7 7 D0 数据线0 15 BLA 背光源正极 8 D1 数据线1 16 BLK 背光源负极(本学习板配的 内部已经接地) 下图是字符型液晶显示器与单片机的接线图。这用了P0口的8根线作为液晶显示器的数据 线,用P20、P21、P22做为3根控制线。

字符型液晶显示器与单片机的接线图 字符型液晶显示器的使用,字符型液晶显示器一般采用HD44780芯片做为控制器的。 1.字符型液晶显示器的驱动程序 这个驱动程序适用于1602型字符液晶显示器, 1) 初始化液晶显示器命令(RSTLCD) 设置控制器的工作模式,在程序开始时调用。 参数:无。 2) 清屏命令(CLRLCD) 清除屏幕显示的所有内容 参数:无 3) 光标控制命令(SETCUR) 用来控制光标是否显示及是否闪烁 参数:1个,用于设定显示器的开关、光标的开关及是否闪烁。 4) 写字符命令(WRITECHAR) 在指定位置(行和列)显示指定的字符。

参数:共有3个,即行值、列值及待显示字符,分别存放在XPOS、YPOS和A中。其中行值与列值均从0开始计数,A中可直接写入字符的符号,编译程序自动转化为该字符的ASCII 值。 5) 字符串命令(WRITESTRING) 在指定位置显示指定的一串字符。 参数:共有3个,即行值、列值和R0指向待显示字符串的内存首地址,字符串须以0结尾。如果字符串的长度超过了从该列开始可显示的最多字符数,则其后字符被截断,并不在下 行显示出来。 以下是驱动源程序 ;************************************************** ;连线图: ; DB0---DPROT.0 DB4---DPROT.4 RS-------------P2.0 ; DB1---DPROT.1 DB5---DPROT.5 RW-------------P2.1 ; DB2---DPROT.2 DB6---DPROT.6 E--------------P2.2 ; DB3---DPROT.3 DB7---DPROT.7 VLCD接1K电阻到GND* ;系统晶振为11.0592 ;************************************************** RS BIT P2.0 RW BIT P2.1 E BIT P2.2 DPORT EQU P0 XPOS EQU R1 ;列方向地址指针 YPOS EQU R2 ;行方向地址指针 CUR EQU R3 ;设定光标参数 NoDisp EQU 0 ;无显示 NoCur EQU 1 ;有显示无光标 CurNoFlash EQU 2 ;有光标但不闪烁 CurFlash EQU 3 ;有光标且闪烁

LCD1602液晶显示实验(DOC)

实验报告 实验名称: [LCD1602液晶显示实验]姓名: 学号: 指导教师: 实验时间: [2013年6月15日] 信息与通信工程学院

LCD1602液晶显示实验 1.实验原理 1.1 基本原理 1.1.1 1602字符型LCD简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。 1.1.2 1602LCD的基本参数及引脚功能 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图1-2所示: 图1-2 1602LCD尺寸图 1.1602LCD主要技术参数: 显示容量: 16×2个字符 芯片工作电压: 4.5~5.5V 工作电流: 2.0mA(5.0V) 模块最佳工作电压: 5.0V 字符尺寸: 2.95×4.35(W×H)mm 2.引脚功能说明: 1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表: 表1-3引脚接口说明表 编 符号引脚说明编号符号引脚说明 号 1 VSS 电源地9 D 2 数据 2 VDD 电源正极10 D 3 数据 3 VL 液晶显示偏压11 D 4 数据 4 RS 数据/命令选择12 D 5 数据 5 R/W 读/写选择13 D 6 数据 6 E 使能信号14 D 7 数据 7 D0 数据15 BLA 背光源正极 8 D1 数据16 BLK 背光源负极

1.1.3 1602LCD的指令说明及时序 1602液晶模块内部的控制器共有11条控制指令,如表1-4所示: 表1-4 控制命令表 序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0 1 清显示0 0 0 0 0 0 0 0 0 1 2 光标返回0 0 0 0 0 0 0 0 1 * 3 置输入模式0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制0 0 0 0 0 0 1 D C B 5 光标或字符移位0 0 0 0 0 1 S/C R/L * * 6 置功能0 0 0 0 1 DL N F * * 7 置字符发生存贮器 地址 0 0 0 1 字符发生存贮器地址 8 置数据存贮器地址0 0 1 显示数据存贮器地址 9 读忙标志或地址 0 1 BF 计数器地址 10 写数到CGRAM或 DDRAM) 1 0 要写的数据内容 11 从CGRAM或 DDRAM读数 1 1 读出的数据内容 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)读写操作时序如图1-5和1-6所示: 图1-5 读操作时序

基于51单片机1602液晶显示简易计算器设计

#include #include #define uint unsigned int #define uchar unsigned char #define PI 3.141592 sbit RS = P2^0; sbit RW = P2^1; sbit EN = P2^2; sbit led=P2^4; sbit speek=P3^7; uchar table0[]={"Welcome to use"}; uchar table1[]={"made by Ms. Li"}; uchar table2[]={"error"}; uchar count; void main(void) { uchar error=0,i,first=0,dot1,dot2,dot1_num,dot2_num,minus1,minus2;//错误标志、第一次清屏标志、小数点标志以及小数点个数负号标志、负号个数 uchar Sin,Cos,Tan,ln; uchar Key_num,last_key_num; //键号 uchar flag=0,equal_flag; //运算符、等于符 double num1=0,num2=0,num=0,result=0,save_result; //第一个数、第二个数、计算结果

uchar first_num=0,Ans=0,second_num=0; InitLcd(); EA=1; ET0=1; TMOD=0X01; TH0=(65536-500)/256; TL0=(65536-500)%256; write_com(0x80+0x40+15); write_Dat('0'); write_com(0x80); while(1) { while(key_scan()==0xff); TR0=1; if(first==0) { first=1; write_com(0x01); } Key_num=key_scan(); switch(key_scan()) { case 1: if(last_key_num!=Key_num) { write_Dat('l'); write_Dat('n'); ln=1; }break; case 2: if(last_key_num!=Key_num) { write_Dat('s'); write_Dat('i'); write_Dat('n'); Sin=1; }break; case 3: if(last_key_num!=Key_num) { write_Dat('c'); write_Dat('o'); write_Dat('s'); Cos=1;

1602字符型液晶显示器

1602字符型液晶显示器 在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。 1602字符型LCD简介: 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图10-53: 图10-53 1602字符型液晶显示器实物图 1602LCD的基本参数及引脚功能: 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:

图10-55 读操作时序 图10-56 写操作时序 1602LCD的RAM地址映射及标准字库表: 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。

图10-57 1602LCD内部显示地址 例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。 在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B (41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 图10-58 字符代码与图形对应图

1602字符液晶显示原理+实例详解

1602详细资料和实例 1602字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采 用的1602液晶进行显示的。而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。 所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多 数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 1602液晶的正面(绿色背光,黑色字体) 1602液晶背面(绿色背光,黑色字体)

另一种1602液晶模块,显示屏是蓝色背光白色字体 字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:

HD44780内置了DDRAM、CGROM和CGRAM。 DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:

也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码(指A的字模代码,0x20~0x7F为标准的ASCII码,通过这个代码,在CGROM中查找到相应的字符显示)就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:DDRAM地址与显示位置的对应关系。 (事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码,见字模关系对照表)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H 地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H 加上80H即81H。依次类推。大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了),1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形(无汉字),如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H)(其实是1个地址),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

LED数码管显示实验

信息工程学院实验报告 课程名称:单片机原理及接口 实验项目名称:LED 数码管显示实验 实验时间:2016年3月11日 班级:通信141 姓名: 学号: 一、实 验 目 的: 熟悉keil 仿真软件、proteus 仿真软件、软件仿真板的使用。了解并熟悉一位数码管与 多位LED 数码管的电路结构、与单片机的连接方法及其应用原理。学习proteus 构建LED 数 码管显示电路的方法,掌握C51中单片机控制LED 数码管动态显示的原理与编程方法。 二、实 验 设 备 与 器 件 硬件:微机、单片机仿真器、单片机实验板、连线若干 软件:KEIL C51单片机仿真调试软件,proteus 系列仿真调试软件 三、实 验 原 理 LED 显示器是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七 段LED ,这种显示器有共阴极与共阳极两种。 共阴极LED 显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发 光二极管则点亮;共阳极LED 显示器的发光二极管阳极并接。 七段LED 数码管与单片机连接时,只要将一个8位并行输出口与显示器的发光二极管引 脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,通常将控制 成 绩: 指导老师(签名): a f b e g c d dp 1 2 3 4 5 10 9 8 7 6 g f a b e d c dp (a) 共阴极 (b) 共阳极 (c) 管脚配置

发光二极管的8位字节数据称为段选码。 多位七段LED数码管与单片机连接时将所有LED的段选线并联在一起,由一个八位I/O 口控制,而位选线分别由相应的I/O口线控制。如:8位LED动态显示电路只需要两个八位I/O口。其中一个控制段选码,另一个控制位选。 由于所有位的段选码皆由一个I/O控制,因此,在每个瞬间,多位LED只可能显示相同的字符。要想每位显示不同的字符,必须采用动态扫描显示方式。即在每一瞬间只使某一位显示相应字符。在此瞬间,位选控制I/O口在该显示位送入选通电平(共阴极送低电平、共阳极送高电平)以保证该位显示相应字符,段选控制I/O口输出相应字符段选码。如此轮流,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。 不断循环送出相应的段选码、位选码,就可以获得视觉稳定的显示状态。由人眼的视觉特性,每一位LED在一秒钟内点亮不少于30次,其效果和一直点亮相差不多。 四、实验内容与步骤 1、电路图的设计。 (1)打开proteus软件,单击P,打开搜索元器件窗口,如图 1-1 所示: 图1-1 搜索元器件 (2)添加元器件AT89C51、CAP、BUTTON、LED-BLUE、RES、CRYSTAL、7SEG-MPXI1CC,修改元器件的参数,绘制电路图,如图1-2 所示:

LCD1602液晶显示器设计

LCD1602液晶显示课程设计 第一章绪论 1.1课题背景 当今时候是一个信息化的时代,信息的重要性不言而喻的,获取手段显得尤其重要。人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。在当代显示技术中,主流的有LED显示屏和LCD液晶显示,而在这些显示技术中,尤其以液晶显示器LCD(Liquid crystal display)为代表的平板显示器发展最快,应用最广。LCD是典型的发光器件,它一材料科学为基础,综合利用了精密机械,光电及计算机技术,并正在微机械,微光学,纤维光学等前沿领域研究基础上,向高集成化,智能化方向发展。 液晶显示技术发展迅猛,市场预测表明,液晶显示平均年销售呈增长10%~13%,不久的将来有可能取代CRT,成为电子信息产品的主要显示器件,另外,液晶显示器对空间电磁辐射的干扰不敏感,且在紧凑的仪器空间不需要专门的屏蔽保护,因而课大大简化仪器的结构和制造成本,在各种便携式仪器,仪表将会越来越广泛的应用。特别是在电池供电的单片机产品中,液晶显示更是必选的显示器件。 1.2课题设计目标 本设计是基于AT89C51芯片单片机为主控芯片,结合1602液晶显示模板等外围电路,通过软件程序,来实现液晶显示英文字母。本次设计的目的在于利用单片机和IIC技术来显示英文字母。 1.3课程设计的主要工作 (1)对系统的各个模块的各个功能进行深入分析和研究,在对课题所采用的方案进行可行详细的研究后设计具体功能电路。 (2)熟悉所选芯片的功能并完成具体电路设计。

(3)对系统的最终指标进行测试,针对系统的不足,进行分析并提出一些改正方法。 1.4 设计要求 (1)运行IIC总线技术。 (2)循环显示字母。 第二章硬件设计 2.1 LCD1602简介 2.1.1 LCD1602引脚功能 LCD1602引脚如图2.1所示 图2.1 LCD1602引脚图 引脚图的功能如表2—1所示

单片机实验lcd显示实验

实验19 LCD显示实验 一、实验目的: 学习液晶显示的编程方法,了解液晶显示模块的工作原理。 掌握液晶显示模块与单片机的接口方法。 二、所需设备 CPU挂箱、8031CPU模块 三、实验内容 编程实现在液晶显示屏上显示中文汉字“北京理工达盛科技有限公司”。四、实验原理说明 五、实验步骤 1、实验连线 8255的PA0~PA7接DB0~DB7,PC7接BUSY,PC0接REQ,CS8255接CS0。 2、运行实验程序,观察液晶的显示状态。 六、程序框图 七、程序清单

八、附:点阵式LCD模块 点阵式LCD模块由一大一小两块液晶模块组成。两模块均由并行的数据接口和应答信号接口两部分组成,电源由接口总线提供。 (1)OCMJ2×8液晶模块介绍及使用说明 OCMJ中文模块系列液晶显示器内含 GB 2312 16*16点阵国标一级简体汉字和ASCII8*8(半高)及8*16(全高)点阵英文字库,用户输入区位码或 ASCII 码即可实现文本显示。 OCMJ中文模块系列液晶显示器也可用作一般的点阵图形显示器之用。提供有位点阵和字节点阵两种图形显示功能,用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。完全兼容一般的点阵模块。 OCMJ中文模块系列液晶显示器可以实现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。 本系列模块具有上/下/左/右移动当前显示屏幕及清除屏幕的命令。一改传统的使用大量的设置命令进行初始化的方法,OCMJ 中文模块所有的设置初始化工作都是在上电时自动完成的,实现了“即插即用”。同时保留了一条专用的复位线供用户选择使用,可对工作中的模块进行软件或硬件强制复位。规划整齐的10个用户接口命令代码,非常容易记忆。标准用户硬件接口采用REQ/BUSY 握手协议,简单可靠。 1)表—1:OCMJ2X8(128X32)引脚说明 硬件接口 接口协议为请求/应答(REQ/BUSY)握手方式。应答BUSY 高电平(BUSY =1)表示 OCMJ 忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表示 OCMJ 空闲,等待接收用户命令。发送命令到 OCMJ可在BUSY =0 后的任意时刻开始,先把用户命令的当前字节放到数据线上,接着发高电平REQ 信号(REQ =1)通知OCMJ请求处理当前数据线上的命令或数据。OCMJ模块在收到外部的REQ高电平信号后立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理,此时,用户对模块的写操作已经完成,用户可以撤消数据线上的信号并可作模块显示以外的其他工作,也可不断地查询应答线BUSY是否为低(BUSY =0?),如果BUSY =0,表明模块对用户的写操作已经执行完毕。可以再送下一个数据。如向模块发出一个完整的显示汉字的命令,包括坐标及汉字代码在内共需5个字节,模块在接收到最后一个字节后才开始执行整个命令的内

基于LCD1602液晶显示系统课程设计

课程设计(论文) 题目名称基于89C51的液晶显示系统设计 课程名称单片机原理及应在电气测控学科中的应用学生姓名刘晨 学号1141201014 系、专业电气工程系电气工程及其自动化专业 指导教师朱群峰 2013年6月14日

邵阳学院课程设计(论文)任务书 年级专业11级电气工程及 其自动化专业 学生姓名刘晨学号1141201014 题目名称基于89C51的液晶显示系统设计设计时间2013年6月3日—2013年6月14日 课程名称单片机原理及应 在电气测控学科 中的应用 课程编号121200105设计地点 数字控制与PLC实 验室(305) 一、课程设计(论文)目的 课程设计是在校学生素质教育的重要环节,是理论与实践相结合的桥梁和纽带。单片机课程设计,要求学生更多的完成软硬结合的动手实践方案,解决目前学生课程设计过程中普遍存在的缺乏动手能力的现象. 《单片机课程设计》是继《电子技术》、和《单片机原理与应用》课程之后开出的实践环节课程,其目的和任务是训练学生综合运用已学课程“电子技术基础”、“单片机原理及应用”的基本知识,独立进行单片机应用技术和开发工作,掌握单片机程序设计、调试和应用电路设计、分析及调试检测。 二、已知技术参数和条件 1、液晶显示功能见第三项“任务和要求”具体参数 1、89C51系列单片机; 2、KEIL 软件;Wave软件、protuse软件 3、THKSCM-1型单片机实验系统。 三、任务和要求 利用89C51驱动液晶显示器工作,液晶显示器的型号自己确定(可以用1602或者12864)要求显示出自己的基本信息(英文或者中文,内容自定)。 1、要求设计出硬件系统的电气原理图; 2、要求设计出程序流程图和程序; 3、要求设计出实物或者仿真调试。 注:1.此表由指导教师填写,经系、教研室审批,指导教师、学生签字后生效; 2.此表1式3份,学生、指导教师、教研室各1份。

(完整版)12864lcd显示部分试验总结报告

12864lcd显示部分试验总结报告 管岱2014.12.19 【实验目的】 在12864液晶显示屏上能够显示出在4×4小键盘上输入的激励源频率值,如输入“789HZ”、“8MHZ”、“2.3KHZ”,显示出“789H”、“8M”、“2.3K”。并且要求此部分程序有较好的可移植性,在最后对电阻率值的显示上能够较好的应用。 【实验原理】 12864-3A接口说明表: 在12864液晶显示原理的基础上,通过在ise上编写vhdl语言,使之能够在fpga学习板上顺利显示数据。

【实验内容】 12864的显示原理并不难理解,并且在以前也用汇编语言实现过,所以本次实验的难点不在于显示原理的理解,而在于VHDL语言的编写。 在实验初期,由于对vhdl语言的不熟练,我们“类比”汇编语言的显示程序,编写出如下的程序: 发现编译时就出现了问题,出现如“multi-source in unit <*> on signal <*>”的报错。在仔细调试检查后发现,我们错误的原因在于:在不同的进程中对同一个信号赋值。例如,在写指

令的进程中,将rs信号置‘0’,而在后面写数据的进程中又将rs置‘1’,由于在vhdl中各进程之间是并行的关系,因此这样编写程序会出现在同一时刻对同一个引脚赋高电平和低电平,从而出现矛盾。虽然在程序实际运行中,写指令进程在系统一上电就会完成,远早于写数据进程,但是在逻辑上这样编写是不符合VHDL语言的规则的。 因此,我们利用状态机的思想,将写指令和写数据的两个进程合二为一。程序片段如下: 利用状态机,将写指令和写数据的各个步骤分为一个一个分立的状态,顺序执行。这样编写将对同一个引脚信号的变化放在一个进程中,很好的解决了之前存在的问题。

单片机+LCD1602液晶显示字符串

1602液晶显示字符串(附带程序)(注意说明:使用的实验板是郭天祥老师的52单片机板)

基本操作电路 状态字说明 RAM地址映射图

初始化相关指令的意思 读时序图

写时序图

要想通过1602液晶来显示你想要显示字符串,其实是很简单的,程序虽然有点长,但是都是按照步骤来的。 1602的五大步骤 第一个步骤: 检查LCD忙状态 lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。第二个步骤: 写指令数据到LCD RS=L,RW=L,E=高脉冲,D0-D7=指令码。 第三个步骤: 写显示数据到LCD RS=H,RW=L,E=高脉冲,D0-D7=数据。 第四个步骤: 设定显示位置 第五个步骤: LCD初始化设定 只要这五步你弄懂了,什么样的字符串都可以按照你的方式显示。至于这其中的步骤的具体的方式,我们就要参照1602的资料和时序图!不过你大可不必,这份文档就足够了! #include #include #define uchar unsigned char #define uint unsigned int

sbit dula=P2^6; sbit wela=P2^7; sbit LCD_RS = P3^5; sbit LCD_RW = P3^6; sbit LCD_EN = P3^4; uchar code dis1[] = {" WLCOME TO "}; uchar code dis2[] = {" JIANG GAN HUA "}; uchar code dis3[] = {" NAN CHANG "}; uchar code dis4[] = {" HANG KONG DX"}; void delay(int ms) { int i; while(ms--) { for(i = 0; i< 110; i++) { _nop_(); } } } bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return result; } void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd;

1602液晶显示计算器电路图及程序

#include #include #include #include unsigned char code Error[]={"error"}; unsigned char code Systemerror[]={"system error"}; unsigned char code Lcd[]={"lcd calculate"}; char str[16]; sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; /*********************** 函数功能:延时1ms ***********************/ void delay1ms() { unsigned char i,j; for (i=0;i<10;i++) for (j=0;j<33;j++) ; } /************************ 函数功能:延时n毫秒 入口参数:n ************************/ void delaynms(unsigned char n) { unsigned char i; for (i=0;i

LCD1602显示屏地驱动设置及例程

LCD1602显示屏的驱动设置及例程 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示: 图1 再来一它的背面的,如图2所示:

图2它的16条引脚定义如下: 对这个表的说明: 1. VSS接电源地。 2. VDD接+5V。 3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/R M063蓝白可调电阻。见图3。 图3 4. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当R S为高电平时,选择数据。 5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据。如果不需要进行读取操作,可以直接将其接VSS。 6. E ,执行命令的使能引脚,接单片机的一个I/O。 7. D0—D7,并行数据输入/输出引脚,可接单片机的P0—P3任意的8个I/O口。如果接P0口,P0口应该接4.7K—10K的上拉电阻。如果是4线并行驱动,只须接4个I/O口。 8. A背光正极,可接一个10—47欧的限流电阻到VDD。 9. K背光负极,接VSS。见图4所示。

图4 二.基本操作 LCD1602的基本操作分为四种: 1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。 2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。 3. 写命令:输入RS=0,RW=0,E=高脉冲。输出:无。 4. 写数据:输入RS=1,RW=0,E=高脉冲。输出:无。 读操作时序图(如图5): 图5 写操作时序图(如图6):

LCD液晶显示实验实验报告及程序

实验三 LCD1602液晶显示实验 姓名专业学号成绩 一、实验目的 1.掌握Keil C51软件与proteus软件联合仿真调试的方法; 2.掌握LCD1602液晶模块显示西文的原理及使用方法; 3.掌握用8位数据模式驱动LCM1602液晶的C语言编程方法; 4.掌握用LCM1602液晶模块显示数字的C语言编程方法。 二、实验仪器与设备 1.微机一台 C51集成开发环境仿真软件 三、实验内容 1.用Proteus设计一LCD1602液晶显示接口电路。要求利用P0口接LCD1602 液晶的数据端,~做LCD1602液晶的控制信号输入端。~口扩展3个功能键 K1~K3。参考电路见后面。 2.编写程序,实现字符的静态和动态显示。显示字符为 第一行:“1.姓名全拼”,第二行:“2.专业全拼+学号”。 3.编写程序,利用功能键实现字符的垂直滚动和水平滚动等效果显示。显示字 符为:

“1.姓名全拼 2.专业全拼+学号 EXP8 DISPLAY ” 主程序静态显示“My information!” 四、实验原理 液晶显示的原理:采用的LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。 1.LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚 接口说明如表:

基于单片机的1602液晶显示电路设计

本科毕业论文(设计) 题目:基于单片机的1602液晶显示电路设计 学生姓名:学号: 系别:理工部专业:电气工程及其自动化入学时间:2012年09月 导师姓名:职称/学位:

基于单片机的1602液晶显示电路设计 摘要 本文是一篇介绍利用AT89S52单片机和LCD1602液晶显示屏设计一种液晶显示电路并编程实现信息的显示功能。AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。1602LCD是指显示的内容为16*2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。从AT89S52单片机与LCD1602液晶显示器性能特点出发,实现两者接口的衔接设计。经过多次的调试, 使得该设计取得了比较满意的结果, 且系统软硬件设计简单方便、稳定可靠, 可广泛应用于智能化仪器仪表及各种宣传场所, 为嵌入式控制系统提供高灵活、高性价比的解决方案。 关键词:AT89S52单片机;LCD1602液晶显示器;复位电路;时钟电路

目录 第一章前言 (2) 1.1 研究现状 (2) 1.2 研究意义 (2) 第二章系统硬件电路设计 (3) 2.1 AT89S52单片机最小系统 (3) 2.1.1 主要性能 (3) 2.1.2 功能 (3) 2.1.3 引脚说明及实物图 (4) 2.2 LCD1602液晶显示器 (7) 2.2.1功能 (7) 2.2.2 特点 (7) 2.2.3 引脚 (7) 2.3 复位电路 (9) 2.4 时钟电路 (9) 第三章软件设计 (10) 3.1 软件设计思路 (10) 3.1.1 Altium Designer (11) 3.1.2 keil (11) 3.1.3 AVR_fighter (11) 3.2 程序设计 (12) 第四章仿真及硬件电路 (15) 第五章总结与展望 (17) 主要参考文献 (18) 致谢 (19)

1602液晶显示设计

摘要 本次课程设计是以AT89C52为核心控制器,1602液晶为显示器设计的液晶显示电路。该电路可在1602液晶上显示ASCII码表里的各种字符,通过编程设定的显示方式。设计中采用了二种动态显示方式,第一种是整屏左移操作,先将待显示的内容写入1602RAM 的后面几个存储单元,当内容写入完成后,写入指令,实现指针不动而屏幕动的效果。第二种是将内容一个个写到1602显示,这主要通过延时函数控制写入的两个字符间的时间间隔。1602液晶一次可以显示32个字符,通过编程可以实现不同的动态显示方式。 关键词:AT89C52;1602;动态显示

1 Proteus仿真流程与Keil编译器简介 1.1 Proteus仿真流程 (1)工作界面 Proteus ISIS的工作界面是一种标准的Windows界面,如图1-2所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。 图1.1 proteus操作界面 (2)基本操作 ①图形编辑窗口 在图形编辑窗口内完成电路原理图的编辑和绘制。为了方便作图 坐标系统(CO-ORDINATE SYSTEM)。ISIS中坐标系统的基本单位是10nm,主要是为了和Proteus ARES保持一致。但坐标系统的识别(read-out)单位被限制在1th。坐标原点默认在图形编辑区的中间,图形的坐标值能够显示在屏幕的右下角的状态栏中。

点状栅格(The Dot Grid)与捕捉到栅格(Snapping to a Grid)编辑窗口内有点状的栅格,可以通过View菜单的Grid命令在打开和关闭间切换。点与点之间的间距由当前捕捉的设置决定。捕捉的尺度可以由View菜单的Snap命令设置,或者直接使用快捷键F4、F3、F2和CTRL+F1。 ②预览窗口 该窗口通常显示整个电路图的缩略图。在预览窗口上点击鼠标左键,将会有一个矩形蓝绿框标示出在编辑窗口的中显示的区域。其他情况下,预览窗口显示将要放置的对象的预览。这种Place Preview特性在下列情况下被激活:当一个对象在选择器中被选中、 当使用旋转或镜像按钮时、当为一个可以设定朝向的对象选择类型图标时(例如:Component icon, Device Pin icon等等)、当放置对象或者执行其他非以上操作时,place preview会自动消除、对象选择器(Object Selector)根据由图标决定的当前状态显示不同的内容。显示对象的类型包括:设备,终端,管脚,图形符号,标注和图形。在某些状态下,对象选择器有一个Pick切换按钮,点击该按钮可以弹出库元件选取窗体。通过该窗体可以选择元件并置入对象选择器,在今后绘图时使用。 ③对象选择与放置 通过对象选择按钮,从元件库中选择对象,并置入对象选择器窗口,供今后绘图时使用。显示对象的类型包括:设备,终端,管脚,图形符号,标注和图形。放置对象的步骤如下(To place an object:)根据对象的类别在工具箱选择相应模式的图标(mode icon)。根据对象的具体类型选择子模式图标(sub-mode icon)。如果对象类型是元件、端点、管脚、图形、符号或标记,从选择器里(selector)选择你想要的对象的名字。对于元件、端点、管脚和符号,可能首先需要从库中调出。如果对象是有方向的,将会在预览窗口显示出来,你可以通过预览对象方位按钮对对象进行调整。最后,指向编辑窗口并点击鼠标左键放置对象。 1.2 Keil软件简介 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil 软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么

相关文档
最新文档