LCD1602液晶显示实验(DOC)

LCD1602液晶显示实验(DOC)
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 读操作时序

图1-6 写操作时序

1.1.4 1602LCD的RAM地址映射及标准字库表

液晶显示模块是一个慢显示器件,所以,在执行每条指令之前,一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时,要先输入显示字符地址,也就是告诉模块在哪里显示字符,图1-7是1602的内部显示地址。

图1-7 1602LCD内部显示地址

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

在对液晶模块的初始化中,要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。

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

因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,编程中还可以用字符型常量或变量赋值,如“A”。1602通过D0~D7的8位数据端传输数据和指令。

1.1.5 1602LCD的一般初始化(复位)过程

延时15mS

写指令38H(不检测忙信号)

延时5mS

写指令38H(不检测忙信号)

延时5mS

写指令38H(不检测忙信号)

以后每次写指令、读/写数据操作均需要检测忙信号

写指令38H:显示模式设置

写指令08H:显示关闭

写指令01H:显示清屏

写指令06H:显示光标移动设置

写指令0CH:显示开及光标设置

1.2 任务1及其原理

任务1:更改lcd上显示的字符。通过更改wire [127:0] row1_val,wire [127:0] row2_val的赋值即可,注意保证“”内的字符数包括空格共16位。

1.3 任务2及其原理

任务2:将“LCD1602驱动模块”文件与“LCD1602驱动测试模块”文件合并成为一个verilog文件。首先,新建一个顶层VerilogHDL文件,将两个文件的输入,内容合并,调试新的模块,然后将管脚连接在一起,从而完成合并。

1.4 任务3及其原理

任务3:实现液晶屏的某一位完成0~9的循环变换,并且设置复位键,在循环过程中按下复位键循环可从0重新开始。

完成本次的实验想法是将“LCD1602驱动测试模块”文件中wire [127:0] row1_val,wire [127:0] row2_val变量进行改动,将row1_val原本赋予的字符替换为一个变量,设定新的时钟,即循环变换的间隔时间,再通过条件语句控制循环。使能键的控制原理是通过对循环变换的条件进行操作实现的,即当按键使能时循环开始,反之,则从0开始。

2.实验流程图

0~9循环变换流程图

开始

定义输入输出变

量及类型

lcd 液晶屏初

始化

是否有按键按

下?

复位键是否启

动?

定义a=8'h30;i=0

将a 赋值给row1_val 低8位

是否是时钟输入

上升沿?

i<=8

a=a+1; i=i+1;

结束

显示定义字符

3.实验程序

3.1 任务1程序

程序更改部分:wire [127:0] row1_val = " liu wupeng "; wire [127:0] row2_val = " 2009081206 ";

3.2 任务2程序

将测试模块中的驱动部分,两个文件的对应命名只留其一,合并两文件,即以下部分

// 例化LCD1602驱动

lcd1602_drive u0(

.clk(CLOCK_50M),

.rst_n(Q_KEY),

.row1_val(row1_val),

.row2_val(row2_val),

.lcd_data(LCD1602_DATA),

.lcd_e(LCD1602_E),

.lcd_rs(LCD1602_RS),

.lcd_rw(LCD1602_RW));

完整程序请参见附件:1

3.3 任务3程序

改动模块:LCD1602驱动测试模块,加重处为修改、添加部分

module lcd1602_test(

input CLOCK_50M, // 板载时钟25MHz

input Q_KEY, // 板载按键RST

output [7:0] LCD1602_DATA, // LCD1602数据总线

output LCD1602_E, // LCD1602使能

output LCD1602_RS, // LCD1602指令数据选择

output LCD1602_RW, // LCD1602读写选择

output SEL0, // LCD1602读写选择

output SEL1, // LCD1602读写选择

output SEL2 // LCD1602读写选择

input key, //使能控制键

);

reg [127:0] row1_val; //将原本的wire型改为reg型,保证其可变wire [127:0] row2_val = " ";

//将第二行赋值都是空格,实验时显示为空

reg [7:0] a; //a变化控制reg [127:0] row1_val

reg [3:0] i;

reg [25:0] cnt; //分频用

reg en; //使能控制

assign SEL0 = 1'b0;

assign SEL1 = 1'b0;

assign SEL2 = 1'b1;

always @ (posedge CLOCK_50M,negedge Q_KEY)

if (!Q_KEY) cnt <= 0;

else cnt <= cnt + 1'b1;

wire lcd_clk = cnt[25]; //分频模块

always @(a)

begin

row1_val[7:0]<=a;

end //将a赋给 row1_val[7:0]的低8位

always @(negedge key)

begin

if (en==0) en<=1;

else

en<=0;

end //使能控制模块,下降沿有效

always @(posedge lcd_clk)

if (en)

if(i<=8)

begin

a=a+1;

i=i+1;

end

else

begin

i=0;

a=8'h30;

end

else

a=8'h30; //通过条件控制语句实现0~9的循环变换

// 例化LCD1602驱动

lcd1602_drive u0(

.clk(CLOCK_50M),

.rst_n(Q_KEY),

// LCD1602 Input Value

.row1_val(row1_val),

.row2_val(row2_val),

// LCD1602 Interface

.lcd_data(LCD1602_DATA),

.lcd_e(LCD1602_E),

.lcd_rs(LCD1602_RS),

.lcd_rw(LCD1602_RW)

);

endmodule

4.管脚分配

4.1 任务2管教分配

