LCD1602液晶显示实验实验报告及程序.doc
LCD1602液晶显示实验报告

LCD1602液晶显示实验报告一、实验目的(1)了解LCD1602的基本原理,掌握其基本的工作流程。
(2)学习用Verilog HDL语言编写LCD1602的控制指令程序,能够在液晶屏上显示出正确的符号。
(3)能够自行改写程序,并实现符号的动态显示。
二、实验设备与器件Quartus II 软件、EP2C8Q208C8实验箱三、实验方案设计1.实验可实现的功能可以实现在LCD1602液晶屏第一行左侧第一位的位置循环显示0~9,并且可以用一个拨码开关BM8实现显示的复位功能。
2.LCD1602基本知识LCD1602液晶能够同时显示16x02即32个字符,模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如“A”。
1602通过D0~D7的8位数据端传输数据和指令。
3.系统工作原理系统的状态转换流程图如图3.1.1所示。
通过状态流程图可以看到,LCD1602液晶屏的状态是不断更新的,依次完成液晶的初始化和0~9的动态显示过程,并且过程可由开关控制。
if (!rst_n)cnt <= 0;elsecnt <= cnt + 1'b1;wire lcd_clk = cnt[23]; // (2^23 / 50M)=0.168s always@(posedge lcd_clk)if(cnt1>=24'd2)beginreg lcd_clk1;lcd_clk1=1;cnt1=0;endelsebegincnt1=cnt1+1; //cnt1对lcd_clk二分频lcd_clk1=0;endalways@(posedge lcd_clk1)beginrow1_val<=8'h30;//设初值case(row1_val) //数字0~9循环显示8'h30: row1_val<=8'h31;8'h31: row1_val<=8'h32;8'h32: row1_val<=8'h33;8'h33: row1_val<=8'h34;8'h34: row1_val<=8'h35;8'h35: row1_val<=8'h36;8'h36: row1_val<=8'h37;8'h37: row1_val<=8'h38;8'h38: row1_val<=8'h39;8'h39: row1_val<=8'h30;default: row1_val<=8'h30;endcaseendparameter 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;reg [5:0] current_state, next_state; // 现态、次态always @ (posedge lcd_clk, negedge rst_n)if(!rst_n) current_state <= IDLE;else current_state <= next_state;//在时钟信号作用期间,次态重复的赋给现态alwaysbegincase(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_ADDR;default : next_state = IDLE ;endcaseendalways @ (posedge lcd_clk, negedge rst_n)beginif(!rst_n)beginlcd_rs <= 0;lcd_data <= 8'hxx;endelsebegincase(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;endcasecase(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'h04;CURSOR_SET2 : lcd_data <= 8'h0C;ROW1_ADDR : lcd_data <= 8'h80;ROW1_0 : lcd_data <= row1_val[127:120];endcaseendendassign lcd_e = lcd_clk; // 数据在时钟高电平被锁存assign lcd_rw = 1'b0; // 只写endmodule5.下载电路及引脚分配设计设计中用实验箱自带的50MHz时钟信号作为输入端,用sel0、sel1、sel2三个使能端选通LCD1602液晶屏,EP2C8Q208C8就会工作在给液晶下命令的状态,使得点阵正常工作,如图3.5.1所示。
LCD1602液晶显示器

实验11:1602液晶显示屏显示(字符型液晶显示器)字符型液晶显示器用于数字、字母、符号并可显示少量自定义符号。
这类液晶显示器通常有16根接口线,下表是这16根线的定义。
字符型液晶接口说明编号符号引脚说明编号符号引脚说明1 Vss 电源地 9 D2 数据线22 Vdd 电源正 10 D3 数据线33 VL 液晶显示偏压信号 11 D4 数据线44 RS 数据/命令选择端 12 D5 数据线55 R/W 读/ 写选择端 13 D6 数据线66 E 使能信号 14 D7 数据线77 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结尾。
如果字符串的长度超过了从该列开始可显示的最多字符数,则其后字符被截断,并不在下行显示出来。
LCD1602液晶显示C程序

1、关于1602液晶的电气参数一般市场上的1602液晶使用的驱动器为HD44780U或HD44780S,市场上大部分液晶用的是后者。
HD44780S的供电电压为5V±10%,而HD44780U的供电电压为2.7V~5.5V。
也就是说,绝大部分1602液晶只能工作在5V电压下,其供电电压必须为5V。
经过试验发现,1602液晶的供电虽然必须为5V,但其控制总线和数据总线可以用3.3V电平(因为对于TTL电平,一般大于2.5V以上都算高电平,不过最可靠的是大于3.6V),只不过在3.3V电平下,数据的通信速度会大大降低,这一点需要在写驱动时注意。
需要时,可以将MCU的IO配置为漏极开路方式,用上拉电阻拉到5V电平;实在不能配置为漏极开路方式时,请查阅MCU的电气参数,在允许的条件下,直接使用电阻弱上拉也可以。
2、硬件连接1602液晶可以使用4位或8位通信模式,通信可以是双向的或单向的,双向通信主要是为了读取LCD忙标志和AC地址寄存器和DDRAM和CGRAM中的值,一般用处不大,因为1602不支持点阵绘图功能。
在连接时,注意4位通信方式下,LCD只使用DB7~DB4,一般情况下会使用MCU 某端口的高4位或低4位与之连接,注意写驱动时在必要的情况下对端口的其它几位要保护,防止破坏其数据;当然如果没有使用其它4位时则不必要保护(奇怪,不使用其它4位干嘛用4位通信方式嘛?)。
还要注意的是,如果需要双向通信,则必须选择既能做输入又能做输出的IO口,特别是对于RS、RW和E这三条控制线,若能选择支持位寻址的IO口则可以方便编程。
3、底层驱动问题通用1602液晶的时序如图:(1)、写时序(2)、读时序总的说来,按照这个时序图来编写驱动程序是不会出什么问题的,只是要深刻理解时序图中各参数的涵义。
编程中要特别关注E这根控制线。
写操作的时序应该是:①、RS=0(写指令寄存器)或RS=1(写数据寄存器);②、RW=0(写操作);③、将数据写到数据线上;④、E=1;⑤、E=0 。
LCD1602液晶显示实验报告

