LCD液晶显示实验实验报告及程序
液晶显示器实训实验报告
一、实验目的1. 理解液晶显示器(LCD)的基本工作原理和组成结构。
2. 掌握液晶显示器驱动电路的设计与调试方法。
3. 熟悉液晶显示器的接口技术及其与单片机的连接方式。
4. 通过实验验证液晶显示器的显示功能,并实现简单图形和文字的显示。
二、实验原理液晶显示器(LCD)是一种利用液晶材料的光学各向异性来实现图像显示的设备。
它主要由液晶层、偏光片、电极阵列、驱动电路等部分组成。
液晶分子在电场作用下会改变其排列方向,从而改变通过液晶层的光的偏振状态,实现图像的显示。
三、实验器材1. 液晶显示器模块(如12864 LCD模块)2. 单片机开发板(如STC89C52单片机)3. 电源模块4. 连接线5. 实验平台(如面包板)四、实验内容1. 液晶显示器模块的识别与检测首先,对所购买的液晶显示器模块进行外观检查,确保无损坏。
然后,根据模块说明书,连接电源和单片机开发板,进行初步的检测。
2. 液晶显示器驱动电路的设计与调试根据液晶显示器模块的技术参数,设计驱动电路。
主要包括以下部分:- 电源电路:将单片机提供的电压转换为液晶显示器所需的电压。
- 驱动电路:负责控制液晶显示器模块的行、列电极,实现图像的显示。
- 接口电路:将单片机的信号与液晶显示器的控制信号进行连接。
在设计电路时,需要注意以下几点:- 电源电压要稳定,避免对液晶显示器模块造成损害。
- 驱动电路的驱动能力要足够,确保液晶显示器模块能够正常显示。
- 接口电路的信号传输要可靠,避免信号干扰。
设计完成后,进行电路调试,确保电路正常工作。
3. 液晶显示器的控制程序编写根据液晶显示器模块的控制指令,编写控制程序。
主要包括以下部分:- 初始化程序:设置液晶显示器的显示模式、对比度等参数。
- 显示程序:实现文字、图形的显示。
- 清屏程序:清除液晶显示器上的显示内容。
在编写程序时,需要注意以下几点:- 控制指令要正确,避免对液晶显示器模块造成损害。
- 程序要简洁,易于调试和维护。
lcd显示实验报告
lcd显示实验报告LCD显示实验报告概述:本次实验旨在研究和探究液晶显示技术的原理和应用。
液晶显示器(LCD)是一种广泛应用于电子设备中的平面显示技术,其优点包括低功耗、高对比度、视角广等特点。
通过实验,我们将深入了解LCD的工作原理以及其在各种设备中的应用。
实验步骤:1. 实验前准备在实验开始前,我们需要准备一块LCD显示屏、适配器、电源线以及连接所需的电缆。
2. 实验搭建将LCD显示屏与适配器通过电缆连接,并将电源线插入适配器和电源插座之间。
确保所有连接牢固可靠。
3. 实验操作打开电源开关,观察LCD显示屏是否正常亮起。
如果显示屏亮起,说明连接成功。
4. 实验观察观察LCD显示屏上的图像、文字或图标是否清晰可见。
注意观察显示屏的对比度、颜色鲜艳度以及视角范围等特点。
5. 实验分析通过对比实验观察到的LCD显示效果,我们可以得出以下结论:- LCD显示屏的图像清晰度和对比度较高,能够呈现出细节丰富的图像。
- LCD显示屏的颜色鲜艳度较高,能够准确还原图像的真实色彩。
- LCD显示屏的视角范围较广,观察者可以从不同角度观察屏幕上的内容而不会出现明显的颜色变化或失真。
实验原理:液晶显示器的工作原理是利用液晶分子的光学性质来调节光的透过程度。
液晶分子在电场的作用下会发生旋转或排列,从而改变光的透过程度,进而形成图像。
液晶显示器主要由两层玻璃基板构成,中间夹层有液晶分子。
在两层玻璃基板上分别涂有透明电极,并通过透明电极与外部电源相连。
当外部电源施加电压时,电场作用下液晶分子发生旋转或排列,从而改变光的透过程度。
液晶显示器通常由红、绿、蓝三种基本颜色的像素组成,通过控制每个像素的电压来调节颜色的深浅和亮度。
通过对不同像素的电压控制,液晶显示器能够呈现出丰富多彩的图像。
应用领域:液晶显示器已广泛应用于各种电子设备中,包括但不限于以下领域:1. 个人电脑和笔记本电脑:作为主要的显示设备,液晶显示器提供了清晰、高对比度的图像,使用户能够更好地操作和浏览信息。
LCD液晶显示实验实验报告及程序
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引脚(带背光)接⼝,各引脚接⼝说明如表:2.1602液晶模块内部的控制器共有11条控制指令,如表所⽰:3.芯⽚时序表:4.1602LCD的⼀般初始化(复位)过程(1) 延时15ms。
(2) 写指令38H(不检测忙信号)。
(3) 延时5ms。
(4) 写指令38H(不检测忙信号)。
lcd控制实验报告
lcd控制实验报告标题:LCD控制实验报告摘要:本实验旨在探究液晶显示屏(LCD)的控制原理和操作方法。
通过实验,我们成功实现了对LCD的控制,并了解了LCD的基本工作原理和控制方式。
本文将详细介绍实验的步骤、结果和分析。
引言:LCD是一种广泛应用于电子产品中的显示器件,它具有低功耗、高分辨率和薄型轻便等优点,因此得到了广泛的应用。
了解LCD的控制原理和操作方法对于电子工程师和学生来说是非常重要的。
本实验旨在帮助学生掌握LCD的基本控制方法,并加深对LCD工作原理的理解。
实验目的:1. 了解LCD的基本工作原理2. 掌握LCD的控制方法3. 实现对LCD的基本控制实验步骤:1. 连接LCD显示屏和控制器2. 编写控制程序3. 调试程序并观察LCD显示效果4. 分析实验结果实验结果:通过实验,我们成功实现了对LCD的控制。
在编写控制程序并调试后,LCD显示屏能够按照我们的指令显示相应的内容,包括文字、图形等。
实验结果表明,我们掌握了LCD的基本控制方法,并能够灵活地应用于实际项目中。
实验分析:通过本次实验,我们深入了解了LCD的基本工作原理和控制方法。
LCD的显示效果受到控制程序的影响,因此编写高效的控制程序对于实现理想的显示效果至关重要。
此外,LCD的控制还涉及到对显示屏的初始化、数据传输等细节,需要我们仔细调试和优化。
结论:本实验成功实现了对LCD的控制,并加深了我们对LCD的工作原理和控制方法的理解。
通过实验,我们掌握了LCD的基本控制方法,并能够灵活地应用于实际项目中。
这对于我们的学习和工作都具有重要意义。
致谢:感谢实验室的老师和同学们在实验中的帮助和支持。
也感谢本次实验给我们提供了一个很好的学习机会,让我们更加深入地了解了LCD的控制原理和操作方法。
LCD显示实验
© MY2410 版权所有 未经许可 不得传播详情请咨询:xuphone@ mikenoodle@LCD 显示显示实验实验[实验目的实验目的]]1.了解LCD 显示的基本原理 2. 了解LCD 的接口与控制方法 3. 掌握LCD 显示图形的方法4.掌握LCD 显示字符的方法(本实验显示汉字)[实验内容实验内容]]1. 缩写图形显示函数,在LCD 上显示图形2. 编写汉字字模显示函数,在LCD 上显示汉字[预备知识预备知识]] 一. L CD 原理LCD 为英文Liquid Crystal Display 的缩写,即液晶显示器,是一种数字显示技术,可以通过液晶和彩色过滤器过滤光源,在平面面板上产生图象。
其种类可分为依驱动方式之静态驱动(Static )、单纯矩阵驱动(Simple Matrix )以及主动矩阵驱动(Active Matrix )三种。
而其中,单纯矩阵型又是俗称的被动式(Passive ),可分为扭转向列型(Twisted Nematic ,简称 TN )和超扭转式向列型(Super Twisted Nematic ,简称STN )两种;而主动矩阵型则以薄膜式晶体管型(Thin Film Transistor ;TFT )为目前主流。
早在1888年,人们就发现液晶这一呈液体状的化学物质,象磁场中的金属一样,当受到外界电场影响时,其分子会产生精确的有序排列。
如果对分子的排列加以适当的控制,液晶分子将会允许光线穿越。
无论是笔记本电脑还是桌面系统,采用的LCD 显示屏都是由不同部分组成的分层结构。
位于最后面的一层是由荧光物质组成的可以发射光线的背光层。
背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层。
液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。
当LCD 中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。
液晶显示屏 (LCD)实验
§3.6 液晶显示屏(LCD)实验一、实验目的1.掌握液晶的使用方法;2.掌握液晶信号之间时序的正确识别和引入。
二、实验设备1. 一台装有CCS3.3软件的计算机;2. 插上2812主控板的DSP实验箱;3. DSP硬件仿真器。
三、实验原理本实验箱采用的是 3.2寸TFT ,WQVGA(400*240),带触摸屏,触摸控制芯片: TSC2046EIPW。
本实验箱采用的液晶接口在DSP的数据总线上,液晶接口如下:备注:示例程序中所有调用到的相关变量及函数都在User_lcd.c中四、实验步骤1.把2812主控板插到实验箱底板相应接口上;把LCD显示屏模块插到外设区;2.在CCS3.3环境中打开本实验的工程Example_lcd,生成输出文件,通过仿真器把执行代码下载到DSP芯片;3.运行程序;液晶上会循环显示预定内容。
五、实验报告1.实验原理、设计过程、程序设计思想和实验结果、硬件测试结果记录下来。
2.LCD显示汉字的方法你了解吗,尝试显示自己学校的名字试试?六、补充1、实验过程中检查硬件仿真器链接是否正确,检查dsp芯片是否安插正确(以各个芯片的指示灯是否亮为参考)。
2、在软件设置与硬件的connect。
3、加载本实验工程,烧到芯片上。
Build工程,run程序,观察实验现象;修改相关代码,再次编译运行,看实验现象。
4、用字模软件建立自己的字库,为字库编写函数。
5、为字库编写打印函数,并申明函数七、实验相关截图T5.0 main.c 文件中插入打印函数T5.1声明函数,以及在_Font 结构中加入成员T5.2构造函数调字库T5.3定义打印函数T5.4建库。
LCD显示实验
单片机实验报告班级:姓名:学号:指导教师:实验三 LCD显示实验(2学时)一、实验目的:学习液晶显示的编程方法,了解液晶显示模块的工作原理。
掌握液晶显示模块与单片机的接口方法。
学习和掌握8255扩展通用I/O的方法。
基于扩展I/O口,实现LCD显示器的控制。
二、实验设备:CPU挂箱、8031CPU模块三、实验内容:在掌握8255扩展I/O口的基础上,实现LCD的显示,并显示“中北大学1105064102 姓名”。
四、实验原理说明LCD显示电路点阵式LCD显示电路是在系统板上外挂电正式液晶显示模块,模块的数据线、状态、控制线都通过插孔引出。
可直接与系统相连。
1、OCMJ2×8液晶模块介绍及使用说明OCMJ中文模块系列液晶显示器内含 GB 2312 16*16点阵国标一级简体汉字和ASCII8*8(半高)及8*16(全高)点阵英文字库,用户输入区位码或 ASCII 码即可实现文本显示。
也可用作一般的点阵图形显示器之用。
提供位点阵和字节点阵两种图形显示功能,用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。
完全兼容一般的点阵模块。
OCMJ中文模块系列液晶显示器可以实现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。
本系列模块具有上/下/左/右移动当前显示屏幕及清除屏幕的命令。
一改传统的使用大量的设置命令进行初始化的方法,OCMJ 中文模块所有的设置初始化工作都是在上电时自动完成的,实现了“即插即用”。
同时保留了一条专用的复位线供用户选择使用,可对工作中的模块进行软件或硬件强制复位。
规划整齐的10个用户接口命令代码,非常容易记忆。
标准用户硬件接口采用REQ/BUSY 握手协议,简单可靠。
硬件接口接口协议为请求/应答(REQ/BUSY)握手方式。
应答BUSY 高电平(BUSY =1)表示 OCMJ 忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表示 OCMJ 空闲,等待接收用户命令。
显示屏实验报告
一、实验目的1. 了解显示屏的基本原理和结构;2. 掌握显示屏的性能测试方法;3. 分析不同类型显示屏的优缺点;4. 提高对显示屏技术的认识。
二、实验器材1. 显示屏实验箱;2. 电源;3. 数据采集器;4. 测试软件;5. 计算器。
三、实验原理显示屏是一种将电子信号转换为图像的设备,广泛应用于计算机、手机、电视等领域。
根据显示原理,显示屏主要分为以下几种类型:1. 液晶显示屏(LCD);2. 有机发光二极管显示屏(OLED);3. 等离子显示屏(PDP);4. 激光投影显示屏。
本实验主要针对液晶显示屏(LCD)和有机发光二极管显示屏(OLED)进行性能测试。
四、实验步骤1. 连接实验箱,打开电源;2. 启动测试软件,设置测试参数;3. 进行亮度和对比度测试;4. 进行色彩准确性测试;5. 进行响应时间测试;6. 进行视角测试;7. 分析实验数据,得出结论。
五、实验数据及分析1. 亮度和对比度测试实验结果显示,LCD显示屏的亮度为200cd/m²,对比度为1000:1;OLED显示屏的亮度为500cd/m²,对比度为10000:1。
由此可见,OLED显示屏的亮度和对比度均优于LCD显示屏。
2. 色彩准确性测试通过色彩准确性测试,我们发现LCD显示屏的色准值为ΔE=3.5,OLED显示屏的色准值为ΔE=2.0。
说明OLED显示屏的色彩还原度更高。
3. 响应时间测试在响应时间测试中,LCD显示屏的响应时间为5ms,OLED显示屏的响应时间为1ms。
这表明OLED显示屏具有更快的响应速度。
4. 视角测试视角测试结果显示,LCD显示屏的水平视角为160°,垂直视角为140°;OLED显示屏的水平视角为160°,垂直视角为170°。
OLED显示屏的视角略优于LCD显示屏。
六、实验结论1. OLED显示屏在亮度和对比度方面优于LCD显示屏;2. OLED显示屏的色彩还原度更高;3. OLED显示屏具有更快的响应速度;4. OLED显示屏的视角略优于LCD显示屏。
lcd的显示实验报告
lcd的显示实验报告LCD的显示实验报告概述:本次实验旨在研究液晶显示屏(LCD)的原理和显示效果。
通过搭建实验装置,观察和分析不同输入信号对LCD显示效果的影响,以及了解液晶分子的排列和光学特性。
实验装置:1. 液晶显示屏:使用一块常见的LCD显示屏,尺寸为10英寸。
2. 驱动电路:使用专业的LCD驱动电路板,可提供不同的输入信号。
3. 信号发生器:用于产生不同频率和幅度的信号,以模拟不同图像和视频场景。
实验步骤:1. 连接实验装置:将LCD显示屏和驱动电路连接,确保电路正常工作。
2. 设置信号发生器:根据实验要求,设置信号发生器的频率和幅度。
3. 观察LCD显示效果:通过改变信号发生器的输入信号,观察LCD显示屏上显示的图像和视频场景的变化。
实验结果:1. 彩色显示效果:通过调整信号发生器的输入信号,我们观察到LCD显示屏可以呈现丰富多彩的图像和视频场景。
不同的颜色通过液晶分子的排列方式和光学特性实现。
2. 对比度和亮度:通过改变信号发生器的幅度,我们发现LCD显示屏的对比度和亮度也会相应改变。
较大的幅度可以增加对比度和亮度,但过大的幅度可能导致图像失真。
3. 响应时间:我们还观察到LCD显示屏的响应时间对快速移动图像的显示效果有影响。
较短的响应时间可以减少运动模糊,提高图像的清晰度。
讨论与分析:1. 液晶分子排列:液晶显示屏的显示效果是通过液晶分子的排列方式来实现的。
液晶分子在电场的作用下,可以改变其排列方式,从而改变透光性。
这种特性使得液晶显示屏可以呈现不同的图像和颜色。
2. 优点与缺点:与传统的CRT显示器相比,液晶显示屏具有体积小、重量轻、功耗低等优点。
然而,液晶显示屏的响应时间相对较长,可能导致快速移动图像的模糊。
此外,液晶显示屏的视角范围有限,需要保持正对屏幕才能获得最佳视觉效果。
3. 应用领域:液晶显示屏已广泛应用于电子产品领域,如电视、计算机显示器、智能手机等。
其轻薄便携的特点使得液晶显示屏成为现代生活中不可或缺的一部分。
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 液晶显示屏上是否正确显示预设的字符。
实验六 LCD循环显示实验报告
实验六LCD循环显示实验一实验目的采用1602型LCD循环显示字符串“Welcome to Heifei Normal University”。
其中LCD显示模式为:16*2显示,5*7点阵,8位数据口;显示开,有光标而且光标闪烁;光标右移,字符不移。
二实验内容与具体任务描述任务1:89C51控制,LCD显示屏循环显示字符串“Welcome to Heifei Normal University”。
任务2:修改代码,实现循环居中显示个人姓名及学号。
三设计的电路图与描述通过总线连接89C51的P0口和LCD显示屏的D0~D7口,实现单片机对LCD显示屏的控制。
四程序清单任务1:#include<reg51.h>#include<intrins.h>sbit RS=P2^0;sbit RW=P2^1;sbit E=P2^2;sbit BF=P0^7;unsigned char code string[]={"Welcome to HeFei Normal University"}; void delay1ms()//1ms延时{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<n;i++)delay1ms();}unsigned char BusyTest(void){bit result;RS=0;RW=1;E=1;_nop_();_nop_();_nop_();_nop_();result=BF;E=0;return result;}void WriteInstruction(unsigned char dictate){while(BusyTest()==1);RS=0;RW=0;E=0;_nop_();_nop_();P0=dictate;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;}void WriteAddress(unsigned char x){WriteInstruction(x|0x80);}void WriteData(unsigned char y){while(BusyTest()==1);RS=1;RW=0;E=0;P0=y;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;}void LcdInitiate(void){delay(15);WriteInstruction(0x38);delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x0f);delay(5);WriteInstruction(0x06);delay(5);WriteInstruction(0x01);delay(5);}void main(void){unsigned char i;LcdInitiate();delay(10);while(1){WriteInstruction(0x01);WriteAddress(0x00);i=0;while(string[i]!='\0'){WriteData(string[i]);i++;delay(150);}for(i=0;i<4;i++)delay(250);}}任务2:#include<reg51.h>#include<intrins.h>sbit RS=P2^0;sbit RW=P2^1;sbit E=P2^2;sbit BF=P0^7;unsigned char code string[]={"0910421034"}; unsigned char code string1[]={"liwanwan"}; void delay1ms()//1ms延时{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<n;i++)delay1ms();}unsigned char BusyTest(void){bit result;RS=0;RW=1;E=1;_nop_();_nop_();_nop_();_nop_();result=BF;E=0;return result;}void WriteInstruction(unsigned char dictate) {while(BusyTest()==1);RS=0;RW=0;E=0;_nop_();_nop_();P0=dictate;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;}void WriteAddress(unsigned char x){WriteInstruction(x|0x80+0x03);WriteInstruction(x|0x80+0x04);}void WriteData(unsigned char y){while(BusyTest()==1);RS=1;RW=0;E=0;P0=y;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;}void LcdInitiate(void){delay(15);WriteInstruction(0x38);delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x0f);delay(5);WriteInstruction(0x06);delay(5);WriteInstruction(0x01);delay(5);}void main(void){unsigned char i;LcdInitiate();delay(10);while(1){WriteInstruction(0x01);WriteAddress(0x00);i=0;while(string[i]!='\0'){WriteData(string[i]);i++;delay(50);}WriteAddress(0x40);i=0;while(string1[i]!='\0'){WriteData(string1[i]);i++;delay(50);}for(i=0;i<4;i++)delay(250);}}五运行结果屏幕居中循环显示“0910421073li min”六实验总结1、这次试验没有按时做完,比较失败,但是最后在同学的帮助下才得以完成,后来又独立完成一次,比较满意。
LCD专业测试报告
LCD专业测试报告一、测试目的本测试旨在对液晶显示屏(LCD)进行全面而系统的功能和性能测试,以评估其质量和可靠性,为后续的质量改进工作提供依据。
二、测试内容1.显示效果测试:1.1对LCD进行按键输入测试,检查是否正常显示输入内容;1.2对LCD进行画面显示测试,包括图片、文字等内容;1.3对LCD进行亮度和色彩调整测试,检查是否能够正常调整和保持调整后的效果。
2.触摸屏测试:2.1对触摸屏进行触摸测试,检查是否能够准确捕捉并响应触摸操作;2.2对触摸屏进行滑动测试,检查是否能够准确识别滑动操作并响应;2.3对触摸屏进行多点触控测试,检查是否能够准确捕捉多点操作并响应。
3.显示屏幕测试:3.1对显示屏进行亮点测试,检查是否存在亮点、暗点等不良现象;3.2对显示屏进行坏点测试,检查是否存在坏点、亮点等不良现象;3.3对显示屏进行温度适应性测试,检查在不同温度环境下的显示效果和响应速度。
4.功能性测试:4.1对LCD进行电源适应性测试,检查在不同电源输入下的运行情况;4.2对LCD进行抗干扰性测试,检查在外部干扰下的运行情况;4.3对LCD进行耐压测试,检查是否能够正常工作并保持稳定的输出信号。
三、测试方法1.使用专业的LCD测试设备进行测试,如万用表、高低温测试仪、电源适配器等;2.开发测试程序和测试脚本,对液晶显示屏进行功能和性能测试,记录测试结果。
四、测试结果与分析1.显示效果测试:经测试,LCD能够正常显示输入内容,画面显示效果良好,亮度和色彩调整功能正常,能够准确调整和保持调整后的效果。
2.触摸屏测试:经测试,触摸屏能够准确捕捉并响应触摸操作,滑动操作也能够准确识别并响应,多点触控操作也正常,符合设计要求。
3.显示屏幕测试:经测试,显示屏不存在亮点、暗点等不良现象,也没有坏点、亮点等问题,温度适应性良好,能够在不同温度下正常显示和响应。
4.功能性测试:经测试,LCD在不同电源输入下能够正常工作,电源适应性良好;在外部干扰下也能够正常工作,抗干扰性良好;经耐压测试后,LCD仍能够正常工作并保持稳定的输出信号。
实验九 液晶LCD显示实验报告
苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称:液晶LCD显示实验一.实验目的理解点阵字符型LCD的显示原理;理解HD44780的原理框图;了解字符型液晶显示模块的控制器HD44780的引脚信号以及HD44780的显示和编程方法;理解HD44780与MCU 的接线图。
二.实验内容理解点阵字符型LCD原理,运行与理解各子程序,编制一个点阵字符型LCD程序。
MCU 的PTD7-PTD0接LCD数据线, PTC2-PTC0接LCD控制线,在LCD上显示当前时间,格式形如时:分:秒。
时间的开始值可以通过PC方的串口通信程序来进行指定。
三.实验过程(一)原理图图9-1 HD44780原理框图(二)接线图(三)基本原理HD44780 驱动模块是用低功耗CMOS 技术制造的LCD 控制器,主要由I/O 缓冲器、指令寄存器、数据寄存器、地址计数器、字符发生器等构成。
可与八位的微处理器相连,接口简单方便,指令功能强,可组合成各种输入、显示和移位方式以满足不同的要求,能使液晶显示器显示大小写英文字母、数字和符号。
它的电极图形是由若干个5×8 或5×11 点阵块组成的字符块集,每一个字符块是一个字符位,每一位都可以显示一个字符。
四.编程 (一)流程图(二)所用寄存器名称及其各个位指令寄存器(IR ):IR 用于MCU 向HD44780写入指令码。
数据寄存器(DR ):DR 用于寄存数据。
忙标志(BF ):BF=1,表示组件正在进行内部操作,不能接受外部指令或数据。
地址计数器(AC ):AC 作为DD RAM 或CG RAM 的地址指针。
显示数据寄存器(DD RAM ):DD RAM 用于存储显示数据,共有80个字符码。
字符发生器ROM (CG ROM ):CG ROM图9-3 液晶LCD 显示流程图(及其中断子程序)图9-2 MCU 与LCD 的连接由8位字符码生成5×7点阵字符160种和5×10点阵字符32种,其中大部分与ASCII码兼容。
实验三 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所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
实验四 LCD显示实验
实验四LCD显示实验一、实验目的了解LCD显示的基本原理了解LCD的接口与控制方法掌握LCD显示图形的方法掌握LCD显示字符的方法(本次实验显示汉字)二、实验内容编写图形显示函数,在LCD上显示图形编写HZK16读取函数,在LCD上显示汉字三、预备知识了解汉字库的组织方式,汉字显示的原理学习LCD的显示原理和控制办法四、实验设备XARM9-2410教学实验箱ADT1000仿真器和ADT IDE集成开发环境串口连接线五、实验原理1、LCD显示原理LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。
因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。
光源的提供方式有两种:透射式和反射式。
笔记本电脑的LCD显示屏即为透射式,屏后面有一个光源,因此外界环境可以不需要光源。
而一般微控制器上使用的LCD为反射式,需要外界提供光源,靠反射光来工作。
2、LCD的驱动控制–总线驱动方式一般带有驱动模块的LCD显示屏使用总线驱动方式,这种LCD可以方便地与各种低档单片机进行接口,如8051系列单片机。
由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。
驱动模块具有八位数据总线,外加一些电源接口和控制信号。
而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。
由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。
3、LCD的驱动控制–扫描器控制方式扫描器控制方式LCD显示屏没有驱动电路,需要与驱动电路配合使用。
这种LCD体积小,但需要另外的驱动芯片。
通常可以使用带有LCD驱动能力的高档MCU驱动,如ARM系列的S3C44B0。
S3C44B0中具有内置的LCD控制器,它具有将显示缓存中的图象数据传输到外部LCD驱动电路的逻辑功能。
LCD显示实验报告
LCD显示实验报告一.实验目的学会用LCD显示字符和数字,显示学号和姓名。
二.实验内容:所需要的源程序:;* 占用I/O RB1-RB5,RA5;* 使用RAM 2个字节;* 程序包括:;* - InitLCD 初始化液晶面板函数;* - putcLCD 将字符写入LCD的函数;* - SendCmd 将命令写入LCD的函数;* - clrLCD 清LCD显示函数;* 入口参数WREG;* 出口参数无;*LCD显示RAM地址:第一行0x80~8F;第二行0xC0~CF;************************************************#include p16f877a.inc ;定义所用单片机的头文件COUNT EQU 0X20Count EQU 0X20;COUNT1 EQU 0X21Count1 EQU 0x21;COUNT2 EQU 0X22Count2 EQU 0x22;LCD_TEMP EQU 0X23Byte EQU 0X24BYTE EQU 0X24LCD_DATA1 EQU 0X25BYTESH EQU 0X26;* 定义LCD数据& 控制I/O口;可以用任意的6个普通的I/O管脚定义;实际连线依据该部分定义;********************************************************************** *********#define LCD_DB7 PORTB,5 ;占用的I/O口定义#define LCD_DB6 PORTB,4 ;该行硬件连接:LCD的DB6与RB4连接,其它类推#define LCD_DB5 PORTB,3 ;#define LCD_DB4 PORTB,2 ;#define LCD_E PORTA,5 ;#define LCD_RS PORTB,1 ;#define LCD_DB7_DIR TRISB,5 ;对应的方向寄存器定义#define LCD_DB6_DIR TRISB,4 ;#define LCD_DB5_DIR TRISB,3 ;#define LCD_DB4_DIR TRISB,2 ;#define LCD_E_DIR TRISA,5 ;#define LCD_RS_DIR TRISB,1 ;;********************************************************************** ********; LCD 模块命令#define DISP_ON 0x00C ; 开显示#define DISP_ON_C 0x00E ; 开显示, 开指针#define DISP_ON_B 0x00F ; 开显示, 开指针,开闪烁#define DISP_OFF 0x008 ; 关显示#define CLR_DISP 0x001 ; 清显示的操作数#define ENTRY_INC 0x006 ; 操作数#define ENTRY_INC_S 0x007 ; 操作数#define ENTRY_DEC 0x004 ; 操作数#define ENTRY_DEC_S 0x005 ; 操作数#define DD_RAM_ADDR 0x080 ; 初始化第一行显示的操作数#define DD_RAM_UL 0x0c0 ; 初始化第二行显示的操作数ORG 0X0;NOP;NOP;NOP;clrf INTCONcall InitLCDcall clrLCDmovlw DD_RAM_ADDR ;设置起始地址call SendCmdMOVLW ' ';CALL PUTCLCD;MOVLW 'L';CALL PUTCLCD;MOVLW 'i';CALL PUTCLCD;MOVLW 'a';CALL PUTCLCD;MOVLW 'n';CALL PUTCLCD;MOVLW 's ';CALL PUTCLCD;MOVLW 'o';CALL PUTCLCD;MOVLW ‘n';CALL PUTCLCD;MOVLW 'g';CALL PUTCLCD;MOVLW ' ';CALL PUTCLCD;MOVLW ' ';CALL PUTCLCD;movlw DD_RAM_UL ;设置起始地址call SendCmdMOVLW ' ';CALL PUTCLCD;MOVLW ' ';CALL PUTCLCD;MOVLW '2';CALL PUTCLCD;MOVLW '0';CALL PUTCLCD;MOVLW '0';CALL PUTCLCD;MOVLW '7';CALL PUTCLCD;MOVLW '2';CALL PUTCLCD;MOVLW '1';CALL PUTCLCD;MOVLW '2';CALL PUTCLCD;MOVLW '1';CALL PUTCLCD;MOVLW '0';CALL PUTCLCD;MOVLW ‘1';CALL PUTCLCD;MOVLW '6';CALL PUTCLCD;GOTO $;;InitLCD 初始化LCD模块InitLCDbsf STATUS,RP0 ;Bank 1bcf STATUS,RP1 ;初始化相关I/O引脚MOVLW B'11000001';ANDWF TRISB,F;bcf LCD_E_DIRMOVLW 0X07MOVWF 0X1C;CMCON=7bcf STATUS,RP0 ;Bank 0MOVLW B'11000001';ANDWF TRISB,F;bcf LCD_Ebsf LCD_E ;清数据线bcf LCD_Ebsf LCD_DB5 ;设置LCD工作方式bsf LCD_Ebcf LCD_Ecall LongDelaymovlw 0x28 ;再次设置工作方式call SendCmd ;四位数据总线,两行显示,5X7点阵字符movlw DISP_ON ;开显示call SendCmdmovlw ENTRY_INC ;设置指针移动方式call SendCmdcall clrLCD ;清屏return;*putcLCD 将字符数据送入LCD * ;* 本程序将字符数据分成了高半字节和低半字节分别输入* ;* 先送入的是高半字节*PUTCLCDbsf LCD_RS ;设置为送数据模式movwf Byte ;存WREG 到Byte 寄存器call write ;写入高半字节swapf Byte,F ;送入数据的低字节call write ;接着送低半字节call Delayreturn;******************************************************************* ;* SendCmd - 送命令到LCD * ;* 本程序将命令数据分成了高半字节和低半字节分别输入* ;* 先送入的是高半字节* ;******************************************************************* SendCmdbcf LCD_RS ;设置为送命令模式,与PUTCLCD仅相差此行movwf Byte ;存WREG 到Byte 寄存器call write ;送入命令的高字节swapf Byte,F ;送入命令的低字节call writecall Delayreturn;******************************************************************* ;* clrLCD - 清除LCD 显示* ;******************************************************************* clrLCDmovlw CLR_DISP ;call SendCmdreturn;******************************************************************* ;*write - 送半个字节数据;****************************************************************** writeMOVF BYTE,W;MOVWF BYTESH;BTFSS PORTB,1;JUGDE RS,AND SAVE TO BYTESH,3GOTO BCFRS;BSF BYTESH,3;GOTO GOGOGO;BCFRS BCF BYTESH,3;GOGOGO;MOVLW B'11000011';ANDWF PORTB,F;;bcf LCD_DB7;bcf LCD_DB6;bcf LCD_DB5;bcf LCD_DB4MOVLW 0XF8;ANDWF BYTESH,F;BCF STATUS,C;RRF BYTESH,F;RRF BYTESH,F;MOVF BYTESH,W;MOVWF PORTB;;CALL DELAY;btfsc Byte,7 ;写入半字节;bsf LCD_DB7;btfsc Byte,6;bsf LCD_DB6;btfsc Byte,5;bsf LCD_DB5;btfsc Byte,4;bsf LCD_DB4bsf LCD_E ;发送数据信号bcf LCD_Ereturn;*********************************************************** Delay ; call指令占用2个指令周期clrf Count ; 清Count占用1个指令周期Dloopdecfsz Count,f ; 这两行指令将延时goto Dloop ; (256 * 3) -1 个指令周期return ; return占用2个指令周期LongDelay ; call指令占用2个指令周期clrf Count ; 清Count占用1个指令周期clrf Count1 ; 清Count1占用1个指令周期movlw 0x03 ;占用1个指令周期movwf Count2 ;占用1个指令周期LDloopdecfsz Count,f ; 这两行指令将延时goto LDloop ; (256 * 3) -1 个指令周期decfsz Count1,fgoto LDloopdecfsz Count2,fgoto LDloopreturnEND。
LCD实验报告
LCD显示器实验周四上午夏晓天电子信息科学与技术06300720040【预习报告】一.实验目的1.掌握LCD显示器的工作原理。
2.掌握基于MCS-51的LCD显示器接口电路的设计方法。
二.实验内容1.设计基于MCS-51的2行16个字符的LCD显示器接口电路,在第一行从左到右依次显示数字0~9,A~F;在第二行从左到右依次显示小写英文字母a~p。
2.利用MCS-51定时器计时,在2行16个字符的LCD 显示器的第一行显示当前时间的年、月、日,在第二行显示时、分、秒。
格式:××××年××月××日,××:××:××。
3.同上,利用MCS-51定时器计时(仅计分、秒),显示当前的年、月、日,时、分、秒(年、月、日、时采用固定数据)。
所有的信息在2行16个字符的LCD 显示器的第一行上显示,采用滚动的喜爱你是方式。
格式:××××年××月××日,××:××:××。
三.电原理图和程序清单总的硬件连接图:CPLD电原理图:7-4-1.第一行显示0~9,A~F,第二行显示a~p程序清单:ORG 0000HAJMP MAINORG 0030HMAIN:COM EQU 20H ;指令寄存器DAT EQU 21H ;数据寄存器CW_ADD EQU 0000H ;指令口写地址CR_ADD EQU 0002H ;指令口读地址DW_ADD EQU 0001H ;数据口写地址DR_ADD EQU 0003H ;数据口读地址;初始化INIT: MOV A,#30H ;工作方式设置指令代码MOV DPTR,#CW_ADD ;指令口地址设置MOV R2,#03H ;循环量=3MOVX @DPTR,A ;写指令代码INIT1: LCALL DELAY ;延时DJNZ R2,INIT1MOV A,#38H ;设置8位总线工作方式MOVX @DPTR,AMOV COM,#01H ;清屏LCALL PR1MOV COM,#06H ;设置输入方式LCALL PR1MOV COM,#0CH ;设置显示方式LCALL PR1MOV COM,#80H ;设置DDRAM地址为00H(第一行第一位)LCALL PR1MOV R0,#10H ;第一行循环量=16MOV R2,#0FH ;偏移量UP: MOV DPTR,#TABLE1 ;取字符代码MOV A,R2MOVC A,@A+DPTRMOV DAT,A ;暂存DATLCALL PR2 ;显示字符DEC R2DJNZ R0,UPMOV DPTR,#CW_ADDMOV COM,#0C0H ;设置DDRAM地址为40H(第二行第一位) LCALL PR1MOV R0,#10H ;第二行循环量=16MOV R2,#0FH ;偏移量DOWN: MOV DPTR,#TABLE2 ;取字符代码MOV A,R2MOVC A,@A+DPTRMOV DAT,A ;暂存DATLCALL PR2 ;显示字符DEC R2DJNZ R0,DOWNHE: SJMP HE;写指令代码(子程序)PR1: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADDPR11: MOVX A,@DPTR ;查询LCD是否忙JB ACC.7,PR11MOV A,COMMOV DPTR,#CW_ADD ;写指令MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;延时5ms(子程序)DELAY: MOV R6,#28HDEL1: MOV R7,#7BHDEL2: DJNZ R7,DEL2DJNZ R6,DEL1RET;写显示数据(子程序)PR2: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADDPR21: MOVX A,@DPTR ;查询LCD是否忙 JB ACC.7,PR21MOV A,DATMOV DPTR,#DW_ADD ;写数据MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;字符存储区TABLE1:DB 46H,45H ;’F’,’E’DB 44H,43H ;’D’,’C’DB 42H,41H ;’B’,’A’DB 39H,38H ;’9’,’8’DB 37H,36H ;’7’,’6’DB 35H,34H ;’5’,’4’DB 33H,32H ;’3’,’2’DB 31H,30H ;’1’,’0’TABLE2:DB 70H,6FH ;’p’,’o’DB 6EH,6DH ;’n’,’m’DB 6CH,6BH ;’k’,’l’DB 6AH,69H ;’I’,’j’DB 68H,67H ;’g’,’h’DB 66H,65H ;’e’,’f’DB 64H,63H ;’c’,’d’DB 62H,61H ;’a’,’b’END7-4-2.固定显示时间程序清单:ORG 0000HAJMP MAINORG 0030HMAIN:MNTG EQU 30H ;分高位寄存器MNTD EQU 31H ;分低位寄存器SCNDG EQU 32H ;秒高位寄存器SCNDD EQU 33H ;秒低位寄存器COM EQU 20H ;指令寄存器DAT EQU 21H ;数据寄存器CW_ADD EQU 0000H ;指令口写地址CR_ADD EQU 0002H ;指令口读地址DW_ADD EQU 0001H ;数据口写地址DR_ADD EQU 0003H ;数据口读地址;初始化MOV R0,#04H ;循环4次MOV R1,#30HCLRJ: MOV @R1,#00H ;30H~33H寄存器清零INC R1DJNZ R0,CLRJINIT: MOV A,#30H ;工作方式设置指令代码MOV DPTR,#CW_ADD ;指令口地址设置MOV R2,#03H ;循环量=3MOVX @DPTR,A ;写指令代码INIT1: LCALL DELAY ;延时DJNZ R2,INIT1MOV A,#38H ;设置8位总线工作方式MOVX @DPTR,AMOV COM,#01H ;清屏LCALL PR1MOV COM,#06H ;设置输入方式LCALL PR1MOV COM,#0CH ;设置显示方式LCALL PR1;写汉字字模‘年’MOV COM,#40H ;设置CGRAM地址为00HLCALL PR1MOV R0,#00H ;偏移量MOV DPTR,#ZYEAR ;将’年’写入CGRAM中00H~07H单元LCALL HANZI;写汉字字模‘月’MOV COM,#48H ;设置CGRAM地址为08H~0FHLCALL PR1MOV DPTR,#ZMONTH ;将’月’写入CGRAM中08H~0FH单元LCALL HANZI;写汉字字模‘日’MOV COM,#50H ;设置CGRAM地址为10H~17HLCALL PR1MOV DPTR,#ZDAY ;将’日’写入CGRAM中10H~17H单元LCALL HANZI;初始显示第一行MOV COM,#80H; ;设置DDRAM地址为00H(第一行第一位) LCALL PR1MOV R0,#0BH ;第一行显示11个字MOV R2,#0AH ;偏移量MOV DPTR,#TBL1ROW1: MOV A,R2MOVC A,@A+DPTR ;取字符MOV DAT,A ;暂存DATLCALL PR2 ;显示DEC R2DJNZ R0,ROW1;初始显示第二行MOV COM,#0C0H; ;设置DDRAM地址为40H(第二行第一位) LCALL PR1MOV R0,#08H ;第二行显示8个字MOV R2,#07H ;偏移量MOV DPTR,#TBL2ROW2: MOV A,R2MOVC A,@A+DPTR ;取字符MOV DAT,A ;暂存DATLCALL PR2 ;显示DEC R2DJNZ R0,ROW2;计时TIME: MOV R0,#14H ;20×50ms=1sTIME1: MOV TMOD,#01H ;设置定时器0工作方式MOV TH0,#03CH ;设置计数初值为3CB0HMOV TL0,#0B0HSETB EA ;开CPU中断SETB ET0 ;开定时器中断SETB TR0 ;开始计时L: JNB TF0,$CLR TF0 ;清定时器溢出标志DJNZ R0,TIME1MOV R0,#14HMOV TH0,#03CH ;重新写入计数初值MOV TL0,#0B0HSETB EASETB ET0SETB TR0MOV A,SCNDD ;取秒低位INC A ;秒低位加1MOV SCNDD,ACJNE A,#0AH,M1 ;逢十进一MOV SCNDD,#00HMOV A,SCNDG ;取秒高位INC A ;秒低位满十秒高位加1MOV SCNDG,ACJNE A,#06H,M2 ;逢六进一MOV SCNDG,#00HMOV A,MNTD ;取分低位INC A ;秒高位满六分低位加1MOV MNTD,ACJNE A,#0AH,F1 ;逢十进一MOV MNTD,#00HMOV A,MNTG ;取分高位INC A ;分低位满十分高位加1MOV MNTG,ACJNE A,#06H,F2 ;分高位满六分低位加1MOV MNTG,#00HLCALL BIAN ;改变分秒显示(满1小时)SJMP LM1: LCALL BIAN ;只改变秒低位显示(未满10秒)SJMP LM2: LCALL BIAN ;只改变秒显示(未满1分钟)SJMP LF1: LCALL BIAN ;只改变秒和分高位显示(未满10分钟) SJMP LF2: LCALL BIAN ;改变分秒显示(未满1小时)SJMP L;改变分、秒的显示(子程序)BIAN: MOV A,SCNDDADD A,#30H ;将秒低位转为ASCII码MOV COM,#0C7H ;秒低位显示在第二行第八位LCALL PR1MOV DAT,ALCALL PR2MOV A,SCNDGADD A,#30H ;将秒高位转为ASCII码MOV COM,#0C6H ;秒高位显示在第二行第七位LCALL PR1MOV DAT,ALCALL PR2MOV A,MNTDADD A,#30H ;将秒低位转为ASCII码MOV COM,#0C4H ;分低位显示在第二行第五位LCALL PR1MOV DAT,ALCALL PR2MOV A,MNTGADD A,#30H ;将分高位转为ASCII码MOV COM,#0C3H ;分高位显示在第二行第四位 LCALL PR1MOV DAT,ALCALL PR2RET;延时5ms(子程序)DELAY: MOV R6,#28HDEL1: MOV R7,#7BHDEL2: DJNZ R7,DEL2DJNZ R6,DEL1RET;存储汉字(子程序)HANZI: PUSH DPHPUSH DPLPUSH ACCNEXT: POP ACCPOP DPLPOP DPHPUSH DPHPUSH DPLPUSH ACCMOV A,R0MOVC A,@A+DPTR ;取字模MOV R1,AMOV DPTR,#CR_ADDHANZI2:MOVX A,@DPTRJB ACC.7,HANZI2 ;查询LCD是否忙MOV A,R1MOV DPTR,#DW_ADDMOVX @DPTR,A ;写入CGMRAMINC R0CJNE R0,#08H,NEXTMOV R0,#00HPOP ACCPOP DPLPOP DPHRET;写指令代码(子程序)PR1: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADDPR11: MOVX A,@DPTR ;查询LCD是否忙JB ACC.7,PR11MOV A,COMMOV DPTR,#CW_ADD ;写指令MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;写显示数据(子程序)PR2: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADDPR21: MOVX A,@DPTR ;查询LCD是否忙 JB ACC.7,PR21MOV A,DATMOV DPTR,#DW_ADD ;写数据MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;汉字字模存储区ZYEAR: DB 08H,0FH,12H,0FH,0AH,1FH,02H,02H ;’年’ ZMONTH:DB 0FH,09H,0FH,09H,0FH,09H,09H,13H ;’月’ ZDAY: DB 0FH,09H,09H,0FH,09H,09H,0FH,00H ;’日’ ;字符代码存储区TBL1: DB 02H,32H,30H,01H,34H,30H,00H,39HDB 30H,30H,32HTBL2: DB 30H,30H,3AH,30H,30H,3AH,30H,31HEND7-4-3.滚动显示时间程序清单:ORG 0000HAJMP MAINORG 0030HMAIN:MNTG EQU 30H ;分高位寄存器MNTD EQU 31H ;分低位寄存器SCNDG EQU 32H ;秒高位寄存器SCNDD EQU 33H ;秒低位寄存器COM EQU 20H ;指令寄存器DAT EQU 21H ;数据寄存器CW_ADD EQU 0000H ;指令口写地址CR_ADD EQU 0002H ;指令口读地址DW_ADD EQU 0001H ;数据口写地址DR_ADD EQU 0003H ;数据口读地址;初始化MOV R0,#04H ;循环4次MOV R1,#30HCLRJ: MOV @R1,#00H ;30H~33H寄存器清零INC R1DJNZ R0,CLRJINIT: MOV A,#30H ;工作方式设置指令代码MOV DPTR,#CW_ADD ;指令口地址设置MOV R2,#03H ;循环量=3MOVX @DPTR,A ;写指令代码INIT1: LCALL DELAY ;延时DJNZ R2,INIT1MOV A,#38H ;设置8位总线工作方式MOVX @DPTR,AMOV COM,#01H ;清屏LCALL PR1MOV COM,#06H ;设置输入方式LCALL PR1MOV COM,#0CH ;设置显示方式LCALL PR1;写汉字字模‘年’MOV COM,#40H ;设置CGRAM地址为00HLCALL PR1MOV R0,#00H ;偏移量MOV DPTR,#ZYEAR ;将’年’写入CGRAM中00H~07H单元 LCALL HANZI;写汉字字模‘月’MOV COM,#48H ;设置CGRAM地址为08H~0FHLCALL PR1MOV DPTR,#ZMONTH ;将’月’写入CGRAM中08H~0FH单元 LCALL HANZI;写汉字字模‘日’MOV COM,#50H ;设置CGRAM地址为10H~17HLCALL PR1MOV DPTR,#ZDAY ;将’日’写入CGRAM中10H~17H单元 LCALL HANZI;将显示字符存储到34H~47H单元MOV R0,#13H ;循环次数19次MOV R1,#34H ;34H单元起始MOV R2,#12H ;偏移量CHN: MOV DPTR,#TBL ;表格首地址MOV A,R2MOVC A,@A+DPTR ;取字符MOV @R1,A ;传送INC R1DEC R2DJNZ R0,CHN;初始显示第一行MOV COM,#80H ;第一行第一位LCALL PR1MOV R2,#10H ;第一行初始显示16位MOV R0,#34HGX: MOV A,@R0MOV DAT,ALCALL PR2INC R0DJNZ R2,GX;计时TIME: MOV R0,#14H ;20×50ms=1sTIME1: MOV TMOD,#01H ;设置定时器0工作方式MOV TH0,#03CH ;设置计数初值为3CB0HMOV TL0,#0B0HSETB EA ;开CPU中断SETB ET0 ;开定时器中断SETB TR0 ;开始计时L: JNB TF0,$CLR TF0 ;清定时器溢出标志DJNZ R0,TIME1MOV R0,#14HMOV TH0,#03CH ;重新写入计数初值MOV TL0,#0B0HSETB EASETB ET0SETB TR0MOV COM,#1CH ;每过1秒执行一次画面向左滚动 LCALL PR1MOV A,SCNDD ;取秒低位INC A ;秒低位加1MOV SCNDD,ACJNE A,#0AH,M1 ;逢十进一MOV SCNDD,#00HMOV A,SCNDG ;取秒高位INC A ;秒低位满十秒高位加1MOV SCNDG,ACJNE A,#06H,M2 ;逢六进一MOV SCNDG,#00HMOV A,MNTD ;取分低位INC A ;秒高位满六分低位加1MOV MNTD,ACJNE A,#0AH,F1 ;逢十进一MOV MNTD,#00HMOV A,MNTG ;取分高位INC A ;分低位满十分高位加1MOV MNTG,ACJNE A,#06H,F2 ;分高位满六分低位加1MOV MNTG,#00HLCALL BIAN ;改变分秒显示值(满1小时)LCALL XSHI ;显示改变后的分秒值SJMP LM1: LCALL BIAN ;只改变秒低位显示值(未满10秒)LCALL XSHI ;显示改变后的分秒值SJMP LM2: LCALL BIAN ;只改变秒显示值(未满1分钟)LCALL XSHI ;显示改变后的分秒值SJMP LF1: LCALL BIAN ;只改变秒和分高位显示值(未满10分钟) LCALL XSHI ;显示改变后的分秒值SJMP LF2: LCALL BIAN ;改变分秒显示值(未满1小时)LCALL XSHI ;显示改变后的时间SJMP L;显示改变后的时间(子程序)XSHI: MOV R3,#13H ;共19个字符MOV R0,#34HMOV COM,#80H ;从第一行第一位开始显示LCALL PR1XSHI1: MOV A,@R0MOV DAT,ALCALL PR2INC R0DJNZ R3,XSHI1RET;改变分秒的显示值(子程序)BIAN: MOV A,SCNDDADD A,#30H ;将秒低位转为ASCII码MOV 46H,A ;将改变后的秒低位存到46H单元MOV A,SCNDGADD A,#30H ;将秒高位转为ASCII码MOV 45H,A ;将改变后的秒高位存到45H单元 MOV A,MNTDADD A,#30H ;将秒低位转为ASCII码MOV 43H,A ;将改变后的分低位存到43H单元 MOV A,MNTGADD A,#30H ;将分高位转为ASCII码MOV 42H,A ;将改变后的分高位存到42H单元 RET;延时5ms(子程序)DELAY: MOV R6,#28HDEL1: MOV R7,#7BHDEL2: DJNZ R7,DEL2DJNZ R6,DEL1RET;存储汉字(子程序)HANZI: PUSH DPHPUSH DPLPUSH ACCNEXT: POP ACCPOP DPLPOP DPHPUSH DPHPUSH DPLPUSH ACCMOV A,R0MOVC A,@A+DPTR ;取字模MOV R1,AMOV DPTR,#CR_ADDHANZI2:MOVX A,@DPTRJB ACC.7,HANZI2 ;查询LCD是否忙MOV A,R1MOV DPTR,#DW_ADDMOVX @DPTR,A ;写入CGMRAMINC R0CJNE R0,#08H,NEXTMOV R0,#00HPOP ACCPOP DPLPOP DPHRET;写指令代码(子程序)PR1: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADDPR11: MOVX A,@DPTR ;查询LCD是否忙 JB ACC.7,PR11MOV A,COMMOV DPTR,#CW_ADD ;写指令MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;写显示数据(子程序)PR2: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADDPR21: MOVX A,@DPTR ;查询LCD是否忙 JB ACC.7,PR21MOV A,DATMOV DPTR,#DW_ADD ;写数据MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;汉字字模存储区ZYEAR: DB 08H,0FH,12H,0FH,0AH,1FH,02H,02HZMONTH:DB 0FH,09H,0FH,09H,0FH,09H,09H,13HZDAY: DB 0FH,09H,09H,0FH,09H,09H,0FH,00H;字符代码存储区TBL: DB 30H,30H,3AH,30H,30H,3AH,30H,31HDB 02H,32H,30H,01H,34H,30H,00H,39HDB 30H,30H,32HEND【实验报告】一.修改后的电原理图:(不需修改)二.修改后的程序清单和流程图7-4-1.第一行显示0~9,A~F,第二行显示a~p(不需修改,见预习报告)流程图:7-4-2.固定显示时间只需修改定时器部分:;计时TIME: MOV R0,#14H ;20×50ms=1sL: JNB TF0,$CLR TF0 ;清定时器溢出标志 DJNZ R0,TIME1MOV R0,#14HMOV TH0,#03CH ;重新写入计数初值 MOV TL0,#0B0HSETB EASETB ET0SETB TR0流程图:(见下页)7-4-3.滚动显示时间只需修改定时器部分:;计时TIME: MOV R0,#14H ;20×50ms=1sL: JNB TF0,$CLR TF0 ;清定时器溢出标志 DJNZ R0,TIME1MOV R0,#14HMOV TH0,#03CH ;重新写入计数初值 MOV TL0,#0B0HSETB EASETB ET0SETB TR0流程图:(见下页)三.实验数据和结果7-4-1.第一行显示0~9,A~F,第二行显示a~p 测试数据:(不需)测试结果:proteus仿真结果实验结果和仿真结果一致7-4-2.固定显示时间测试数据:(不需)测试结果:proteus仿真结果实验结果和仿真结果一致7-4-3.滚动显示时间测试数据:(不需)测试结果:proteus仿真结果实验结果和仿真结果一致四.实验分析7-4-1.第一行显示0~9,A~F,第二行显示a~p实验刚开始连接好电路,运行程序,LCD上却没有显示任何东西。
实验四LCD显示实验共5页文档
实验四LCD显示实验一、实验目的了解LCD显示的基本原理了解LCD的接口与控制方法掌握LCD显示图形的方法掌握LCD显示字符的方法(本次实验显示汉字)二、实验内容编写图形显示函数,在LCD上显示图形编写HZK16读取函数,在LCD上显示汉字三、预备知识了解汉字库的组织方式,汉字显示的原理学习LCD的显示原理和控制办法四、实验设备XARM9-2410教学实验箱ADT1000仿真器和ADT IDE集成开发环境串口连接线五、实验原理1、LCD显示原理LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。
因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。
光源的提供方式有两种:透射式和反射式。
笔记本电脑的LCD显示屏即为透射式,屏后面有一个光源,因此外界环境可以不需要光源。
而一般微控制器上使用的LCD为反射式,需要外界提供光源,靠反射光来工作。
2、LCD的驱动控制–总线驱动方式一般带有驱动模块的LCD显示屏使用总线驱动方式,这种LCD可以方便地与各种低档单片机进行接口,如8051系列单片机。
由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。
驱动模块具有八位数据总线,外加一些电源接口和控制信号。
而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。
由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。
3、LCD的驱动控制–扫描器控制方式扫描器控制方式LCD显示屏没有驱动电路,需要与驱动电路配合使用。
这种LCD体积小,但需要另外的驱动芯片。
通常可以使用带有LCD驱动能力的高档MCU驱动,如ARM系列的S3C44B0。
S3C44B0中具有内置的LCD控制器,它具有将显示缓存中的图象数据传输到外部LCD驱动电路的逻辑功能。
实验五 LCD显示实验
实验五LCD显示实验一、实验目的掌握点阵式LCD的工作原理、使用方法以及动态显示的编程方法。
二、实验内容编程在液晶屏上显示汉字“南昌理工学院机电工程学院”。
三、实验设备仪器8086微机原理实验箱清华同方电脑四、实验原理介绍LCD显示原理见硬件介绍部分。
用8255的A口作为数据口,C口的PC0、PC7作为握手信号。
五、实验步骤与分析1、实验接线:CS0↔CS8255,PA0~PA7↔DB0~DB7,PC0↔REQ,PC7↔BUSY2、编辑调试程序3、全速运行程序分析1、8255的端口地址偶地址有效2、8255的PC口可通过指令进行位操作。
六、实验程序框图(实验程序名:LCD.asm)程序代码:;=============================================== ;箱86液晶显示;CS0接CS8255,DB0-DB7接PA0-PA7,BUSY接PC7,REQ接PC0 assume cs:codecode segment publicorg 100h;=============================================== start: mov dx, 04a6hmov ax, 88hout dx, axmov ax, 70hout dx, axmov al, 0f4hcall comdcall delaystart1: mov si,offset[table]mov cx, 60wr1: mov dx, 04a4hin ax, dxand ax, 80hjnz wr1mov al, [si]call comdinc siloop wr1call delayok: jmp start1;=============================================== delay: mov cx,1000hdlyb: loop dlybret;=============================================== comd: mov dx, 04a0hout dx, almov dx, 04a6hmov ax, 71hout dx, axmon: mov dx, 04a4hin ax, dxand ax, 80hjz monmov dx, 04a6hmov ax, 70hout dx ,axret;===============================================table: DB 0F0H,01D,00D,36D,47D,0F0H,02D,00D,18D,93DDB 0F0H,03D,00D,32D,77D,0F0H,04D,00D,25D,04DDB 0F0H,05D,00D,49D,07D,0F0H,06D,00D,52D,26DDB 0F0H,01D,01D,27D,90D,0F0H,02D,01D,21D,71DDB 0F0H,03D,01D,25D,04D,0F0H,04D,01D,19D,44DDB 0F0H,05D,01D,49D,07D,0F0H,06D,01D,52D,26Dcode endsend start八、实验结果液晶屏上显示汉字“南昌理工学院机电工程学院”。
- 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.专业全拼+学号 EXP8 DISPLAY ”主程序静态显示“My information!”四、实验原理液晶显示的原理:采用的LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。
当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。
1.LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口说明如表: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)实验电路2)程序设计与调试静态显示#include<>#define uchar unsigned char #define uint unsigned int uchar code table[]=" Xin ";uchar code table1[]=" 412381"; sbit lcden=P2^2;sbit lcdrw=P2^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--);}void write_com(uchar com){lcdrs=0;P0=com; delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) {lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){lcden=0;lcdrw=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80+0x00); }void main(){init();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);}while(1);}}动态显示#include<>#define uchar unsigned char#define uint unsigned int uchar code table[]=" Xin "; uchar code table1[]=" 412381"; sbit lcden=P2^2;sbit lcdrw=P2^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--);}void write_com(uchar com) {lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) {lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){lcden=0;lcdrw=0;write_com(0x38);write_com(0x0f);write_com(0x06);write_com(0x01);write_com(0x80+0x00); }void main(){init();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;uchar flag1,flag2,flag3,flag4; sbit k1=P3^0;sbit k2=P3^1;sbit k3=P3^2;sbit k4=P3^3;sbit lcden=P2^2;sbit lcdrw=P2^1;sbit lcdrs=P2^0;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) {lcdrs=1;P0=date;delay(5);lcden=1;delay(5); lcden=0;}void init(){lcden=0;lcdrw=0;write_com(0x38); write_com(0x0f); write_com(0x06); write_com(0x01); }void main(){init();TMOD=0x01;TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1;ET0=1;TR0=1;EX0=1;IT0=1;IP=0x05;EX1=1;IT1=1;delay(100);while(1){ flag3=0;write_com(0x01);write_com(0x80+0x01); delay(50);for(num=0;num<15;num++) {write_data(table[num]); delay(200);}delay(200);write_com(0x01);}}void display(){if(k1==0){while(1){if(flag1==1) break;if(flag3==0)//{if(flag1==1)break;//控制返回write_com(0x01);write_com(0x80+0x00);delay(50);for(num=0;num<11;num++) //显示" Xin"{if(flag1==1) break;while(flag3==1){if(flag1==1)break; }write_data(table1[num]); delay(200);}write_com(0x80+0x40);for(num=0;num<16;num++)//显示" 412381"{if(flag1==1) break;while(flag3==1){if(flag1==1) break;}write_data(table2[num]);delay(200);}write_com(0x01);delay(200);write_com(0x80+0x00);for(num=0;num<16;num++)//显示" 412381"{if(flag1==1) break;while(flag3==1){if(flag1==1)break;}write_data(table2[num]);delay(200);}write_com(0x80+0x40);for(num=0;num<13;num++) //显示" EXP8"{if(flag1==1) break;while(flag3==1){if(flag1==1)break;}write_data(table3[num]);delay(200);}write_com(0x01);write_com(0x80+0x00);for(num=0;num<13;num++) //显示" EXP8"{if(flag1==1) break;while(flag3==1){if(flag1==1)break;}write_data(table3[num]);delay(200);}delay(200);if(flag1==1) break;write_com(0x80+0x40);for(num=0;num<13;num++) //显示" DISPLAY"{if(flag1==1) break;while(flag3==1){if(flag1==1)break;}write_data(table4[num]);delay(200);}write_com(0x01);write_com(0x80+0x00);for(num=0;num<13;num++) //显示" DISPLAY"{if(flag1==1) break;while(flag3==1){if(flag1==1)break;}write_data(table4[num]);delay(200);}write_com(0x80+0x40);for(num=0;num<11;num++) //显示" Xin"{if(flag1==1) break;while(flag3==1){if(flag1==1)break;}write_data(table1[num]);delay(200);}}} flag3=0;flag1=0;//清标志位write_com(0x01);//清屏}if(k2==0){//if(flag1==1)break;write_com(0x01);//清屏write_com(0x80+0x00);for(num=0;num<11;num++) //显示" Xin"{if(flag1==1)break;write_data(table1[num]);delay(50);}write_com(0x80+0x10);for(num=0;num<16;num++)//显示" 412381"{if(flag1==1)break;write_data(table2[num]);delay(50);}write_com(0x02);write_com(0x80+0x40);for(num=0;num<13;num++) //显示" EXP8"{if(flag1==1)break;write_data(table3[num]);delay(50); }write_com(0x80+0x50);for(num=0;num<13;num++) //显示" DISPLAY"{if(flag1==1)break;write_data(table4[num]);delay(50);}while(1){if(flag1==1) break;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{TH0=(65536-1000)/256; 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;}七、实验问题解决及总结实验中出现了运行垂直或水平效果时若按下暂停/继续按键再按返回按键后,再按垂直或水平按键不继续运行的情况。