4.2 任务3管教分配

5.实验结果

5.1 任务1实验结果

修改程序后,液晶屏第一行显示" liu wupeng ",第二行显示" 2009081206 "。

5.2 任务2实验结果

文件合并后,显示内容仍与原始程序相同。

5.3 任务3实验结果

液晶屏第一行最后一位可实现0~9的循环变换,拨动复位键,计数从0重新开始。

6.实验心得

通过本次实验,我了解了LCD-1602的构成及使用方法,能够通过编程显示字符。在完成课堂任务“实

现某一位0~9循环变换”时,起初由于没有掌握LCD的工作原理,出现了问题,即0~9快速变化,无法控制其速度,经过对程序及实验原理的研究,最后完成了任务。FPGA实验是锻炼编程能力、逻辑思维能力的一门很好的课程,我现在所欠缺的便是缜密的思维及查错的能力,还望在以后实验中提高。通过这次实验,学到了很多东西,体会到了自己实现一个程序功能的小小喜悦,也认识到了自己只是FPGA道路上的新手,还有很多未知的知识需要学习。真正学习的历程需要在课下多下功夫,希望通过这学期的学习自己

能熟练掌握一些编程的技术,培养良好的思维模式。

附件:1

module hebing(

input clk, // 50MHz时钟

input rst_n, // 复位信号

input [127:0] row1_val, // 第一行字符

input [127:0] row2_val, // 第二行字符

// LCD1602 Interface

output SEL0, // LCD1602读写选择

output SEL1, // LCD1602读写选择

output SEL2, // LCD1602读写选择

// LCD1602 Interface

output reg [ 7:0] lcd_data, // 数据总线

output lcd_e, // 使能信号

output reg lcd_rs, // 指令、数据选择

output lcd_rw // 读、写选择

);

// 0 ~ (8*16-1) = 128

// 16bits -> 0123456789ABCDEF <-

wire [127:0] row1_val = " liu wupeng ";

wire [127:0] row2_val = " 2009081206 ";

assign SEL0 = 1'b0;

assign SEL1 = 1'b0;

assign SEL2 = 1'b1;

// +++++++++++++++++++++++++++++++++++++

// 分频模块开始

// +++++++++++++++++++++++++++++++++++++

reg [15:0] cnt; // 计数子

always @ (posedge clk, negedge rst_n)

if (!rst_n)

cnt <= 0;

else

cnt <= cnt + 1'b1;

// 500Khz ~ 1MHz 皆可

wire lcd_clk = cnt[15]; // (2^15 / 50M) = 1.31ms // -------------------------------------

// 分频模块结束

// -------------------------------------

// +++++++++++++++++++++++++++++++++++++

// LCD1602驱动模块开始

// +++++++++++++++++++++++++++++++++++++

// 格雷码编码:共40个状态

parameter IDLE = 8'h00;

// 写指令,初始化

parameter DISP_SET = 8'h01; // 显示模式设置

parameter DISP_OFF = 8'h03; // 显示关闭

parameter CLR_SCR = 8'h02; // 显示清屏

parameter CURSOR_SET1 = 8'h06; // 显示光标移动设置

parameter CURSOR_SET2 = 8'h07; // 显示开及光标设置

// 显示第一行

parameter ROW1_ADDR = 8'h05; // 写第1行起始地址

parameter ROW1_0 = 8'h04;

parameter ROW1_1 = 8'h0C;

parameter ROW1_2 = 8'h0D;

parameter ROW1_3 = 8'h0F;

parameter ROW1_4 = 8'h0E;

parameter ROW1_5 = 8'h0A;

parameter ROW1_6 = 8'h0B;

parameter ROW1_7 = 8'h09;

parameter ROW1_8 = 8'h08;

parameter ROW1_9 = 8'h18;

parameter ROW1_A = 8'h19;

parameter ROW1_B = 8'h1B;

parameter ROW1_C = 8'h1A;

parameter ROW1_D = 8'h1E;

parameter ROW1_E = 8'h1F;

parameter ROW1_F = 8'h1D;

// 显示第二行

parameter ROW2_ADDR = 8'h1C; // 写第2行起始地址

parameter ROW2_0 = 8'h14;

parameter ROW2_1 = 8'h15;

parameter ROW2_2 = 8'h17;

parameter ROW2_3 = 8'h16;

parameter ROW2_4 = 8'h12;

parameter ROW2_5 = 8'h13;

parameter ROW2_6 = 8'h11;

parameter ROW2_7 = 8'h10;

parameter ROW2_8 = 8'h30;

parameter ROW2_9 = 8'h31;

parameter ROW2_A = 8'h33;

parameter ROW2_B = 8'h32;

parameter ROW2_C = 8'h36;

parameter ROW2_D = 8'h37;

parameter ROW2_E = 8'h35;

parameter ROW2_F = 8'h34;

reg [5:0] current_state, next_state; // 现态、次态// FSM: always1

always @ (posedge lcd_clk, negedge rst_n)

if(!rst_n) current_state <= IDLE;

else current_state <= next_state;

// FSM: always2

always

begin

case(current_state)

IDLE : next_state = DISP_SET;

// 写指令,初始化

DISP_SET : next_state = DISP_OFF;

DISP_OFF : next_state = CLR_SCR;

CLR_SCR : next_state = CURSOR_SET1;

CURSOR_SET1 : next_state = CURSOR_SET2;

