单片机实验--LCD显示实验
- 格式:docx
- 大小:47.48 KB
- 文档页数:6
一、实验目的1. 理解液晶显示器(LCD)的基本工作原理和组成结构。
2. 掌握液晶显示器驱动电路的设计与调试方法。
3. 熟悉液晶显示器的接口技术及其与单片机的连接方式。
4. 通过实验验证液晶显示器的显示功能,并实现简单图形和文字的显示。
二、实验原理液晶显示器(LCD)是一种利用液晶材料的光学各向异性来实现图像显示的设备。
它主要由液晶层、偏光片、电极阵列、驱动电路等部分组成。
液晶分子在电场作用下会改变其排列方向,从而改变通过液晶层的光的偏振状态,实现图像的显示。
三、实验器材1. 液晶显示器模块(如12864 LCD模块)2. 单片机开发板(如STC89C52单片机)3. 电源模块4. 连接线5. 实验平台(如面包板)四、实验内容1. 液晶显示器模块的识别与检测首先,对所购买的液晶显示器模块进行外观检查,确保无损坏。
然后,根据模块说明书,连接电源和单片机开发板,进行初步的检测。
2. 液晶显示器驱动电路的设计与调试根据液晶显示器模块的技术参数,设计驱动电路。
主要包括以下部分:- 电源电路:将单片机提供的电压转换为液晶显示器所需的电压。
- 驱动电路:负责控制液晶显示器模块的行、列电极,实现图像的显示。
- 接口电路:将单片机的信号与液晶显示器的控制信号进行连接。
在设计电路时,需要注意以下几点:- 电源电压要稳定,避免对液晶显示器模块造成损害。
- 驱动电路的驱动能力要足够,确保液晶显示器模块能够正常显示。
- 接口电路的信号传输要可靠,避免信号干扰。
设计完成后,进行电路调试,确保电路正常工作。
3. 液晶显示器的控制程序编写根据液晶显示器模块的控制指令,编写控制程序。
主要包括以下部分:- 初始化程序:设置液晶显示器的显示模式、对比度等参数。
- 显示程序:实现文字、图形的显示。
- 清屏程序:清除液晶显示器上的显示内容。
在编写程序时,需要注意以下几点:- 控制指令要正确,避免对液晶显示器模块造成损害。
- 程序要简洁,易于调试和维护。
单片机液晶显示实验报告篇一:点阵液晶显示实验报告单片机实验课程名称:点阵液晶汉字显示实验授课班级:10自动化三班任课教师:文远熔计划学时:32学时实验组员:张腾耀梁钦赵福亮秦菱蔚郑欢王聪慧摘要本文介绍了PROTEUS与Keil联调开发51系列单片机应用系统的方法以及基于PROTEUS环境下的12864液晶显示的仿真设计。
将Keil C开发的程序用Proteus设计的仿真电路中交互运行调试的方法,设计12864的液晶显示汉字图像。
在基于PROTEUS环境下的12864液晶显示的仿真设计中,使用51芯片控制,然后显示在12864显示屏上,最多可显示4行每行8个汉字,并且可以通过按键随时改变12864显示屏上的内容。
通过Proteus环境下的温度报警器的仿真实验证明,在PROTEUS环境下可以完成单片机系统的硬件设计和软件调试,测试系统的性能,在实际应用中可以降低设计成本,缩短开发周期,提高效率。
关键词:Proteus;仿真;单片机;12864目录第一章绪论1.1实验任务和要求???????????????????????..11.2 基于Proteus的12864显示的研究???????????????.1 . 1.3 实验方案及原理??????????????????????..1第二章点阵液晶汉字显示的硬件部分2.1程序流程图?????????????????????????.2 2.2硬件电路图???????????????????????. 2.3芯片12864的简介?????????????????????第三章点阵液晶汉字显示的软件部分3.1 Keil简介??????????????????????????. 3.2 Proteus简介????????????????????????. 3.3 Proteus与Keil软件联合仿真的建立??????????????.第四章结论4.1实验总结??????????????????????????.附录1:点阵液晶汉字显示的源程序第一章绪论1.1 实验任务和要求用LCD128x64点阵液晶显示器显示指定汉字,最多可以显示4行、8个/行汉字,通过键盘可以随时改变显示的内容。
lcd显示实验原理
LCD(液晶显示)实验的原理是基于液晶分子的物理特性。
当给液晶施加电压时,液晶分子会重新排列,使光线能够直射出去而不发生任何扭转。
LCD的显像原理是由面板上每一个具有不同色彩与灰阶的像素来构成画面。
每个像素的灰阶与色彩,则是利用像素中液晶分子所透过的光源强弱与颜色来区分。
LCD驱动IC施加不同的电压改变液晶分子的排列方向,使液晶分
子依直立或扭转之状态,形成光闸门来决定背光光源的穿透程度以构成画面。
彩色显示原理是,LCD驱动IC控制液晶分子排列的方向使得单一像素产生
不同的色阶,但这样的色阶只有黑白两种色彩。
为了产生彩色,每一像素需要红、蓝、绿三种子像素来产生该像素之色彩,这部分便需要搭配彩色滤光片来达成。
彩色滤光片产生三种子像素所需的色彩,经过水平偏光片组合之后,便可在显示屏幕上成像。
以上内容仅供参考,如需更全面准确的信息,可以查阅液晶显示技术相关书籍或咨询该领域的专家。
第1篇一、实验目的1. 熟悉数码显示模块的结构和工作原理;2. 掌握51单片机控制数码显示模块的方法;3. 学会使用移位寄存器实现数码显示的动态扫描;4. 提高单片机编程能力和实践操作能力。
二、实验原理数码显示模块是一种常见的显示器件,主要由7段LED组成,可以显示0-9的数字以及部分英文字符。
51单片机通过控制数码显示模块的段选和位选,实现数字的显示。
移位寄存器是一种常用的数字电路,具有数据串行输入、并行输出的特点。
在本实验中,使用移位寄存器74HC595实现数码显示的动态扫描。
三、实验仪器与材料1. 51单片机实验板;2. 数码显示模块;3. 移位寄存器74HC595;4. 电阻、电容等电子元件;5. 电路连接线;6. 编译软件Keil uVision;7. 仿真软件Proteus。
四、实验步骤1. 电路连接(1)将51单片机的P1口与数码显示模块的段选端相连;(2)将74HC595的串行输入端Q(引脚14)与单片机的P0口相连;(3)将74HC595的时钟端CLK(引脚11)与单片机的P3.0口相连;(4)将74HC595的锁存端LR(引脚12)与单片机的P3.1口相连;(5)将数码显示模块的位选端与74HC595的并行输出端相连。
2. 编写程序(1)初始化51单片机的P1口为输出模式,P3.0口为输出模式,P3.1口为输出模式;(2)编写数码显示模块的段码数据表;(3)编写74HC595的移位和锁存控制函数;(4)编写数码显示模块的动态扫描函数;(5)编写主函数,实现数码显示模块的循环显示。
3. 编译程序使用Keil uVision编译软件将编写的程序编译成hex文件。
4. 仿真实验使用Proteus仿真软件进行实验,观察数码显示模块的显示效果。
五、实验结果与分析1. 编译程序后,将hex文件下载到51单片机实验板上;2. 使用Proteus仿真软件进行实验,观察数码显示模块的显示效果;3. 通过实验验证,数码显示模块可以正常显示0-9的数字以及部分英文字符;4. 通过实验,掌握了51单片机控制数码显示模块的方法,学会了使用移位寄存器实现数码显示的动态扫描。
一、实验目的1. 了解数字显示器的基本原理和分类。
2. 掌握数字显示器的设计方法和应用。
3. 学会使用数码管和LCD显示器进行数字显示。
4. 提高动手实践能力和问题解决能力。
二、实验内容1. 数码管显示实验2. LCD显示器显示实验三、实验原理1. 数码管显示原理:数码管是一种半导体发光器件,由若干个发光二极管(LED)组成,每个LED代表一个数码管的笔画。
通过控制LED的亮灭,可以显示不同的数字和字符。
2. LCD显示器显示原理:LCD显示器是一种液晶显示器,通过液晶分子的旋转控制光的透过与阻挡,实现图像的显示。
LCD显示器主要由液晶面板、背光源、偏振片、驱动电路等组成。
四、实验步骤1. 数码管显示实验(1)搭建电路:将数码管与AT89C51单片机连接,连接方式包括共阴极和共阳极两种。
(2)编写程序:使用C语言编写程序,实现数码管显示数字和字符。
(3)调试程序:使用Keil软件对程序进行编译和调试,观察数码管显示效果。
2. LCD显示器显示实验(1)搭建电路:将LCD显示器与AT89C51单片机连接,连接方式包括并行和串行两种。
(2)编写程序:使用C语言编写程序,实现LCD显示器显示数字和字符。
(3)调试程序:使用Keil软件对程序进行编译和调试,观察LCD显示器显示效果。
五、实验结果与分析1. 数码管显示实验结果:通过编写程序,数码管能够显示数字和字符,实现了实验目的。
2. LCD显示器显示实验结果:通过编写程序,LCD显示器能够显示数字和字符,实现了实验目的。
3. 分析:(1)数码管显示实验:在实验过程中,发现数码管的共阴极和共阳极连接方式不同,需要根据实际连接方式编写程序。
此外,为了提高显示效果,需要对数码管进行动态扫描显示。
(2)LCD显示器显示实验:在实验过程中,发现LCD显示器的并行和串行连接方式不同,需要根据实际连接方式编写程序。
此外,为了提高显示效果,需要对LCD显示器进行初始化和设置显示模式。
实验五笔段型LCD的静态驱动一、实验目的1.掌握LCD的显示原理;2.掌握单片机驱动笔段型LCD的方法;3.掌握笔段型LCD的静态驱动技术4.理解笔段型LCD静态驱动波形对像素点灰度的影响。
二、实验仪器用具笔段式LCD显示模块EDS801A,单片机开发板,电脑三、实验原理液晶显示器是常用的一种被动发光型显示器件,以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用如图5-1。
显示原理是液晶面板上下两面的导电玻璃上有电极;段电极与背电极呈正交带状分布,液晶位于正交的带状电极间。
有电场的地方液晶透光;无电场不透光;液晶面板底部背光电源。
液晶显示像素可以分为段形和点矩阵两大类,段形显示的电极连接可分为静态驱动连接和动态驱动连接。
静态驱动电极的每个显示段都单独引出。
所有各位显示的段全都公用一个背电极如图5-2所示。
图5-1 液晶显示模块图5-2 静态驱动连接静态驱动法是获得最佳显示质量的最基本的方法,静态驱动法的电路实现见图5-3(b)。
振荡器的脉冲信号经分频后直接施加在液晶显示器件的背电极BP上,而段电极的脉冲信号是由显示选择信号A与时序脉冲通过逻辑异或合成产生,异或逻辑的真值表如表5-1所示。
当某位显示像素被显示选择时,A=1,该显示像素上两电极的脉冲电压相位相差180°,在显示像素上产生2V 的电压脉冲序列,使该显示像素呈现显示特性;当某位显示像素为非显示选择时,A=0,该显示像素上两电极的脉冲电压相位相等,在显示像素上合成电压脉冲为0V ,从而实现显示效果。
这就是静态驱动法,驱动波形如图5-3(C )。
为了提高显示的对比度,适当地调整脉冲的电压即可。
图5-3 静态驱动法原理本次实验所用液晶显示模块为大连东显EDS801A ,实物图如图5-4,图5-5为引脚图及结构图,液晶必须采用交流驱动方式。
当液晶显示器的字符笔划电极与背电极(BP )呈等电位时,液晶不显示(消隐);当二者存在电位差时,液晶方可显示。
单片机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的对比度,以适应不同环境下的显示效果要求。
单片机实验报告班级:姓名:学号:指导教师:实验三 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 空闲,等待接收用户命令。
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 液晶显示屏上是否正确显示预设的字符。
电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:单片机原理与接口技术实验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、在上一题的基础上,增加两个外部中断,实现不同内容的显示。
单片机原理及应用实验报告一、引言单片机(Microcontroller Unit,简称MCU)是一种集成电路芯片,内部集成了微处理器、存储器、输入输出接口和定时器等功能模块,广泛应用于各种电子设备和控制系统中。
本实验报告将介绍单片机的基本原理以及其在实际应用中的实验。
二、单片机的基本原理单片机的核心是微处理器,它负责执行程序指令。
单片机的存储器包括程序存储器(Program Memory)和数据存储器(Data Memory)。
程序存储器用于存储程序指令,数据存储器用于存储数据和中间结果。
单片机通过输入输出接口与外部设备进行通信,通过定时器来控制程序的执行时间。
三、单片机的应用实验1. LED闪烁实验LED闪烁实验是单片机入门实验的经典案例。
通过控制单片机的输出口,周期性地改变LED的状态,从而实现LED的闪烁效果。
这个实验可以帮助初学者了解单片机编程的基本概念和操作。
2. 温度测量实验温度测量实验可以通过连接温度传感器和单片机的输入口,实时地获取环境温度,并通过数码管或LCD显示器来显示温度数值。
这个实验可以帮助学生掌握单片机输入输出口的使用方法,以及模拟信号的处理和显示。
3. 蜂鸣器控制实验蜂鸣器控制实验可以通过连接蜂鸣器和单片机的输出口,实现对蜂鸣器的控制。
通过编写程序,可以使蜂鸣器发出不同的声音,如单调的蜂鸣声、警报声等。
这个实验可以帮助学生学习单片机的数字输出和PWM(脉冲宽度调制)技术。
4. 电机控制实验电机控制实验可以通过连接电机和单片机的输出口,实现对电机的控制。
通过编写程序,可以控制电机的转动方向和速度。
这个实验可以帮助学生理解单片机输出口的电流和电压特性,以及电机的控制原理。
5. 红外遥控实验红外遥控实验可以通过连接红外接收器和单片机的输入口,实现对红外遥控信号的解码和处理。
通过编写程序,可以实现对各种红外遥控器的解码和按键处理。
这个实验可以帮助学生学习单片机输入口的中断处理和红外通信原理。
目录1、设计题目2、设计要求及实现功能3、硬件电路原路图4、软件流程图5、程序代码6、实验结果7、实验总结8、参考文献一、设计题目题目三:液晶LCD显示二、设计要求及实现功能要求:用实验台上的16列*1行的字符LCD显示器显示两屏字符:Welcome!Design By 姓名实现功能:编写完程序后,运行时可以在LCD字符显示器上显示:Welcome!Design By 姓名三、硬件电路原理图字符LCD 模块是一种专用显示字符、数字或符号的液晶显示模块。
这种模块每一个符号由5×7、5×8 或5×11 的点阵像素排列组成的,字符间隔为一个点距,行间隔为一个行距,模块本身附有显示驱动控制电路,可以与单片机的I/O 口线直接连接,使用方便。
目前广泛使用的字符LCD 模块其显示驱动控制电路多是HD44780 或兼容品,其接口信号、操作指令相同。
本实验选用的字符LCD 模块是香港精电公司生产的规格为16×1 的字符LCD 模块,可以在一行上显示16 个字符。
该模块与8051 单片机I/O 口线直接连接的电路如图1所示。
字符LCD模块的接口信号:①GND、VCC:电源,VCC=+5V。
②Vee:液晶显示对比度调节电压输入。
可以通过调节LCD 左上角的多圈电位器RW2 来调节。
③DB7~ DB0:数据总线,三态。
用于与模块之间传送信息。
这里连接P1.0~P1.7。
以下3 个信号为控制信号:④RS:寄存器选择信号,输入。
这里连接P3.3(INT1)。
模块中有两类寄存器,一类是指令寄存器,用于写入指令;另一类是数据寄存器,用于写入的数据。
RS=0,选择指令寄存器。
RS=1,选择数据寄存器。
⑤R/W :读/写信号,输入。
这里连接P3.4(T0)。
R/W =1,读操作;R/W =0,写操作⑥E:使能信号,输入。
模块的读/写控制信号。
这里连接P3.5(T1)。
读操作时,E 为高电平时,模块的数据或状态输出至DB7~DB0 上,供单片机读取;写操作时,E 信号的下降沿将单片机送至数据总线上的数据或指令写入模块中。
计算机科学与工程系实验报告实验题目:制作一个采用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编程的方法,将所学知识运用到实践中,这是一件慢慢的过程,首先要把理论知识理解透彻,然后就是例题看懂,弄懂举一反三。
LCD与单片机的连接电路图和LCD显示程序LCD与单片机的连接电路图和LCD显示程序/LCD测试程序3.2.5 LCD显示电路液晶显示器简称LCD显示器,它是利用液晶经过处理后能改变光线的传输方向的特性来显示信息的。
要使用点阵型LCD显示器,必须有相应的LCD控制器、驱动器来对LCD显示器进行扫描、驱动,以及一定空间的ROM和RAM来存储写入的命令和显示字符的点阵。
现在往往将LCD控制器、驱动器、RAM、ROM和LCD显示器连接在一起,称为液晶显示模块。
液晶显示模块是一种常见的人机界面,在单片机系统中的应用极其广泛。
液晶显示模块既可以显示字符,又可以显示简单的图形。
本系统采用的是1602的LCD接口。
1602是一种点阵字符型液晶显示模块,可以显示两行共32个字符。
根据LCD型号的不同,所需要的背光电阻大小会不同,可自行调节。
本系统采用的LCD为RT-1602C,其主要引脚的功能如下:RS:数据/命令选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。
RW:读/写选择端,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时,可以写入指令或者显示地址;当RS为低电平、RW为高电平时,可以读忙信号;当RS为高电平、RW为低电平时,可以写入数据。
E:使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
图3-9 LCD显示电路LCD测试程序#include <>/********IO引脚定义*********************************************************** /sbit LCD_RS=P2^7;//定义引脚sbit LCD_RW=P2^6;sbit LCD_E=P2^5;/********宏定义*********************************************************** / #define LCD_Data P0#define Busy 0x80 //用于检测LCD状态字中的Busy标识/********数据定义*********************************************************** **/ unsigned char code uctech[] = {"Happy every day"};unsigned char code net[] = {""};/********函数声明*********************************************************** **/ void WriteDataLCD(unsigned char WDLCD); //写数据void WriteCommandLCD(unsigned char WCLCD,BuysC); //写命令unsigned char ReadDataLCD(void); //读数据unsigned char ReadStatusLCD(void); //读状态void LCDInit(void); //初始化void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //相应坐标显示字节内容void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); //相应坐标开始显示一串内容void Delay5Ms(void); //延时void Delay400Ms(void); //延时/***********主函数开始********************************************************/ void main(void){Delay400Ms(); //启动等待,等LCD讲入工作状态LCDInit(); //初始化Delay5Ms(); //延时片刻(可不要)DisplayListChar(0, 0, uctech);DisplayListChar(1, 5, net);ReadDataLCD(); //测试用句无意义while(1);}/***********写数据********************************************************/ void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD(); //检测忙LCD_Data = WDLCD;LCD_RS = 1;LCD_RW = 0;LCD_E = 0; //若晶振速度太高可以在这后加小的延时LCD_E = 0; //延时LCD_E = 1;}/***********写指令********************************************************/ void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCD(); //根据需要检测忙LCD_Data = WCLCD;LCD_RS = 0;LCD_RW = 0;LCD_E = 0;LCD_E = 0;LCD_E = 1;}/***********读数据********************************************************/ unsigned char ReadDataLCD(void){LCD_RS = 1;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;return(LCD_Data);}/***********读状态*******************************************************/ unsigned char ReadStatusLCD(void){LCD_Data = 0xFF;LCD_RS = 0;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;while (LCD_Data & Busy); //检测忙信号return(LCD_Data);}/***********初始化********************************************************/ void LCDInit(void){LCD_Data = 0;WriteCommandLCD(0x38,0); //三次模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}/***********按指定位置显示一个字符*******************************************/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码WriteDataLCD(DData);}/***********按指定位置显示一串字符*****************************************/void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20){ //若到达字串尾则退出if (X <= 0xF){ //X坐标应小于0xFDisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}/***********短延时********************************************************/ void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}/***********长延时********************************************************/ void Delay400Ms(void){unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);}LCD与单片机连接的引脚并不是固定的,如有不同只需要在程序里改一下引脚即可。
实验19L C D显示实验
一、实验目的:
学习液晶显示的编程方法,了解液晶显示模块的工作原理。
掌握液晶显示模块与单片机的接口方法。
二、所需设备
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 握手协议,简单可靠。
硬件接口
接口协议为请求/应答(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个字节,模块在接收到最后一个字节
后才开始执行整个命令的内部操作,因此,最后一个字节的应答BUSY 高电平(BUSY =1)持续时间较长,具体的时序图和时间参数说明查阅相关手册。
用户命令
用户通过用户命令调用 OCMJ 系列液晶显示器的各种功能。
命令分为操作码及操作数两部分,操作数为十六进制。
共分为 3 类10 条。
分别是:
一)、字符显示命令:1、显示国标汉
字;
2、显示8X8 ASCII
字符;
3、显示8X16ASCII
字符;
二)、图形显示命令:4、显示位点
阵;
5、显示字节点阵;
三)、屏幕控制命
令:
6、清屏;
7、上移;
8、下移;
9、左移;10、右移;
(以下所示取值范围分别为:2X8、4X8、5X10的取值范围)
1)显示国标汉字
命令格式: F0 XX YY QQ WW
该命令为5字节命令(最大执行时间为毫秒,Ts2=),其中
XX:为以汉字为单位的屏幕行坐标值,取值范围00到07、02到09、00到09
YY:为以汉字为单位的屏幕列坐标值,取值范围00到01、00到03、00到04
QQ WW:坐标位置上要显示的GB 2312 汉字区位码
2) 显示8X8 ASCII字符
命令格式:F1 XX YY AS
该命令为4字节命令(最大执行时间为毫秒,Ts2=),其中
XX:为以ASCII码为单位的屏幕行坐标值,取值范围00到0F、04到13、00到13
YY:为以ASCII码为单位的屏幕列坐标值,取值范围00到1F、00到3F、00到4F
AS:坐标位置上要显示的ASCII 字符码
3) 显示8X16 ASCII字符
命令格式:F9 XX YY AS
该命令为4字节命令(最大执行时间为毫秒,Ts2=),其中
XX:为以ASCII码为单位的屏幕行坐标值,取值范围00到0F、04到13、00到13
YY:为以ASCII码为单位的屏幕列坐标值,取值范围00到1F、00到3F、00到4F
AS:坐标位置上要显示的ASCII 字符码
4) 显示位点阵
命令格式: F2 XX YY
该命令为3字节命令(最大执行时间为毫秒,Ts2=),其中
XX:为以1*1点阵为单位的屏幕行坐标值,取值范围00到7F、20到9F、00到9F
YY:为以1*1点阵为单位的屏幕列坐标值,取值范围00到40、00到40、00到40
5) 显示字节点阵
命令格式: F3 XX YY BT
该命令为4字节命令(最大执行时间为毫秒,Ts2=),其中
XX:为以1*8点阵为单位的屏幕行坐标值,取值范围00到0F、04到13、00到13
YY:为以1*1点阵为单位的屏幕列坐标值,取值范围00到1F、00到3F、00到4F
BT:字节像素值,0 显示白点,1 显示黑点(显示字节为横向)6) 清屏
命令格式:F4
该命令为单字节命令(最大执行时间为11毫秒,Ts2=11mS),其功能为将屏幕清空。
7) 上移
格式:F5
该命令为单字节命令(最大执行时间为25毫秒,Ts2=25mS),其功能为将屏幕向上移一个点阵行。
8) 下移
命令格式:F6
该命令为单字节命令(最大执行时间为30毫秒,Ts2=30mS),其功能为将屏幕向下移动一个点阵行。
9) 左移
命令格式:F7
该命令为单字节命令(最大执行时间为12毫秒,Ts2=12mS),其功能为将屏幕向左移动一个点阵行。
10) 右移
命令格式: F8
该命令为单字节命令(最大执行时间为12毫秒,Ts2=12mS),其功能为将屏幕向右移动一个点阵行。
显示窗口坐标关系
以上列表为汉字、ASCⅡ码显示屏幕坐标(ASCⅡ码Y坐标一点阵坐标为准)。
如显示图形点阵,则以128*64(OCMJ4X8)或128*32(OCMJ2X8)点阵坐标为准,可在屏幕任意位置显示。
(2)OCMJ2×8液晶模块外部连接原理图及接口说明
图3 –55 89C52与OCMJ4X8模块连接图
模块上DB0~DB7插孔对应于位数据线;BUSY、REQ插孔分别对应于图中相应的引脚。
(3)OCMJ2×8液晶模块的基本测试方法
CPU模块的~接DB0~DB7,T0接BUSY,T1接REQ。
运行测试程序,液晶屏上应显示“北京理工达盛科技有限公司”。
测试参考程序如下:
BUSY BIT
STOBE BIT
CSEG AT 0000H
LJMP START
CSEG AT 4100H
START: CLR STOBE
SETB BUSY
MOV A, #0F4H
ACALL SUB2
ACALL DELAY ;清屏
START1: MOV R0, #01H
MOV R1, #3CH
HE1: JB BUSY HE1
ACALL SUB1
ACALL SUB2
DJNZ R1, HE1
ACALL DELAY
ACALL DELAY
ACALL DELAY
LJMP START1
DELAY: MOV R2, #23H
DEL0: MOV R4, #06FH
DEL1: MOV R6, #06FH
DEL2: DJNZ R6, DEL2
DJNZ R4, DEL1
DJNZ R2, DEL0
RET
SUB2: NOP
MOV P1,A
SETB STOBE
INC R0
HE2: NOP
JNB BUSY,HE2
CLR STOBE
RET
SUB1: MOV A, R0 ;显示“北京理工达盛科技有限公司”
MOVC A,@A+PC
RET
DB 0F0H,01D,00D,17D,17D,0F0H,02D,00D,30D,09D
DB 0F0H,03D,00D,32D,77D,0F0H,04D,00D,25D,04D
DB 0F0H,05D,00D,20D,79D,0F0H,06D,00D,42D,02D
DB 0F0H,01D,01D,31D,38D,0F0H,02D,01D,28D,28D
DB 0F0H,03D,01D,51D,48D,0F0H,04D,01D,47D,62D
DB 0F0H,05D,01D,25D,11D,0F0H,06D,01D,43D,30D
END。