LCD1602液晶显示实验报告实验报告:LCD1602液晶显示实验实验目的:1.了解LCD1602液晶显示的工作原理和基本结构;2.掌握LCD1602液晶显示的驱动控制方法;3.能够通过Arduino控制LCD1602液晶显示。
实验材料:1.Arduino UNO开发板2.LCD1602液晶显示屏3.面包板4.杜邦线实验步骤:1.将Arduino UNO开发板与面包板连接,确保连接正确并牢固;2.将LCD1602液晶显示屏与面包板连接,连接时应注意引脚的对应关系,确保连接正确;3.将杜邦线的一端连接到Arduino UNO开发板的数字引脚上,另一端连接到对应的液晶显示屏引脚上;4.编写Arduino代码,实现液晶显示屏的控制功能;5.将编写好的代码上传到Arduino UNO开发板上,运行程序,观察LCD1602液晶显示屏上的显示结果。
实验结果:通过实验,我们成功实现了对LCD1602液晶显示屏的控制。
在液晶显示屏上可以显示出我们想要的文字、数字或符号。
通过控制液晶显示屏的引脚电平,可以控制液晶显示出不同的字符。
实验总结:通过本次实验,我们了解了LCD1602液晶显示的工作原理和基本结构。
液晶显示屏通过控制引脚电平来控制液晶分子的排列,从而实现文字、数字或符号的显示。
我们还掌握了LCD1602液晶显示的驱动控制方法,通过编写Arduino代码,我们能够实现对液晶显示屏的控制。
在实验中,我们还学习到了Arduino的使用,它是一款开放源代码的电子原型平台,由硬件和软件组成。
通过编写Arduino代码,我们可以控制与Arduino连接的各种外设,包括LCD1602液晶显示屏。
通过本次实验,我们不仅加深了对LCD1602液晶显示的理解,还学会了使用Arduino控制液晶显示屏。
这对我们的电子制作和嵌入式系统开发有重要意义。
单片机LCD显示实验报告

单片机LCD显示实验报告实验目的:本实验旨在通过使用单片机控制LCD进行显示,掌握单片机与外围设备的交互操作,学习并理解LCD显示原理。
实验器材:1. 单片机开发板2. LCD1602液晶显示屏3. 杜邦线若干4. 电阻若干实验原理:液晶显示原理是在液晶材料施加电场的作用下,通过改变传输光的偏振状态来实现图像显示。
本实验使用的LCD1602是一种16×2的字符型液晶显示模块,其中每个字符由5×8的点阵构成。
实验步骤:1. 连接电路:将LCD1602与单片机开发板通过杜邦线连接。
一般来说,液晶显示屏的引脚布局如下:- VSS: 接地- VDD: 供电(一般为5V)- V0:对比度控制端(通过电位器调节)- RS:数据/指令选择端(通常连接到单片机的I/O口)- RW:读写选择端(连接至地)- E:使能端(通常连接到单片机的I/O口)- D0-D7:数据线(连接到单片机的I/O口)- A:背光灯正极(连接5V)- K:背光灯负极(连接至地)2. 编写程序:根据实验要求,使用相应的单片机编程语言编写程序。
在程序中,需要调用相关的LCD1602命令来实现字符的显示。
3. 烧录程序:使用相应的烧录工具将编写好的程序下载到单片机开发板中。
4. 实验验证:将开发板上电,通过观察LCD1602的显示情况来验证程序的正确性。
实验结果与分析:在本次实验中,我使用单片机控制LCD1602成功实现了字符的显示。
实验结果表明,编写的程序能够正确地将字符显示在液晶屏上,并且显示效果良好。
实验中遇到的问题及解决方法:在实验过程中,我遇到了一些问题,例如LCD1602无显示、乱码或显示异常等情况。
针对这些问题,我采取了以下解决方法:1. 检查接线是否正确:确保LCD1602的引脚与单片机开发板之间的连接准确无误。
2. 检查电源供应:确认LCD1602的电源供应是否正常,电源电压是否稳定。
3. 调整对比度:通过旋转电位器调整LCD1602的对比度,以适应不同环境下的显示效果要求。
功能完整的1602LCD时钟实验