CURSOR_SET2 : next_state = ROW1_ADDR;

// 显示第一行

ROW1_ADDR : next_state = ROW1_0;

ROW1_0 : next_state = ROW1_1;

ROW1_1 : next_state = ROW1_2;

ROW1_2 : next_state = ROW1_3;

ROW1_3 : next_state = ROW1_4;

ROW1_4 : next_state = ROW1_5;

ROW1_5 : next_state = ROW1_6;

ROW1_6 : next_state = ROW1_7;

ROW1_7 : next_state = ROW1_8;

ROW1_8 : next_state = ROW1_9;

ROW1_9 : next_state = ROW1_A;

ROW1_A : next_state = ROW1_B;

ROW1_B : next_state = ROW1_C;

ROW1_C : next_state = ROW1_D;

ROW1_D : next_state = ROW1_E;

ROW1_E : next_state = ROW1_F;

ROW1_F : next_state = ROW2_ADDR; // 显示第二行

ROW2_ADDR : next_state = ROW2_0; ROW2_0 : next_state = ROW2_1;

ROW2_1 : next_state = ROW2_2;

ROW2_2 : next_state = ROW2_3;

ROW2_3 : next_state = ROW2_4;

ROW2_4 : next_state = ROW2_5;

ROW2_5 : next_state = ROW2_6;

ROW2_6 : next_state = ROW2_7;

ROW2_7 : next_state = ROW2_8;

ROW2_8 : next_state = ROW2_9;

ROW2_9 : next_state = ROW2_A;

ROW2_A : next_state = ROW2_B;

ROW2_B : next_state = ROW2_C;

ROW2_C : next_state = ROW2_D;

ROW2_D : next_state = ROW2_E;

ROW2_E : next_state = ROW2_F;

ROW2_F : next_state = ROW1_ADDR; //

default : next_state = IDLE ;

endcase

end

// FSM: always3

always @ (posedge lcd_clk, negedge rst_n) begin

if(!rst_n)

begin

lcd_rs <= 0;

lcd_data <= 8'hxx;

end

else

begin

// 写lcd_rs

case(next_state)

IDLE : lcd_rs <= 0;

// 写指令,初始化

DISP_SET : lcd_rs <= 0;

DISP_OFF : lcd_rs <= 0;

CLR_SCR : lcd_rs <= 0;

CURSOR_SET1 : lcd_rs <= 0;

CURSOR_SET2 : lcd_rs <= 0;

// 写数据,显示第一行

ROW1_ADDR : lcd_rs <= 0;

ROW1_0 : lcd_rs <= 1;

ROW1_1 : lcd_rs <= 1;

ROW1_2 : lcd_rs <= 1;

ROW1_3 : lcd_rs <= 1;

ROW1_4 : lcd_rs <= 1;

ROW1_5 : lcd_rs <= 1;

ROW1_6 : lcd_rs <= 1;

ROW1_7 : lcd_rs <= 1;

ROW1_8 : lcd_rs <= 1;

ROW1_9 : lcd_rs <= 1;

ROW1_A : lcd_rs <= 1;

ROW1_B : lcd_rs <= 1;

ROW1_C : lcd_rs <= 1;

ROW1_D : lcd_rs <= 1;

ROW1_E : lcd_rs <= 1;

ROW1_F : lcd_rs <= 1;

// 写数据,显示第二行

ROW2_ADDR : lcd_rs <= 0;

ROW2_0 : lcd_rs <= 1;

ROW2_1 : lcd_rs <= 1;

ROW2_2 : lcd_rs <= 1;

ROW2_3 : lcd_rs <= 1;

ROW2_4 : lcd_rs <= 1;

ROW2_5 : lcd_rs <= 1;

ROW2_6 : lcd_rs <= 1;

ROW2_7 : lcd_rs <= 1;

ROW2_8 : lcd_rs <= 1;

ROW2_9 : lcd_rs <= 1;

ROW2_A : lcd_rs <= 1;

ROW2_B : lcd_rs <= 1;

ROW2_C : lcd_rs <= 1;

ROW2_D : lcd_rs <= 1;

ROW2_E : lcd_rs <= 1;

ROW2_F : lcd_rs <= 1;

endcase

// 写lcd_data

case(next_state)

IDLE : lcd_data <= 8'hxx; // 写指令,初始化

DISP_SET : lcd_data <= 8'h38; DISP_OFF : lcd_data <= 8'h08; CLR_SCR : lcd_data <= 8'h01; CURSOR_SET1 : lcd_data <= 8'h06; CURSOR_SET2 : lcd_data <= 8'h0C; // 写数据,显示第一行

ROW1_ADDR : lcd_data <= 8'h80;

ROW1_0 : lcd_data <= row1_val[127:120];

ROW1_1 : lcd_data <= row1_val[119:112];

ROW1_2 : lcd_data <= row1_val[111:104];

ROW1_3 : lcd_data <= row1_val[103: 96];

ROW1_4 : lcd_data <= row1_val[ 95: 88];

ROW1_5 : lcd_data <= row1_val[ 87: 80];

ROW1_6 : lcd_data <= row1_val[ 79: 72];

ROW1_7 : lcd_data <= row1_val[ 71: 64];

ROW1_8 : lcd_data <= row1_val[ 63: 56];

ROW1_9 : lcd_data <= row1_val[ 55: 48];

ROW1_A : lcd_data <= row1_val[ 47: 40];

ROW1_B : lcd_data <= row1_val[ 39: 32];

