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

合集下载

LCD1602液晶显示实验报告

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液晶显示器

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程序

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液晶显示实验报告实验报告: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进行显示,掌握单片机与外围设备的交互操作,学习并理解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时钟实验

功能完整的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中文资料(程序和使用说明)

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 液晶显示屏的工作原理和编程方法,能够成功实现字符在液晶屏幕上的显示和控制。

二、实验原理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 液晶显示屏上是否正确显示预设的字符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;七、实验问题解决及总结实验中出现了运行垂直或水平效果时若按下暂停 / 继续按键再按返回按键后,再按垂直或水平按键不继续运行的情况。

相关文档
最新文档