功能完整的1602LCD时钟实验摘要本设计基于单⽚机技术原理,以单⽚机芯⽚STC89C52作为核⼼控制器,通过硬件电路的制作以及软件程序的编制,设计制作出⼀个多功能数字时钟系统。
单⽚机扩展的LCD显⽰器⽤来显⽰年、⽉、⽇、时、分、秒计数单元中的值。
整个设计包括两⼤部分: 硬件部分和软件部分,以单⽚机为核⼼, 配以⼀定的外围电路和软件。
硬件是整个系统的基础, 软件部分则要合理、充分地⽀持和使⽤系统的硬件, 从⽽完成系统所要完成的任务。
本设计采⽤LCD液晶显⽰,电路简单使⽤⼴泛。
该时钟系统主要由时钟模块、闹钟模块、液晶显⽰模块、键盘控制模块以及信号提⽰模块组成。
能够准确显⽰时间(显⽰格式为年:⽉:⽇:时时:分分:秒秒,24⼩时制),可随时进⾏时间调整,具有闹钟时间设置、闹钟开/关、⽌闹功能。
设计以硬件软件化为指导思想,充分发挥单⽚机功能,⼤部分功能通过软件编程来实现,电路简单明了,系统稳定性⾼。
单⽚机在这种情况下诞⽣了基于单⽚机电⼦时钟。
关键词:单⽚机 LCD1602 数字钟This design based on the single chip microcomputer principle, taking single-chip chip STC89C52 as core controller, through the hardware circuit and software production procedure formulation, designed and produced a multi-function digital clock system. SCM extended LCD display used to display date and time, minutes and seconds counting unit of values. The whole design includes two parts, hardware and software of, based on singlechip, match with certain peripheral circuit and software. Hardware is based in the whole system, the software part then be reasonable and fully support and use the system hardware, thus completing system to complete the task. This design USES the LCD, simple circuit is widely used. This clock system mainly by the clock module, alarm module, LCD module, keyboard control module and signal hint module. To accurately display the time (display format for years: month: day: always: component: seconds seconds, 24-hour system), available for time to adjust, with alarm time setting, alarm clock on/off, stop joking function. Design with hardware and software into guiding ideology, give full play to the SCM functions, most functions through software programming realize, circuit straightforward, stability of the system is high. SCM in this case was born based on single-chip electronic clock. Keywords: SCM LCD1602 digital clock前⾔数字钟是采⽤数字电路实现对时,分,秒数字显⽰的计时装置,⼴泛⽤于个⼈家庭,车站, 码头办公室等公共场所,成为⼈们⽇常⽣活中不可少的必需品,由于数字集成电路的发展和⽯英晶体振荡器的⼴泛应⽤,使得数字钟的精度,远远超过⽼式钟表, 钟表的数字化给⼈们⽣产⽣活带来了极⼤的⽅便,⽽且⼤⼤地扩展了钟表原先的报时功能。
LCD1602中文资料(程序和使用说明)

在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。
因此,液晶显示器画质高且不会闪烁。
数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
LCD1602液晶显示实验实验报告及程序

LCD1602液晶显示实验实验报告及程序一、实验目的本次实验的主要目的是熟悉并掌握 LCD1602 液晶显示屏的工作原理和编程方法,能够成功实现字符在液晶屏幕上的显示和控制。
二、实验原理LCD1602 是一种工业字符型液晶,能够显示 16x2 个字符,即每行16 个字符,共 2 行。
它的工作原理是通过控制液晶分子的偏转来实现字符的显示。
LCD1602 有 16 个引脚,主要引脚功能如下:1、 VSS:接地。
2、 VDD:接电源(通常为+5V)。
3、 V0:对比度调整引脚,通过外接电位器来调节屏幕显示的对比度。
4、 RS:寄存器选择引脚,高电平时选择数据寄存器,低电平时选择指令寄存器。
5、 RW:读写选择引脚,高电平时进行读操作,低电平时进行写操作。
6、 E:使能引脚,下降沿触发。
7、 D0 D7:数据引脚,用于传输数据和指令。
LCD1602 的指令集包括清屏、归位、输入方式设置、显示开关控制、光标或显示移位、功能设置、CGRAM 和 DDRAM 地址设置以及读忙标志和地址等。
三、实验设备与材料1、单片机开发板2、 LCD1602 液晶显示屏3、杜邦线若干4、电脑四、实验步骤1、硬件连接将 LCD1602 的 VSS 引脚接地。
将 VDD 引脚接+5V 电源。
将 V0 引脚通过一个 10K 的电位器接地,用于调节对比度。
将 RS、RW、E 引脚分别连接到单片机的三个 I/O 口。
将 D0 D7 引脚连接到单片机的 8 个 I/O 口。
2、软件编程包含必要的头文件。
定义与 LCD1602 连接的 I/O 口。
编写初始化函数,包括设置显示模式、清屏、输入方式等。
编写写指令函数和写数据函数,用于向LCD1602 发送指令和数据。
编写显示字符串函数,实现字符在屏幕上的显示。
3、编译下载程序使用编译软件对编写的程序进行编译,生成可执行文件。
将可执行文件下载到单片机开发板中。
4、观察实验结果给开发板上电,观察 LCD1602 液晶显示屏上是否正确显示预设的字符。
实验八 LCD1602液晶显示实验