ROW1_C : lcd_data <= row1_val[ 31: 24];

ROW1_D : lcd_data <= row1_val[ 23: 16];

ROW1_E : lcd_data <= row1_val[ 15: 8];

ROW1_F : lcd_data <= row1_val[ 7: 0];

// 写数据,显示第二行

ROW2_ADDR : lcd_data <= 8'hC0;

ROW2_0 : lcd_data <= row2_val[127:120];

ROW2_1 : lcd_data <= row2_val[119:112];

ROW2_2 : lcd_data <= row2_val[111:104];

ROW2_3 : lcd_data <= row2_val[103: 96];

ROW2_4 : lcd_data <= row2_val[ 95: 88];

ROW2_5 : lcd_data <= row2_val[ 87: 80];

ROW2_6 : lcd_data <= row2_val[ 79: 72];

ROW2_7 : lcd_data <= row2_val[ 71: 64];

ROW2_8 : lcd_data <= row2_val[ 63: 56];

ROW2_9 : lcd_data <= row2_val[ 55: 48];

ROW2_A : lcd_data <= row2_val[ 47: 40];

ROW2_B : lcd_data <= row2_val[ 39: 32];

ROW2_C : lcd_data <= row2_val[ 31: 24];

ROW2_D : lcd_data <= row2_val[ 23: 16];

ROW2_E : lcd_data <= row2_val[ 15: 8];

ROW2_F : lcd_data <= row2_val[ 7: 0];

endcase

end

end

assign lcd_e = lcd_clk; // 数据在时钟高电平被锁存assign lcd_rw = 1'b0; // 只写

// -------------------------------------

// LCD1602驱动模块结束

// -------------------------------------

endmodule

LCD1602汇编显示程序

;1602显示ABC LCD_RS EQU P2.5 LCD_RW EQU P2.6 LCD_EN EQU P2.7 LCD_DATA EQU P3 ;----------------- ORG0000H JMP START ORG0030H ;----------------- LCD: CALL LCD_INIT MOV A, #80H CALL LCD_WCMD MOV A, #'A' CALL LCD_WDATA MOV A, #'B' CALL LCD_WDATA MOV A, #'C' CALL LCD_WDATA AJMP$ ;---------------- DELAY5MS: MOV R6, #10 DL1:DJNZ R7, $ DJNZ R6, DL1 RET ;---------------- LCD_INIT: CALL DELAY5MS MOV A, #38H CALL LCD_WCMD CALL DELAY5MS

CALL DELAY5MS MOV A, #06H CALL LCD_WCMD MOV A, #01H CALL LCD_WCMD MOV A, #0CH CALL LCD_WCMD RET ;===================================== LCD_WCMD: CALL CHECKBUSY CLR LCD_RS JMP W_LCD ;---------------- LCD_WDATA: CALL CHECKBUSY SETB LCD_RS W_LCD: CLR LCD_RW MOV LCD_DATA, A SETB LCD_EN NOP CLR LCD_EN RET ;---------------- CHECKBUSY: PUSH ACC MOV LCD_DATA, #255 CLR LCD_RS SETB LCD_RW BUSYLOOP: SETB LCD_EN NOP MOV A, LCD_DATA CLR LCD_EN JB ACC.7, BUSYLOOP POP ACC RET

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液晶显示实验实验报告及程序.doc

实验三 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.专业全拼+学号EXP8DISPLAY ” 主程序静态显示“ My information!” 四、实验原理

液晶显示的原理:采用的 LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。当 LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。 1.LCD1602采用标准的 14 引脚(无背光)或 16 引脚(带背光)接口,各 引脚接口说明如表: 编号符号引脚说明编号符号引脚说明 1VSS电源地9D2数据 2VDD电源正极10D3数据 3VL液晶显示偏压11D4数据 4RS数据/命令选择12D5数据 5R/W读/写选择13D6数据 6E使能信号14D7数据 7D0数据15BLA背光源正极 8D1数据16BLK背光源负极2. 1602 液晶模块内部的控制器共有11 条控制指令,如表所示:

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 读操作时序

LED灯实验报告

mcs-51单片机接口技术实验 适用:电气类专业本科学生 实验报告 实验一熟悉proteus仿真模拟器,led花样表演 一、实验目的 掌握以下方法: 1.在proteus的环境下,设计硬件原理图; 2.在keilc集成环境下设计c51语言程序; 2.在proteus的环境下,将硬件原理图与软件联接仿真运行。 二、实验环境 1.个人微机,windows操作系统 2.proteus仿真模拟器 3.keilc编程 三、实验题目 基本题:使用8051的并口带动8个led发光二极管显示一种花样表演。提高题:使用一个键切换实现3种以上花样表演。 四、实验类型: 学习、模仿与简单设计型。 五、实验步骤: 0、进入isis,先选择需要的元件,然后设计电原理图,保存文件; 1、在keilc软件集成环境下编写源程序,编译工程文件; 2、将所设计的硬件原理图与目标代码程序相联接; 4、按play键,仿真运行程序。 附,可能用到的元件名称: cpu:at89c51或任一种mcs-51家族cpu; 晶振:crystal; 电容器:capacitors,选22pf 电解电容:cap-elec或genelect10u16v 复位电阻:minres10k 限流电阻:minres330r 按键:button led:led-blue/red/yellow或diode-led (一)接线图如下: (二).基础花样 (四)程序流程图 (五)c程序 #include <> #define uint unsigned int #define uchar unsigned char const tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, /*正向流水灯*/ 0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,};/*反向流水灯*/ const tab2[]={0xff,0x00,0xff,0x00,0xff,0x00,}; void delay() { uint i,j; for(i=0;i<256;i++) for(j=0;j<256;j++)

lcd1602按键显示程序

#include<> #include<> //包含_nop_()函数定义的头文件 typedef unsigned int uint ; typedef unsigned char uchar ; sbit RS=P2^0; //寄存器选择位,将RS位定义为引脚 sbit RW=P2^1; //读写选择位,将RW位定义为引脚 sbit E=P2^2; //使能信号位,将E位定义为引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为引脚 " uchar keyscan(); void delay1ms(); void delay(unsigned char n); unsigned char BusyTest(void); void WriteInstruction (unsigned char dictate); void WriteAddress(unsigned char x); … void WriteData(unsigned char y); void LcdInitiate(void); void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++); } ! void delay(unsigned char n) { unsigned char i; for(i=0;i

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 所示:

单片机实验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个字节,模块在接收到最后一个字节后才开始执行整个命令的内

液晶的电光特性实验报告含思考题

西安交通大学实验报告 第1页(共9页)课程:_______近代物理实验_______ 实验日期:年月日 专业班号______组别_______交报告日期:年月日 姓名__Bigger__学号__报告退发:(订正、重做) 同组者__________教师审批签字: 实验名称:液晶的电光特性 一、 二、实验目的 1) 2)了解液晶的特性和基本工作原理; 3) 4)掌握一些特性的常用测试方法; 5) 6)了解液晶的应用和局限。 三、 四、实验仪器 激光器,偏振片,液晶屏,光电转换器,光具座等。 五、 六、实验原理 液晶分子的形状如同火柴一样,为棍状,长度在十几埃,直径为4~6埃,液晶层厚度一般为 5-8微米。排列方式和天然胆甾相液晶的主要区别是:扭曲向列的扭曲角是人为可控的,且“螺距” 与两个基片的间距和扭曲角有关。而天然胆甾相液晶的螺距一般不足1um,不能人为控制。扭曲向

列排列的液晶对入射光会有一个重要的作用,他会使入射的线偏振光的偏振方向顺着分子的扭曲方向旋转,类似于物质的旋光效应。在一般条件下旋转的角度(扭曲角)等于两基片之间的取向夹角。 对于介电各向异性的液晶当垂直于螺旋轴的方向对胆甾相液晶施加一电场时,会发现随着电场的增大,螺距也同时增大,当电场达到某一阈值时,螺距趋于无穷大,胆甾相在电场的作用下转变成了向列相。这也称为退螺旋效应。由于液晶分子的结构特性,其极化率和电导率等都具有各向异性的特点,当大量液晶分子有规律的排列时,其总体的电学和光学特性,如介电常数、折射率也将呈现出各向异性的特点。如果我们对液晶物质施加电场,就可能改变分子排列的规律。从而使液晶材料的光学特性发生改变,1963年有人发现了这种现象。这就是液晶的的电光效应。 为了对液晶施加电场,我们在两个玻璃基片的内侧镀了一层透明电极。将这个由基片电极、取向膜、液晶和密封结构组成的结构叫做液晶盒。根据液晶分子的结构特点,假定液晶分子没有固定的电极,但可被外电场极化形成一种感生电极矩。这个感生电极矩也会有一个自己的方向,当这个方向以外电场的方向不同时,外电场就会使液晶分子发生转动,直到各种互相作用力达到平衡。液晶分子在外电场作用下的变化,也将引起液晶合中液晶分子的总体排列规律发生变化。当外电场足够强时,两电极之间的液晶分子将会变成如图1中的排列形式。这时,液晶分子对偏振光的旋光作用将会减弱或消失。通过检偏器,我们可以清晰地观察到偏振态的变化。大多数液晶器件都是这样工作的。 图1液晶分子的扭曲排列变化 若将液晶盒放在两片平行偏振片之间,其偏振方向与上表面液晶分子取向相同。不加电压时,入射光通过起偏器形成的线偏振光,经过液晶盒后偏振方向随液晶分子轴旋转90°,不能通过检偏器;施加电压后,透过检偏器的光强与施加在液晶盒上电压大小的关系见图2;其中纵坐标为透光强度,横坐标为外加电压。最大透光强度的10%所对应的外加电压值称为阈值电压(U th),标志了液晶电光效应有可观察反应的开始(或称起辉),阈值电压小,是电光效应好的一个重要指标。最大透光强度的90%对应的外加电压值称为饱和电压(U r),标志了获得最大对比度所需的外加电压数值,U 小则易获得良好的显示效果,且降低显示功耗,对显示寿命有利。对比度D r=I max/I min,其中I max r 为最大观察(接收)亮度(照度),I min为最小亮度。陡度β=U r/U th即饱和电压与阈值电压之比。 图2液晶电光效应关系图

(完整版)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语言的规则的。 因此,我们利用状态机的思想,将写指令和写数据的两个进程合二为一。程序片段如下: 利用状态机,将写指令和写数据的各个步骤分为一个一个分立的状态,顺序执行。这样编写将对同一个引脚信号的变化放在一个进程中,很好的解决了之前存在的问题。

dsp实验报告 哈工大实验三 液晶显示器控制显示实验