电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:单片机原理与接口技术实验3、芯片时序表:4、LCD数据存储器地址LCD内置了DDRAM,用来寄存待显示的字符代码。
其地址与屏幕的对应关系如下:也就意味着想要在LCD1602的第一行第一列显示一个“A”字符,就要向DDRAM的00H地址写入“A”,但是在实际写入时,还必须将00H加上80H,即0X80+0X00。
以此类推,如果想要在LCD1602的第二行的第二列显示字符内容,则实际写入地址应该为0X80+0X41。
5、1602LCD的一般初始化(复位)过程(1) 延时15ms。
(2) 写指令38H(不检测忙信号)。
(3) 延时5ms。
(4) 写指令38H(不检测忙信号)。
(5) 延时5ms。
(6) 写指令38H(不检测忙信号)。
(7) 以后每次写指令、读/写数据操作均需要检测忙信号。
(8) 写指令38H:显示模式设置。
(9) 写指令08H:显示关闭。
(10) 写指令01H:显示清屏。
(11) 写指令06H:显示光标移动设置。
(12) 写指令0CH:显示开及光标设置。
6、LCD1602与单片机直接连接典型示意图如图8.1所示。
图8.1 LCD1602液晶显示。
三、实验内容和步骤1、用Proteus设计一LCD1602液晶显示接口电路。
参考实验指导书上的参考程序,编写程序,实现字符的静态显示。
显示字符为:第一行:“姓名全拼(居中)”,第二行:“专业全拼+学号(后3位)”。
将LCD显示截图以及相应的程序保存在下方。
#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" xuzhulin ";uchar code table1[]="zidonghua 031";sbit lcden=P2^7;sbit lcdrw=P2^6;sbit lcdrs=P2^5;uchar num;for(num=0;num<12;num++){write_data(table[num]); //写数据,LCD的第一行显示delay(200);}write_com(0x02); //光标返回write_com(0x80+0x40); //设置数据地址指针,LCD第二行显示for(num=0;num<16;num++){write_data(table1[num]);delay(200);}while(1);}}2、在上一题的基础上,增加两个外部中断,实现不同内容的显示。
实验七:LCD1602的显示

实验七:LCD1602的显示
一、实验目的
熟悉并掌握液晶1602 显示屏的使用方法,学习利用有限状态机实现较为复杂的设计与应用。
二、实验设备
硬件:Super Hornet FPGA 核心板及Super Hornet扩展板,LCD1602
软件:QuartusII 9.1开发工具。
三、实验原理
本实验采用的是一个2 行16 字符液晶显示屏LCD,它由HD44780、HD44100 及几个电阻电容组成,详细资料参考1602 LCD字符模块使用手册,这里不再累述。
1602上电后,必须传送给液晶显示屏控制芯片初始化命令,初始化结束后,还要传输指定地址、显示字符的编码数据,接通电源后,FPGA 向液晶显示屏控制芯片发送指令的流程如
下图所示。
四、实验步骤
本实验由LCD时钟模块、LCD控制模块、LCD显示模块组成。
本实验源工程位于:\Super_Hornet_FPGA\Verilog\
EX7_LCD1602 目录下,用户可以从中查看实验内容五、对应引脚
六、实验现象
LCD显示。
实验三 LCD显示实验

实验三LCD显示实验实验学时:2实验类型:设计实验要求:必修一、实验目的通过本实验的学习,使学生熟悉LCD1602,了解液晶显示屏的使用及其电路设计方法,初步掌握液晶的控制方式和显示的方法;二、实验内容采用LCD1602进行电路设计,并编写程序实现LCD显示。
三、实验原理、方法和手段1.液晶显示屏液晶显示屏(LCD,Liquid Crystal Display)主要用于显示文本及图形信息。
液晶显示屏具有轻薄、体积小、耗电量低、无辐射危险、平面直角显示以及影像稳定不闪烁等特点;因此,在许多电子应用系统中,常使用液晶显示屏作为人机界面。
本实验采用的1602液晶模块是2行16个字的显示模块,其内部有80*8位的RAM数据缓冲区。
2.主要技术参数3.1602引脚介绍1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚1602液晶显示模块可以和单片机A T89C51直接接口,电路如图所示(仅供参考):4.1602字符代码对应关系1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(xxH),显示时模块把地址xxH中的点阵字符图形显示出来,我们就能看到字母“A”5.1602指令1602液晶模块内部的控制器共有11条控制指令,如表2所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
lcd1602显示及测试程序

本程序共分为三个文件:Main.c Lcd1602.c Lcd1602.h/************文件Main.c*************/#include<reg52.h>#include<Lcd1602.h>#define uchar unsigned char#define uint unsigned intvoid delay_ms(uint x){uint i,j;for(i=0;i<x;i++)for(j=0;j<120;j++);}void main(){Lcd_init();Write_char(0,10,'a');Write_string(1,0,"b b");delay_ms(1000);Clear_line(0);Write_string(0,0,"clear 0 line OK!");delay_ms(1000);Clear_line(1);Write_string(1,0,"clear 1 line OK!");delay_ms(1000);Clear_all();Write_string(0,1,"Clear all Ok!") ;while(1);}/********文件Lcd1602.c**************/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define Nop _nop_()#define Lcd_data P0 /*数据口*/#define busy 0x80 /*检测忙状态*/sbit rs = P2^4;sbit rw = P2^5;sbit en = P2^6;void delay(uchar x){uchar i,j;for(i=0;i<x;i++)for(j=0;j<125;j++); }/*写命令*/void Write_com(uchar com) {rs = 0;delay(5);rw = 0;delay(5);Lcd_data = com;delay(5);en = 0;delay(10);en =1;delay(10);}/*写数据*/void Write_data(uchar dat) {rs = 1;delay(5);rw = 0;delay(5);Lcd_data = dat;delay(10);en =0;delay(5);en = 1;delay(10);}/*初始化*/void Lcd_init(){Lcd_data = 0x00;delay(15);Write_com(0x38);delay(5);Write_com(0x38);delay(5);Write_com(0x38);delay(5);Write_com(0x38); /*显示模式设置*/Write_com(0x08); /*显示关闭*/Write_com(0x01); /*显示清屏*/Write_com(0x06); /*显示光标移动设置*/Write_com(0x0c); /*显示开及光标设置*/}void Write_char(uchar x,uchar y,uchar dat){x &=0x1; /*限制x不能大于1*/y &=0xf; /*限制y不能大于15*/if(x)y |= 0x40 ; /*如果y大于1,则在第二行显示*/ y |= 0x80;Write_com(y);Write_data(dat);}void Write_string(uchar x,uchar y,uchar *str){uchar length = 0;x &=0x1; /*限制x不能大于1*/y &=0xf; /*限制y不能大于15*/while(*str!='\0'){Write_char(x,y,*str);y++;str++;}}void Clear_line(uchar line){Write_string(line,0," ");switch(line){case 0: Write_com(0x80);case 1: Write_com(0x80+0x40);default : break;}}void Clear_all(){Write_com(0x01);Write_com(0x80);}/**********文件Lcd1602.h**************/#define uchar unsigned char#define uint unsigned int#ifndef Lcd1602_h#define Lcd1602_hextern Lcd_init();extern Write_data(uchar dat);extern Write_char(uchar x,uchar y,uchar dat);extern Write_string(uchar x,uchar y,uchar *dat);extern Clear_line(uchar line);extern Clear_all();#endif已经测试通过,由于百度文库不能上传压缩包,故分三个文件。
制作一个采用LCD1602显示的电子钟