实验三液晶显示器控制显示实验 一. 实验目的 通过实验学习使用2407ADSP 的扩展I/O 端口控制外围设备的方法,了解液晶显示器的显示控制原理及编程方法。 二. 实验设备 计算机,ICETEK-LF2407-EDU 实验箱。 三.实验原理 ICETEK-LF2407-A 是一块以TMS320LF2407ADSP 为核心的DSP 扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。 液晶显示模块的访问、控制是由2407ADSP 对扩展I/O 接口的操作完成。 控制I/O 口的寻址:命令控制I/O 接口的地址为0x8001,数据控制I/O 接口的地址为0x8003 和0x8004,辅助控制I/O 接口的地址为0x8002。 显示控制方法: ◆液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数 值将改变显示,写入“1”则显示一点,写入“0”则不显示。其地址与象素的对应 方式如下: ◆发送控制命令:向液晶显示模块发送控制命令的方法是通过向命令控制I/O 接口 写入命令控制字,然后再向辅助控制接口写入0。下面给出的是基本命令字、解释 和 C 语言控制语句举例。 ?显示开关:0x3f 打开显示;0x3e 关闭显示; ?设置显示起始行:0x0c0+起始行取值,其中起始行取值为0 至63; ?设置操作页:0x0b8+页号,其中页号取值为0-7; ?设置操作列:0x40+列号,其中列号为取值为0-63; ◆写显示数据:在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的 数据写入液晶显示模块的缓存。将数据发送到相应数据控制I/O 接口即可。

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引脚(带背光)接口,各引脚 接口说明如表:

lcd1602液晶封装函数

//端口定义 #define DBPort P0 //LCD数据端口 sbit LcdRs = P2^0; sbit LcdRw = P2^1; sbit LcdEn = P2^2; sbit Lcdbf = P0^7; //LCD忙标志Busy Flag void delay(unsigned int t) //延时 { while(t--); } void LCD_Wait(void) //读忙状态 { LcdRs=0; LcdRw=1; LcdEn=1;delay(10);LcdEn=0; //下降沿 while(Lcdbf) { LcdEn=0;LcdEn=1; //仿真才需要此语句,实际硬件中不需要} } void LCD_Write(bit style, unsigned char input) //写数据1/命令0 { LcdRs=style; LcdRw=0; DBPort=input; LcdEn=1;delay(10);LcdEn=0; LCD_Wait(); } void LCD_Initial(void) //初始化LCD { LCD_Write(0,0x38); //8位数据端口,2行显示,5*7点阵 delay(300); LCD_Write(0,0x0c); //显示模式 LCD_Write(0,0x01); //清屏 LCD_Write(0,0x06); //输入模式 } void GotoXY(unsigned char x, unsigned char y) //移动光标到指定位置{ if(y==0) LCD_Write(0,0x80|x);

51单片机控制1602LCD显示程序

LCD显示电路 #include sbit RS=P3^7; //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P3^6; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^7; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,将BF位定义为P0.7引脚 #define Lcd_Data P0 #include #include //包含_nop_()函数定义的头文件 unsigned char code string1[ ]= {0x77,0x75,0x20,0x79,0x61,0x6E,0x67,0x20,0x79,0x61,0x6E,0x67,0x20,0x20,0x20,0x20}; //第一行显示的字符 void Lcd_delay1ms() // 函数功能:延时1ms //注:不同单片机不同晶振需要对此函数进行修改 { unsigned char i,j; for(i=0;i<90;i++) for(j=0;j<33;j++); } void Lcd_delay(unsigned int n) // 函数功能:延时若干毫秒,入口参数:n { unsigned int i; for(i=0;i

/***************************************************** 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=0,不忙 ***************************************************/ bit Lcd_BusyTest(void) { bit result; RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; //E=1,才允许读写 _nop_(); //空操作 _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 result=BF; //将忙碌标志电平赋给result E=0; return result; } /***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数:dictate ***************************************************/ void Lcd_WriteCom (unsigned char dictate) { while(Lcd_BusyTest()==1); //如果忙就等待 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0; E=0; //E置低电平(写指令时就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_(); //空操作两个机器周期,给硬件反应时间 Lcd_Data=dictate; //将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令} /***************************************************** 函数功能:指定字符显示的实际地址 入口参数:x

液晶的电光特性实验报告含思考题

液晶的电光特性实验报 告含思考题 Revised as of 23 November 2020

西安交通大学实验报告 第 1 页(共 9 页) 课程:_______近代物理实验_______ 实验日期:年月日 专业班号______组别_______交报告日期:年月日 姓名__Bigger__学号__报告退发:(订正、重做) 同组者__ ________教师审批签字: 实验名称:液晶的电光特性 一、实验目的 1)了解液晶的特性和基本工作原理; 2)掌握一些特性的常用测试方法; 3)了解液晶的应用和局限。 二、实验仪器 激光器,偏振片,液晶屏,光电转换器,光具座等。 三、实验原理 液晶分子的形状如同火柴一样,为棍状,长度在十几埃,直径为4~6埃, 液晶层厚度一般为5-8微米。排列方式和天然胆甾相液晶的主要区别是:扭曲 向列的扭曲角是人为可控的,且“螺距”与两个基片的间距和扭曲角有关。而天 然胆甾相液晶的螺距一般不足1um,不能人为控制。扭曲向列排列的液晶对入 射光会有一个重要的作用,他会使入射的线偏振光的偏振方向顺着分子的扭曲 方向旋转,类似于物质的旋光效应。在一般条件下旋转的角度(扭曲角)等于两 基片之间的取向夹角。

对于介电各向异性的液晶当垂直于螺旋轴的方向对胆甾相液晶施加一电场时,会发现随着电场的增大,螺距也同时增大,当电场达到某一阈值时,螺距趋于无穷大,胆甾相在电场的作用下转变成了向列相。这也称为退螺旋效应。由于液晶分子的结构特性,其极化率和电导率等都具有各向异性的特点,当大量液晶分子有规律的排列时,其总体的电学和光学特性,如介电常数、折射率也将呈现出各向异性的特点。如果我们对液晶物质施加电场,就可能改变分子排列的规律。从而使液晶材料的光学特性发生改变,1963年有人发现了这种现象。这就是液晶的的电光效应。 为了对液晶施加电场,我们在两个玻璃基片的内侧镀了一层透明电极。将这个由基片电极、取向膜、液晶和密封结构组成的结构叫做液晶盒。根据液晶分子的结构特点,假定液晶分子没有固定的电极,但可被外电场极化形成一种感生电极矩。这个感生电极矩也会有一个自己的方向,当这个方向以外电场的方向不同时,外电场就会使液晶分子发生转动,直到各种互相作用力达到平衡。液晶分子在外电场作用下的变化,也将引起液晶合中液晶分子的总体排列规律发生变化。当外电场足够强时,两电极之间的液晶分子将会变成如图1中的排列形式。这时,液晶分子对偏振光的旋光作用将会减弱或消失。通过检偏器,我们可以清晰地观察到偏振态的变化。大多数液晶器件都是这样工作的。 图1 液晶分子的扭曲排列变化 若将液晶盒放在两片平行偏振片之间,其偏振方向与上表面液晶分子取向相同。不加电压时,入射光通过起偏器形成的线偏振光,经过液晶盒后偏振方

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

LCD1602显示屏的驱动设置及例程 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科 技公司的产品,它有16条引脚。如图1所示: 图1 再来一张它的背面的,如图2所示: 引脚号符号引脚说明引脚号符号引脚说明 1 VSS 电源地9 D 2 数据端口 2 VDD 电源正极10 D 3 数据端口 3 VO 偏压信号11 D 4 数据端口 4 RS 命令/数据12 D 5 数据端口 5 RW 读/写13 D 6 数据端口 6 E 使能14 D 7 数据端口 7 D0 数据端口15 A 背光正极

图3

图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):

图6 时序时间参数(如图7): 图7 三.DDRAM、CGROM和CGRAM DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下(如图8): 图8 DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。同样LCD1602共有80个字节的显存,即DDRAM。但L CD1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不

LCD1602-51单片机汇编程序

1602汇编程序,51单片机汇编程序,仅需修改引脚定义即可。晶振大小12M,程序测试完全正确。内部包含写数据、写命令(包括读忙和不读忙)、初始化等子函数。调用时先给LCD_DAT赋值,给出需要写入的数据或命令,然后调用。 ;端口引脚定义区 LCD_RS BIT P2.4 ;1602数据命令选择端口 LCD_RW BIT P2.5 ;1602读写选择端口 LCD_EN BIT P2.6 ;1602使能端口 LCD_DATA EQU P0 ;1602数据端口 ;变量声明区 ALL_FLAG EQU 20H ;标志位 LCD_FLAG EQU ALL_FLAG.7 ;1602读忙标志位 LCD_DAT EQU 30H ;1602数据命令字 DELAYED EQU 31H ;延时字 /***************************************** 1602读命令函数,高位存至LCD_LAG中 *****************************************/ LCD_R_DATA: MOV LCD_DATA,#0FFH LCD_BUSY: CLR LCD_RS SETB L CD_RW NOP SETB L CD_EN NOP MOV Acc,LCD_DATA MOV C,Acc.7 MOV LCD_FLAG,C CLR LCD_EN NOP JB LCD_FLAG,LCD_BUSY RET /***************************************** 1602写数据函数,数据存在LCD_DAT *****************************************/ LCD_W_DATA: LCALL LCD_R_DATA SETB L CD_RS CLR LCD_RW NOP MOV LCD_DATA,LCD_DAT

LCD显示实验..

昆明理工大学 微型计算机技术实验设计报告 设计项目名称:LCD显示实验 设计完成人:张恩寿王基春 班级:2011级电科111、112班 学号:201111103123 姓名:张恩寿学号:201111103223 姓名:王基春