计算机科学与工程系实验报告实验题目:制作一个采用LCD1602显示的电子钟班级:姓名:学号:日期:一、实验目的掌握单片机使用定时器/计数器控制字符型液晶显示器LCD1602的设计与软件编程二、实验要求在LCD上显示当前的时间。
显示格式为“时时:分分:秒秒”。
设有4个功能键k1~k4,功能如下:(1)k1——进入时间修改。
(2)k2——修改小时,按一下k2,当前小时增1。
(3)k3——修改分钟,按一下k3,当前分钟增1。
(4)k4——确认修改完成,电子钟按修改后的时间运行显示。
三、实验要求提交的实验报告中应包括:电路原理图、实验设计思路、C51源程序(含注释语句)、运行效果(含运行截图与说明)、实验小结三、硬件电路原理图的设计四、编程思路及C51源程序编程思路:1、实现当按下K1之后,使中断T0停止计数2、实现当按下K2之后,使小时加一3、实现当按下K3之后,使分钟加一4、实现当按下K4之后,使中断T0恢复计数源程序:#include<reg51.h>#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#define uchar unsigned char#define uint unsigned intsbit lcdrs = P2^0;sbit lcdrw = P2^1;sbit lcden = P2^2;void delay(uint z)//延时函数,此处使用晶振为11.0592MHz {uint x,y;for(x=z;x>0;x--){for(y=110;y>0;y--){;}}}void write_com(uchar com) //写入指令数据到lcd{lcdrw=0;lcdrs=0;P3=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) //写入字符显示数据到lcd{lcdrw=0;lcdrs=1;P3=date;delay(5);lcden=1;delay(5);lcden=0;}void init1602()//1602液晶初始化设定{lcdrw=0;lcden=0;write_com(0x3C);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);}/*void write_string(uchar *pp,uint n)//采用指针的方法输入字符,n为字符数目{int i;for(i=0;i<n;i++)write_data(pp[i]);}*/void write_sfm(uchar add,uchar date)//向指定地址写入数据{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}#endif#define uchar unsigned char#define uint unsigned intsbit Key1 = P1^0;sbit Key2 = P1^1;sbit Key3 = P1^2;sbit Key4 = P1^3;uchar int_time;//定义中断次数计数变量uchar second;//秒计数变量uchar minute;//分钟计数变量uchar hour;//小时计数变量uchar code date[]=" H.I.T. CHINA ";//LCD第1行显示的内容uchar code time[]=" TIME 23:59:55 ";//LCD第2行显示的内容uchar second=55,minute=59,hour=23;void clock_init(){uchar i,j;for(i=0;i<16;i++){write_data(date[i]);}write_com(0x80+0x40);for(j=0;j<16;j++){write_data(time[j]);}}void clock_write( uint s, uint m, uint h){write_sfm(0x47,h);write_sfm(0x4a,m);write_sfm(0x4d,s);}void Keyscan1(){if(Key1==0) {delay(10);if(Key1==0) while(!Key1); TR0=0;}if(Key4==0) {delay(10);if(Key4==0) while(!Key4); TR0=1;}if(Key3==0){delay(10);if(Key3==0)while(!Key3);minute++;if(minute==60)minute=0;} if(Key2==0){delay(10);if(Key2==0)while(!Key2);hour++;if(hour==24)hour=0;}}void main(){init1602();//LCD初始化clock_init();//时钟初始化TMOD=0x01;//设置定时器T0为方式1定时EA=1; // 总中断开ET0=1; // 允许T0中断TH0=(65536-46483)/256;//给T0装初值TL0=(65536-46483)%256;TR0=1;int_time=0;//中断次数、秒、分、时单元清0second=55;minute=59;hour=23;while(1){clock_write(second ,minute, hour);Keyscan1();}}void T0_interserve(void) interrupt 1 using 1 //T0中断服务子程序{int_time++;//中断次数加1if(int_time==20) //若中断次数计满20次{int_time=0; //中断次数变量清0second++;//秒计数变量加1}if(second==60)//若计满60s{second=0; //秒计数变量清0minute ++;//分计数变量加1}if(minute==60)//若计满60分{minute=0;//分计数变量清0hour ++;//小时计数变量加1}if(hour==24){hour=0;//小时计数计满24,将小时计数变量清0 }TH0=(65536-46083)/256;//定时器T0重新赋值TL0=(65536-46083)%256;}五、仿真运行效果展示仿真初始状态按下k1键,进入修改模式六、实验小结通过本次实验,我掌握了LCD1602编程的方法,将所学知识运用到实践中,这是一件慢慢的过程,首先要把理论知识理解透彻,然后就是例题看懂,弄懂举一反三。
LCD1602原理与显示程序