一、实验目的 学习液晶显示的编程方法,了解液晶显示模块的工作原理。 掌握液晶显示模块与pc机的接口方法。 掌握点阵式LCD的工作原理、使用方法以及动态显示的编程方法。 二、所需设备 8086cpu试验箱、8255芯片、导线。 三、实验内容 编程实现在液晶显示屏上显示中文汉字,显示各自的名字。首先,显示器第一行从左到右依次显示“我是张恩寿腾”,然后,第二行倒序依次显示“我是王基 春冲”。 四、实验原理 (一)、液晶显示器LCD的工作原理 ,厚度各为1mm的玻璃板之间充满液晶材料,在结构上,LCD屏幕是用两块间距为5~7m 并在这两片玻璃板上设置两个透明电极构成的,屏幕最前面是彩色滤光膜,屏幕 的后面是背光源。 LCD中的背光源在反射板和光导板的作用下,变成平面光,射向液晶板,形成面光源。 液晶屏幕上的各单元即像素采用行列式结构,在没有电信号时,像素排成整齐的矩阵,使背光源发出的光畅通无阻的穿过。在液晶两边的电极加上信号电压后,液晶板就处 于电场中,液晶单元在电场作用下其状态不再整齐,从而引起各个像素点的透光 率发生改变,引起光线灰度有深浅变化。 每个像素点有对应的行位和列位,处于行列交叉点的一个液晶单元的扭曲状态决定于行位上的电极和列位上的电极之间的电压。组成LCD屏幕时,将同一行上的行位连在一 起,称为行电极,而将同一列上的列位连在一起,称为列电极。显示过程中,依 次往每个行电极加选通信号,而往每个列电极加要显示的信号,显示信号的强弱 决定了相应像素点液晶的扭曲状态,从而对光的穿透率产生控制作用。扭曲范围 越大,对比度越高。这样,通过控制电极信号的电压就可以控制像素点的亮度, 从而使屏幕产生不同亮度层次的图象。但如果没有彩色滤光膜,那么,这种图象 只能是黑白的。 要使LCD显示彩色影像,必须加上彩色滤光膜。彩色滤光膜中有一个具有绿光功能的彩色层,它让需要的光透过去,而把不需要的光阻挡住。和液晶板相对应,滤光膜中 的彩色层也分成许多像素单元。实际上,彩色层中的每个像素和液晶板上的每个 像素都由红绿蓝三个子像素构成,两者的子像素也一一对应。背光源发出的白光 透过液晶板以后,成为不同灰度层次的白色光线,照射到滤光膜上的红绿蓝三个

液晶的电光特性实验报告含思考题

告 第1 页(共9页)课程:_______近代物理实验_______?实验日期:? 年月日 专业班号______组别_______?交报告日期:?年 月日 姓名__Bigger__学号__报告退发:(订正、重做) 同组者__ ________?教师审批签字: 实验名称:液晶的电光特性 一、实验目的 1)了解液晶的特性和基本工作原理; 2)掌握一些特性的常用测试方法; 3)了解液晶的应用和局限。 二、实验仪器 激光器,偏振片,液晶屏,光电转换器,光具座等。 三、实验原理 液晶分子的形状如同火柴一样,为棍状,长度在十几埃,直径为4~6埃,液晶 层厚度一般为5-8微米。排列方式和天然胆甾相液晶的主要区别是:扭曲向列 的扭曲角是人为可控的,且“螺距”与两个基片的间距和扭曲角有关。而天然胆甾 相液晶的螺距一般不足1um,不能人为控制。扭曲向列排列的液晶对入射光会有 一个重要的作用,他会使入射的线偏振光的偏振方向顺着分子的扭曲方向旋转,类 似于物质的旋光效应。在一般条件下旋转的角度(扭曲角)等于两基片之间的取向 夹角。 对于介电各向异性的液晶当垂直于螺旋轴的方向对胆甾相液晶施加一电场时,会发现随着电场的增大,螺距也同时增大,当电场达到某一阈值时,螺距趋于无 穷大,胆甾相在电场的作用下转变成了向列相。这也称为退螺旋效应。由于液晶分

子的结构特性,其极化率和电导率等都具有各向异性的特点,当大量液晶分子有规律的排列时,其总体的电学和光学特性,如介电常数、折射率也将呈现出各向异性的特点。如果我们对液晶物质施加电场,就可能改变分子排列的规律。从而使液晶材料的光学特性发生改变,1963年有人发现了这种现象。这就是液晶的的电光效应。 为了对液晶施加电场,我们在两个玻璃基片的内侧镀了一层透明电极。将这个由基片电极、取向膜、液晶和密封结构组成的结构叫做液晶盒。根据液晶分子的结构特点,假定液晶分子没有固定的电极,但可被外电场极化形成一种感生电极矩。这个感生电极矩也会有一个自己的方向,当这个方向以外电场的方向不同时,外电场就会使液晶分子发生转动,直到各种互相作用力达到平衡。液晶分子在外电场作用下的变化,也将引起液晶合中液晶分子的总体排列规律发生变化。当外电场足够强时,两电极之间的液晶分子将会变成如图1中的排列形式。这时,液晶分子对偏振光的旋光作用将会减弱或消失。通过检偏器,我们可以清晰地观察到偏振态的变化。大多数液晶器件都是这样工作的。 图1液晶分子的扭曲排列变化 若将液晶盒放在两片平行偏振片之间,其偏振方向与上表面液晶分子取向相同。不加电压时,入射光通过起偏器形成的线偏振光,经过液晶盒后偏振方向随液晶分子轴旋转90°,不能通过检偏器;施加电压后,透过检偏器的光强与施加在液晶盒上电压大小的关系见图2;其中纵坐标为透光强度,横坐标为外加电压。最大透光强度的10%所对应的外加电压值称为阈值电压(Uth),标志了液晶电光效应有可观察反应的开始(或称起辉),阈值电压小,是电光效应好的一个重要指标。最大透光强度的90%对应的外加电压值称为饱和电压(Ur),标志了获得最大对 小则易获得良好的显示效果,且降低显示功耗,对比度所需的外加电压数值,U r 显示寿命有利。对比度D r =I max/Imin,其中Imax为最大观察(接收)亮度(照度),I min为最小亮度。陡度β= U r/ U th即饱和电压与阈值电压之比。

相关文档
最新文档