LCD1602原理与显示程序首先,液晶显示屏是由液晶分子填充在两块平行的玻璃基板之间组成的。
每个液晶分子都是一个由长链有机分子构成的棒状结构,其中的双键允许分子在电场的作用下进行旋转。
液晶分子通过平行阵列技术排列,使得液晶屏幕变为一个有序的结构,可以透过光束。
在液晶显示屏的基板上有多个透明电极排列,它们分别与控制芯片连接。
控制芯片通过对这些电极施加电压,调整液晶的扭曲程度。
当没有电压施加在液晶上时,液晶分子处于平行排列的状态,光线经过液晶屏会发生旋转,从而可以通过另一边的透光板透过。
当电压施加到液晶上时,液晶分子会以一定的角度旋转,光线经过时则发生偏波而无法穿过。
这样就实现了液晶显示屏的亮暗变化。
为了实现文字和图形的显示,我们需要通过控制芯片向液晶屏发送指令和数据。
控制芯片和液晶显示屏之间的连接是通过并行通信实现的,常用的通信方式是使用4位或8位并行数据线。
在发送指令和数据之前,我们需要将控制芯片配置为指令或数据模式。
指令模式下,控制芯片接收的数据被视为设定控制参数,比如清屏、光标移动等;数据模式下,控制芯片接收的数据被视为要显示的字符或图形。
液晶显示屏的显示程序可以使用任意的微控制器或单片机来编写。
程序的基本思路是通过对控制芯片发送指令和数据来控制液晶屏的显示。
首先,我们需要初始化液晶显示屏,这包括设置通信参数、清屏、光标重置等操作。
然后,我们可以通过写入数据寄存器来显示字符或图形。
通过控制芯片提供的指令,可以实现光标的位置移动、屏幕的滚动、光标的显示和隐藏等功能。
在程序中,我们可以定义字符和图形的数据,然后通过写入数据寄存器将其显示在液晶屏上。
有些控制芯片还提供了自定义字符的能力,可以通过修改字符发生器生成字符的模式来实现。
总结起来,LCD1602的原理是通过调整液晶的光透过性来实现显示,显示程序通过控制芯片向液晶屏发送指令和数据来控制显示内容。
程序的基本思路是初始化液晶显示屏,然后通过写入数据寄存器来显示字符或图形,通过发送指令来实现其他功能。
LCD1602液晶显示

实验十一、LCD1602液晶显示一、实验目的1、熟悉Protuse仿真软件的使用;2、熟悉利用Keil软件编译程序的过程;3、了解LCD1602液晶显示器的工作原理及学会翻阅芯片的数据手册;4、掌握LCD1602液晶显示器的驱动流程和编程方法。
二、实验内容LCD1602液晶显示器的驱动流程:1、写操作(写指令(RS=0)和写数据(RS=1))1.1、写指令函数write_cmd(u8 cmd)1.2、写数据函数write_data(u8 dat)2、初始化液晶2.1、归位write_cmd(0x02);2.2、设置输入方式write_cmd(0x06);2.3、控制显示开关write_cmd(0x0c);2.4、功能设置write_cmd(0x38);2.5、清屏write_cmd(0x01);3、写显示的数据3.1、选择显示的行write_cmd(0x80);3.2、写显示的数据write_data(‘I’);Protuse 仿真环境的搭建:1、在Pick Devices中查找所需要的器件AT89C51、LM061L、RESPACK-8;同时搭建晶振电路和复位电路。
2、将其按照(图11.1)进行相连;3、将生成的.hex文件导入AT89C51芯片中进行仿真实验。
三、实验过程Keil软件程序:#include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned char u8; //对数据类型进行声明定义typedef unsigned int u16;#define DATA P0sbit rs = P2^1; //寄存器选择变量sbit rw = P1^5; //读写操作选择变量sbit en = P1^6; //工作使能变量void delay(u16 num) //延时函数{u16 x,y;for (x=num; x>0; x--)for(y=110; y>0; y--);}void write_cmd (u8 cmd) //写指令函数{rs = 0; //指令寄存器rw = 0; //写操作DATA = cmd;delay(5);en = 1;delay(5);en = 0;}void write_data (u8 dat) //写数据函数{rs = 1; //数据寄存器rw = 0; //写数据DATA = dat;delay(5);en = 1;delay(5);en = 0;}void lcd_init (void) //液晶初始化函数{write_cmd(0x02); //归位write_cmd(0x06); //输入方式,AC自动加1,画面不动write_cmd(0x0c); //显示开关开,光标开,闪烁关write_cmd(0x38); //功能设置,8位数据接口,两行显示,5*7点阵字符write_cmd(0x01); //清屏}int main (void){ u8 *string="I Love You";u8 n=0;u8 dp=0xc0; //第二行初位信息rw = 0;rs = 0;en = 0;lcd_init();write_cmd(0x80); //第一行初位信息write_data('I');write_data(' ');write_data('L');write_data('O');write_data('V');write_data('E');write_data(' ');write_data('D');write_data('P');write_data('J');write_cmd(dp); //第二行while(*string!='\0'){ write_cmd(dp);dp++;write_data(*string);string++;n++;}while(1);}Protuse 仿真:图11.1 LCD液晶显示实验四、实验现象在AT89C51芯片中下载程序后LCD液晶显示屏上显示”I lOVE DPJ”和”I Love You”两行字符。
实验八 LCD1602液晶显示实验

实验报告八实验名称:LCD1602液晶显示实验实验目的:1了解LCD显示的基本原理2了解LCD的接口与控制方法3掌握LCD显示图形的方法4掌握LCD显示字符的方法实验原理:1、LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。
因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。
,2、由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。
驱动模块具有八位数据总线,外加一些电源接口和控制信号。
而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。
由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。
硬件原理图:1602液晶显示模块可以和单片机AT89C51直接接口,电路如图下图所示:PROTEUS中仿真观察结果.图一程序如下所示:RS EQU p2.6RW EQU p2.5E EQU p2.7ORG 0000HMOV SP , #70HMOV p0, #01HCALL ENABLEMOV p0, #38HCALL ENABLEMOV p0, #0FHCALL ENABLEMOV p0, #06HCALL ENABLEMOV p0, #80HCALL ENABLEMOV DPTR, #TABLE1CALL WRITE1MOV p0, #0C0HCALL ENABLEMOV DPTR, #TABLE2CALL WRITE1MOV p0, #0C2HCALL ENABLEJMP $ENABLE: CLR RSCLR RWCLR ECALL DELAYSETB ERETWRITE1: MOV R1, #00HA1: MOV A, R1MOVC A, @A+DPTRCALL WRITE2INC R1CJNE A, #00H, A1RETWRITE2: MOV p0 , ASETB RSCLR RWCLR ECALL DELAYSETB ERETDELAY: MOV R4, #05D1: MOV R5, #0FFHDJNZ R5, $DJNZ R4, D1RETTABLE1: DB" XIA MEN GUANJIE ",00HTABLE2: DB"XIAN SHI QI TECHNOLOGY ",00H END程序流程图如下所示:实验现象:从左往右逐字显示,闪动两次,清屏,再从右往左显示,闪动两次,清屏,安周期性重复上述现象!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三 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 条控制指令,如表所示:3.芯片时序表:4. 1602LCD的一般初始化 ( 复位 ) 过程(1)延时 15ms。
(2)写指令 38H(不检测忙信号 ) 。
(3)延时 5ms。
(4)写指令 38H(不检测忙信号 ) 。
(5)延时 5ms。
(6)写指令 38H(不检测忙信号 ) 。
(7)以后每次写指令、读/写数据操作均需要检测忙信号。
(8)写指令 38H:显示模式设置。
(9)写指令 08H:显示关闭。
(10)写指令 01H:显示清屏。
(11)写指令 06H:显示光标移动设置。
(12)写指令 0CH:显示开及光标设置。
五、实验步骤1.用 Proteus 设计 1602 液晶显示接口电路;2.在Keil C51中编写液晶显示控制程序,编译通过后,与Proteus 联合调试;3.按动功能键,观察字符及效果是否正确显示。
六、电路设计调试及程序1)实验电路LCD1LM016LS D ESW 01234567S D EVVVRREDDDDDDDD1 2 34 5 678 9 0 1 2 3 4RV11 1 1 1 1S WER R10kC1RP11 22p X1U1219393 C212MXTAL1P0.0/AD038 4P0.1/AD1375P0.2/AD218366XTAL2P0.3/AD322pR2357P0.4/AD4P0.5/AD534810k339P0.6/AD6932C3RSTP0.7/AD7RESPACK-8RSP2.0/A82122 RWP2.1/A910u23 EP2.2/A102924PSEN P2.3/A113025ALE P2.4/A123126EAP2.5/A1327P2.6/A1428P2.7/A15垂直滚动1 P1.0/T2 P3.0/RXD 10水平滚动2 11P1.1/T2EX P3.1/TXD3 12P1.2 P3.2/INT0暂停 /继续4 13 P1.3 P3.3/INT1514P1.4 P3.4/T0返回615P1.5 P3.5/T1716P1.6 P3.6/WR817P1.7 P3.7/RDAT89C522) 程序设计与调试静态显示#include<>sbit lcdrs=P2^0; #define uchar unsigned char uchar num;#define uint unsigned intuchar code table[]=" Xin "; void delay(uint z)uchar code table1[]=" 412381"; {sbit lcden=P2^2; uint x,y;sbit lcdrw=P2^1;for(x=z;x>0;x--)}for(y=110;y>0;y--); lcden=0;}void write_com(uchar com) void init() { { lcdrs=0; lcden=0; P0=com; lcdrw=0; delay(5); write_com(0x38); lcden=1; write_com(0x0c); delay(5); write_com(0x06);lcden=0;}write_com(0x01);write_com(0x80+0x00); void write_data(uchar date) }{lcdrs=1; void main()P0=date; {delay(5); init();lcden=1; delay(100);delay(5);while(1){for(num=0;num<12;num++){write_data(table[num]);delay(200);}动态显示write_com(0x02);#include<>write_com(0x80+0x40);#define uchar unsigned char for(num=0;num<16;num++)#define uint unsigned int{uchar code table[]=" Xin "; write_data(table1[num]);uchar code table1[]=" 412381"; delay(200);sbit lcden=P2^2;}sbit lcdrw=P2^1;while(1);sbit lcdrs=P2^0;}uchar num;}void delay(uint z){uint x,y;for(x=z;x>0;x--) for(y=110;y>0;y--); }delay(5); lcden=0; }void write_com(uchar com) void init(){ {lcdrs=0; lcden=0;P0=com; lcdrw=0;delay(5); write_com(0x38); lcden=1; write_com(0x0f); delay(5); write_com(0x06); lcden=0;}write_com(0x01);write_com(0x80+0x00); void write_data(uchar date) }{lcdrs=1;void main()P0=date;{delay(5);init();lcden=1;delay(100);while(1){for(num=0;num<12;num++) {write_data(table[num]); delay(200);}write_com(0x02);write_com(0x80+0x40); for(num=0;num<16;num++){write_data(table1[num]); delay(200);}write_com(0x01);}} 按键实现不同效果#include<>#define uchar unsigned char#define uint unsigned intuchar code table[]="My information!";uchar code table1[]=" Xin";uchar code table2[]=" 412381"; uchar code table3[]=" EXP8";uchar code table4[]=" DISPLAY"; {uchar num,i,j; lcdrs=0;uchar flag1,flag2,flag3,flag4; P0=com;sbit k1=P3^0; delay(5);sbit k2=P3^1; lcden=1;sbit k3=P3^2; delay(5);sbit k4=P3^3; lcden=0;}sbit lcden=P2^2;sbit lcdrw=P2^1; void write_data(uchar date) sbit lcdrs=P2^0; {lcdrs=1;void delay(uint z)P0=date;{delay(5);uint x,y;lcden=1;for(x=z;x>0;x--)delay(5);for(y=110;y>0;y--);lcden=0;}}void write_com(uchar com)void init(){ IP=0x05;lcden=0; EX1=1;lcdrw=0; IT1=1;write_com(0x38); delay(100);write_com(0x0f); while(1)write_com(0x06); { flag3=0;write_com(0x01); write_com(0x01);} write_com(0x80+0x01);delay(50);void main()for(num=0;num<15;num++){{init();write_data(table[num]);TMOD=0x01;delay(200);TH0=(65536-10000)/256;}TL0=(65536-10000)%256;delay(200);EA=1;write_com(0x01);ET0=1;}TR0=1;}EX0=1;IT0=1; void display(){ write_data(table1[num]);if(k1==0) delay(200);{ }while(1) write_com(0x80+0x40);{ for(num=0;num<16;num++)// 显示if(flag1==1) break;" 412381"if(flag3==0)//{{if(flag1==1) break;if(flag1==1)break;//while(flag3==1) 控制返回write_com(0x01);{write_com(0x80+0x00);if(flag1==1) break; delay(50);}for(num=0;num<11;num++)write_data(table2[num]); // 显示 " Xin" delay(200);{ }if(flag1==1) break; write_com(0x01);while(flag3==1) delay(200);{ write_com(0x80+0x00);if(flag1==1)break; for(num=0;num<16;num++)// 显示}" 412381"{ }if(flag1==1) break; write_com(0x01);while(flag3==1) write_com(0x80+0x00);{ for(num=0;num<13;num++) // 显if(flag1==1)break;示" EXP8"}{write_data(table2[num]);if(flag1==1) break;delay(200);while(flag3==1)}{write_com(0x80+0x40);if(flag1==1)break;for(num=0;num<13;num++)} // 显示 " EXP8" write_data(table3[num]);{ delay(200);if(flag1==1) break; }while(flag3==1) delay(200);if(flag1==1) break;{ write_com(0x80+0x40);if(flag1==1)break; for(num=0;num<13;num++) // 显}示" DISPLAY"write_data(table3[num]);{delay(200);if(flag1==1) break;while(flag3==1) write_com(0x80+0x40);{ for(num=0;num<11;num++) // 显示if(flag1==1)break;" Xin"}{write_data(table4[num]);if(flag1==1) break;delay(200);while(flag3==1)}{write_com(0x01);if(flag1==1)break;write_com(0x80+0x00);}for(num=0;num<13;num++)write_data(table1[num]); // 显示 " DISPLAY" delay(200);{ }if(flag1==1) break;while(flag3==1)}{}if(flag1==1)break;flag3=0;}flag1=0;// 清标志位write_data(table4[num]);write_com(0x01);// 清屏}delay(200);if(k2==0)}{ write_com(0x80+0x40);//if(flag1==1)break; for(num=0;num<13;num++) // 显write_com(0x01);// 清屏示" EXP8"write_com(0x80+0x00);{for(num=0;num<11;num++) //if(flag1==1)break; 显示" Xin" write_data(table3[num]);{ delay(50);if(flag1==1)break; }write_data(table1[num]); write_com(0x80+0x50);delay(50); for(num=0;num<13;num++) // 显}示" DISPLAY"write_com(0x80+0x10);{for(num=0;num<16;num++)//if(flag1==1)break; 显示" 412381" write_data(table4[num]); { delay(50);if(flag1==1)break; }write_data(table2[num]); while(1)delay(50); {} if(flag1==1) break;write_com(0x02);while(flag3==1){if(flag1==1)break;}if(flag3==0){write_com(0x1c);// 整屏左移或右移delay(100);if(flag1==1) break;}}flag3=0;flag1=0;//清除标志位write_com(0x01);//清屏}}void time0() interrupt 1{TL0=(65536-1000)%256; display();}void INT_0() interrupt 0 {EX0=0;delay(20);EX0=1;flag3=!flag3;}void INT_1() interrupt 2 {EX1=0;delay(20);EX1=1;flag1=1;}TH0=(65536-1000)/256;七、实验问题解决及总结实验中出现了运行垂直或水平效果时若按下暂停 / 继续按键再按返回按键后,再按垂直或水平按键不继续运行的情况。