LCD显示程序

合集下载

LCD液晶显示实验实验报告及程序

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(不检测忙信号)。

液晶显示器的程序设计

液晶显示器的程序设计

液晶显示器的程序设计概述液晶显示器(Liquid Crystal Display,简称LCD)是一种常见的显示设备,广泛应用于计算机、电视、方式等电子设备中。

液晶显示器的程序设计是为了控制和管理液晶显示器的工作,包括显示图像、显示文字、调节亮度和对比度等功能。

LCD控制器液晶显示器的控制是通过液晶显示器控制器(LCD Controller)进行的。

LCD控制器是一种专门设计的芯片,用于控制液晶显示器的各个参数和功能。

LCD控制器的主要任务是将输入的图像数据转换为适合液晶显示器显示的信号,并发送给液晶显示器。

显示图像在液晶显示器的程序设计中,显示图像是最基本的功能之一。

通常,液晶显示器的图像数据是以像素(Pixel)的形式存储和传输的。

程序设计需要将要显示的图像数据转换为液晶显示器可识别的信号,并设置显示的坐标和尺寸。

程序还需要处理图像的刷新和更新,以保持显示的连续性和流畅性。

显示文字液晶显示器还可以显示文字信息。

在程序设计中,显示文字需要使用字符编码和字库来实现。

字符编码是将字符映射为相应的二进制代码的过程,而字库是存储和管理字符的集合。

程序设计需要将要显示的文字信息转换为相应的字符编码,并从字库中获取对应的字符数据。

然后,将字符数据转换为液晶显示器可识别的信号,并设置显示的位置和样式。

调节亮度和对比度液晶显示器的亮度和对比度是可以调节的。

在程序设计中,调节亮度和对比度需要通过设置LCD控制器的参数来实现。

可以通过增加或减少LCD控制器的驱动电流、PWM调光等方式来调节液晶显示器的亮度。

对比度的调节则可以通过调整LCD控制器的电压差或电压偏置等来实现。

动态效果液晶显示器的程序设计还可以实现一些动态效果,如渐变、闪烁、滚动等。

这些动态效果可以通过在程序中控制图像和文字的显示位置、透明度、曝光时间等来实现。

程序设计需要根据实际需求,对液晶显示器的参数进行精确控制,以实现所需的动态效果。

液晶显示器的程序设计包括显示图像、显示文字、调节亮度和对比度等功能,以及实现一些动态效果。

lcd初始化操作流程

lcd初始化操作流程

lcd初始化操作流程
LCD初始化操作流程。

液晶显示屏(LCD)是一种常见的显示设备,广泛应用于各种电
子产品中。

在使用LCD之前,需要进行初始化操作,以确保显示屏
能够正常工作。

下面是一般的LCD初始化操作流程:
1. 电源连接,首先,将LCD的电源线连接到电源适配器或者电
池上,确保LCD有足够的电力供应。

2. 数据线连接,将LCD的数据线连接到控制器或者其他设备上,以便传输显示数据。

3. 信号线连接,将LCD的信号线连接到控制器或者其他设备上,以便接收控制信号。

4. 电源开关,打开LCD的电源开关,此时LCD应该会显示一些
默认的信息,比如品牌标志或者欢迎词。

5. 控制器设置,根据LCD的规格和要求,设置控制器的参数,
比如分辨率、刷新率等。

6. 显示数据传输,将需要显示的数据传输到LCD的控制器中,可以是文字、图像或者视频等。

7. 调整亮度和对比度,根据实际需要,调整LCD的亮度和对比度,以获得最佳的显示效果。

8. 检查显示效果,最后,检查LCD的显示效果,确保显示内容清晰、色彩鲜艳、不出现闪烁或者残影等问题。

通过以上步骤,可以完成LCD的初始化操作,使其能够正常显示所需的内容。

在实际应用中,不同型号的LCD可能有不同的初始化要求,因此在进行初始化操作时,需要参考LCD的具体说明书或者技术规格。

LCD原理及显示程序

LCD原理及显示程序

在日常生活中,我们对液晶显示器并不陌生。

液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。

在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、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字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。

液晶显示器的程序设计简洁范本

液晶显示器的程序设计简洁范本

液晶显示器的程序设计简洁范本
```cpp
#include <LiquidCrystal.h>
// 定义LCD Pin
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setu
//初始化LCD
lcd.begin(16, 2);
//显示欢迎信息
lcd.print("LCD Program");
void loo
//滚动显示消息
lcd.scrollDisplayLeft(;
//延迟一段时间
delay(1000);
```
这是一个基本的液晶显示器程序,使用LiquidCrystal库来控制液晶
显示器。

在setup函数中,我们初始化了液晶显示器,并显示了欢迎信息。

在loop函数中,我们使用scrollDisplayLeft函数来滚动显示LCD上的
内容,之后使用delay函数延迟一段时间,以便观察滚动效果。

这只是一个简单的范本,液晶显示器的程序设计还可以根据实际需求
进行扩展和修改。

例如,我们可以通过增加按钮控制来实现菜单选择功能,或者通过使用传感器来动态更新显示内容等。

总结起来,液晶显示器的程序设计需要了解液晶显示器的硬件接口和
使用方法,并与所使用的开发板或单片机进行合适的软硬件连接。

通过使
用合适的库函数,可以轻松地实现各种液晶显示器的功能和效果。

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

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

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

result=1,忙碌;result=0,不忙***************************************************/bit Lcd_BusyTest(void)bit result;RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1; //E=1,才允许读写_nop_(); //空操作_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间result=BF; //将忙碌标志电平赋给resultE=0;return result;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/void Lcd_WriteCom (unsigned char dictate){ while(Lcd_BusyTest()==1); //如果忙就等待RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0; //E置低电平(写指令时就是让E从0到1发生正跳变,所以应先置ぜ? _nop_();_nop_(); //空操作两个机器周期,给硬件反应时间Lcd_Data=dictate; //将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:指定字符显示的实际地址x入口参数:注:此函数已经加上了0x80,故只需写上实际地址就行***************************************************/void Lcd_WriteAddress(unsigned char x){ Lcd_WriteCom(x|0x80); //显示位置的确定方法规定为80H+地址码x/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)***************************************************/void Lcd_WriteData(unsigned char y){while(Lcd_BusyTest()==1);RS=1; //RS为高电平,RW为低电平时,可以写入数据RW=0;E=0; //E置低电平(写指令时就是让E从0到1发生正跳变所以应先置ぜ?Lcd_Data=y; //将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:对LCD的显示模式进行初始化设置***************************************************/void Lcd_Int(void){Lcd_delay(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间Lcd_WriteCom(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口Lcd_delay(5); //延时5msLcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);设置模式次写9// Lcd_WriteCom(0x38);Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x0C); //显示模式设置:显示开,有光标,光标闪烁Lcd_delay(5);Lcd_WriteCom(0x06); //显示模式设置:光标右移,字符不移Lcd_delay(5);Lcd_WriteCom(0x01); //清屏幕指令,将以前的显示内容清零Lcd_delay(5); }void hanying_show(void){unsigned char Lcd_i;Lcd_WriteCom(0x01);//清显示:清屏幕指令Lcd_delay(2);Lcd_WriteAddress(0x00); // 设置显示位置为最左侧Lcd_delay(2);Lcd_i=0;while(string1[Lcd_i]!='\0') //'\0'是数组结束标志需先将字符存入{Lcd_WriteData(string1[Lcd_i]); // 显示字符Lcd_i++;Lcd_delay(4);}}void main(){Lcd_Int(); //1602初始化while(1){hanying_show();}}。

LCD液晶显示屏(介绍及程序GOOD)

LCD液晶显示屏(介绍及程序GOOD)

第一节:了解LCD液晶显示屏作者:尘封往事文章来源:本站原创点击数:2097 更新时间:2005-11-14 10:43:40一:字符型点阵式LCD液晶显示屏:LCD的应用很广泛,简单如手表上的液晶显示屏,仪表仪器上的液晶显示器或者是电脑笔记本上的液晶显示器,都使用了LCD。

在一般的办公设备上也很常见,如传真机,复印机,以及一些娱乐器材玩具等也常常见到LCD的足迹。

本站要介绍的LCD为字符型点阵式LCD模块(liquid Crystal Display Module)简称LCM,或者是字符型LCD。

字符型液晶显示模块是一种专门用于显示字母,数字,符号等的点阵式液晶显示模块。

在显示器件上的电极图型设计,它是由若干个5*7或5*11等点阵符位组成。

每一个点阵字符位都可以显示一个字符。

点阵字符位之间有一空点距的间隔起到了字符间距和行距的作用。

目前市面上常用的有16字*1行,16字*2行,20字*2行和40字*2行等的字符模块组。

这些LCM虽然显示字数各不相同,但是都具有相同的输入输出界面。

上图为1602LCD在本站2004学习套件上显示一个字母A的运行图片本章将以16*2字符型液晶显示模块RT-1602C为例,详细介绍字符型晶显示模块的应用技术。

一般字符LCD模块的控制器为日本日立公司的HD44780及其替代集成电路,驱动器为HD44100及其替代的集成电路以下将会略做介绍。

一般初学者由字符型LCD入手比较简单,学完之后,再进一步控制图案型LCD模块。

图1.1所示为16*2地的外观,表1.2为LCM的接脚及功能。

二、1602的外形尺寸三、1602的接口信号说明:编号符号引脚说明编号符号引脚说明1 VSS 电源地9 D2 Data I/O2 VDD 电源正极10 D3 Data I/O3 VL 液晶显示偏压信号11 D4 Data I/O4 RS 数据/命令选择端(H/L )12 D5 Data I/O5 R/W 读/写选择端(H/L)13 D6 Data I/O6 E 使能信号14 D7 Data I/O7 D0 Data I/O 15 BLA 背光源正极8 D1 Data I/O 16 BLK 背光源负极表1.4:液晶显示模块RT-1602C的接脚及功能第二节:LCD液晶显示屏的内部结构作者:尘封往事文章来源:本站原创点击数:1722 更新时间:2005-11-14 10:51:20液晶显示模块WM-C1602N的内部结构可以分成三部份:一为LCD控制器,二为LCD驱动器,三为LCD显示装置,如图示2.1所示:地址计数器AC用户自定义的字符发生器CGRAMCGRAM为可自编数据区DDRAM为显示缓冲区;内藏的字符发生存储器(CGROM)图2.1:LCM内部方块图目前大多数的LCD液晶显示器的控制器都有采用一颗型号为HD44780的集成电路作控制器。

LCD1602显示程序头文件

LCD1602显示程序头文件

LCD1602显示程序头文件——51单片机的Proteus实验本文转载自小波电子工作室。

C语言源代码/******************************************************************************** ******摘要: LCD1602显示程序头文件,到时在主程序里包含这个头文件后,就可以直接调用里面的函数了版本: V1.0完成日期: 2008.5.5作者: ZHOUSFE******************************************************************************* 修改日期:版本:******************************************************************************/ #i nclude "delay.h"#define uchar unsigned char#define uint unsigned int#define Port P0 //数据端口/*定义端口*********************************************************/sbit Rs = P1^0;sbit Rw = P1^1;sbit En = P1^2;/*定义LCD控制字*****************************************************///清屏及光标归位#define LCD_CLEAR 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回左上角//显示开关控制指令#define LCD_SCREEN_ON 0x0C //显示开#define LCD_SCREEN_OFF 0x08 //显示关#define LCD_CURSOR_ON 0x0A //显示光标#define LCD_CURSOR_OFF 0x08 //无光标#define LCD_C_FLASH_ON 0x09 //光标闪动#define LCD_C_FLASH_OFF 0x08 //光标不闪动//进入模式设置指令#define LCD_AC_UP 0x06 //新数据后光标右移#define LCD_AC_DOWN 0x04 //新数据后光标左移#define LCD_S_MOVE_ON 0x05 // 画面可平移#define LCD_S_MOVE_OFF 0x04 //画面不可平移//设定显示屏或光标移动方向指令#define LCD_C_LEFT 0x10 //光标左移1格,且AC值减1#define LCD_C_RIGHT 0x11 //光标右移1格,且AC值加1#define LCD_CHAR_LEFT 0x18 //显示器上字符全部左移一格,但光标不动#define LCD_CHAR_RIGHT 0x1C //显示器上字符全部右移一格,但光标不动uchar code number[10]={"0123456789"};/*所有函数声明*********************************************************/ void LCD_init(void);void LCD_wdata(uchar wdata);void LCD_wcommand(uchar lcd_cmd,busy_f);void LCD_gotoxy(uchar x,uchar y);void Disp_char(uchar *str);void Disp_number(unsigned int num);uchar Rstatus(void);uchar LCD_rdata(void);/*********************************************************************函数名称:LCD_wcommand()功能描述:LCD写指令入口参数:uchar lcd_cmd:命令字,uchar busy_f:忙检测标志位返回值:无*********************************************************************/void LCD_wcommand(uchar lcd_cmd,busy_f){if (busy_f) Rstatus(); //不忙才执行下个程序Port = lcd_cmd;Rs = 0;Rw = 0;En = 0;En = 0;En = 1;}/*********************************************************************函数名称:LCD_wdata()功能描述:LCD写数据入口参数:uchar wdata:所写数据返回值:无*********************************************************************/void LCD_wdata(uchar wdata){Rstatus();Port = wdata;Rs = 1;Rw = 0;En = 0; //若晶振速度太高可以在这后加小的延时En = 0; //延时En = 1;}/********************************************************************* 函数名称:LCD_rdata()功能描述:LCD读数据入口参数:无返回值:所读数据*********************************************************************/ uchar LCD_rdata(void){Rs = 1;Rw = 1;En = 0;En = 0;En = 1;return Port;}/********************************************************************* 函数名称:Rstatus()功能描述:LCD读忙状态入口参数:无返回值:若忙,则等待,不忙则返回Port*********************************************************************/ uchar Rstatus(void){Port = 0xFF;Rs = 0;Rw = 1;En = 0;En = 0;En = 1;while (Port & 0x80); //检测忙信号,不忙则退出等待return(Port);}/********************************************************************* 函数名称:LCD_init()功能描述:LCD初始化入口参数:无返回值:无*********************************************************************/void LCD_init(void){Port = 0;LCD_wcommand(0x38,0); //三次显示模式设置,不检测忙信号delay_ms(3);LCD_wcommand(0x38,0);delay_ms(3);LCD_wcommand(0x38,0);delay_ms(3);LCD_wcommand(0x38,1); //显示模式设置(0X38双行(5*7),0X34单行(5*10)),0X30单行(5*7);开始要求每次检测忙信号LCD_wcommand(0x08,1); //关闭显示LCD_wcommand(0x01,1); //显示清屏LCD_wcommand(0x06,1); // 显示光标移动设置LCD_wcommand(0x0C,1); // 显示开及光标设置}/*********************************************************************函数名称:LCD_gotoxy()功能描述:定位到(x,y)位置入口参数:x为行(0~1),y为列(0~15)返回值:无*********************************************************************/void LCD_gotoxy(uchar x, uchar y){x &= 0x1; //限制x不能大于1,y不能大于15y &= 0xF;if(!x) LCD_wcommand(0x80|y,1);else LCD_wcommand(0xC0|y,1);}/*********************************************************************函数名称:Disp_char()功能描述:显示字符或字符串入口参数:字符或字符串返回值:无**********************************************************************/void Disp_char(uchar *str){while(*str!='\0'){LCD_wdata(*str);str++;}}/*********************************************************************函数名称:Disp_number()功能描述:显示四数字入口参数:num:显示的数字 n:数字位数返回值:无************************************************************************/ void Disp_number(uint num,uchar n){uchar a; //个位uchar b; //十位uchar c; //百位uchar d; //千位// uchar e; //万位switch(n){case 1:LCD_wdata(num);break;case 2:b=num/10;a=num%10;LCD_wdata(number[a]);LCD_wdata(number[b]);break;case 3:c=num/100;b=num%100/10;a=num%10;LCD_wdata(number[a]);LCD_wdata(number[b]);LCD_wdata(number[c]);break;case 4:d=num/1000;c=num%1000/100;b=num%1000%100/10;a=num%10;LCD_wdata(number[a]);LCD_wdata(number[b]);LCD_wdata(number[c]);LCD_wdata(number[d]);break;}。

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

lcd1602流程图

lcd1602流程图

lcd1602流程图LCD1602流程图是指在液晶显示屏模块上显示特定信息的流程图。

下面我们将介绍一个简单的LCD1602流程图,包括初始化液晶模块、设置显示模式、输入要显示的内容等步骤。

首先,我们需要准备一个Arduino开发板和一个LCD1602模块。

将LCD模块的VCC和GND引脚分别连接到Arduino的3.3V和GND引脚上,将SDA和SCL引脚连接到Arduino的A4和A5引脚上。

然后,编写以下步骤来实现流程图。

第一步,初始化液晶模块。

在Arduino开发环境中,我们需要包含LiquidCrystal_I2C.h库文件,然后创建一个LiquidCrystal_I2C对象。

使用begin()函数初始化LCD模块,并设置显示模式和光标的闪烁。

第二步,设置显示模式。

使用setCursor()函数将光标移动到特定位置,并使用print()函数输入要显示的内容。

根据需要可以设置一到两行进行显示。

第三步,设置滚动显示。

使用scrollDisplayLeft()或scrollDisplayRight()函数在屏幕上滚动显示内容。

第四步,设置光标显示状态。

使用noCursor()函数关闭光标显示,使用cursor()函数开启光标显示。

第五步,设置光标闪烁状态。

使用noBlink()函数关闭光标闪烁,使用blink()函数开启光标闪烁。

第六步,设置显示打开/关闭状态。

使用noDisplay()函数关闭显示,使用display()函数开启显示。

第七步,设置自定义字符。

使用createChar()函数在CGRAM (字符生成RAM)中自定义字符,并使用write()函数在屏幕上显示。

第八步,清除屏幕。

使用clear()函数清除屏幕上的内容。

第九步,设置屏幕显示次数。

使用blinkDisplay()函数设置屏幕的显示次数,并使用count()函数检测屏幕的显示次数。

第十步,控制光标位置。

使用setCursor()函数将光标移动到特定位置。

LCD液晶显示程序

LCD液晶显示程序

//功能:LCD液晶显示程序,采用8位数据接口#include <iom16v.h>#include <macros.h> //库函数头文件,代码中引用了_nop()函数// 定义控制信号端口#define E 2#define RW 1#define RS 0//sbit RS=0xB0; //P3.0 sbit RS=P3^0;//sbit RW=0xB1; //P3.1//sbit E= 0xB2; //P3.2// 声明调用函数void lcd_w_cmd(unsigned char com); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数void delay1(); //软件实现延时函数,5个机器周期void gong(void);void main() //主函数{unsigned char lcd[]="yin hai chang";unsigned char i;PORTC=0xff; // 送全1到P0口DDRC=0xff;PORTB=0xff; // 送全1到P0口DDRB=0xff;int1(); // 初始化LCDdelay(255);lcd_w_cmd(0x80); // 设置显示位置delay(255);for(i=0;i<13;i++) // 显示字符串{lcd_w_dat(lcd[i]);delay(200);}gong();lcd_w_cmd(0x8f);lcd_w_dat(0x00);while(1); // 原地踏步//函数名:delay//函数功能:采用软件实现可控延时//形式参数:延时时间控制参数存入变量t中//返回值:无void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<50;j++);}//函数名:delay1//函数功能:采用软件实现延时,5个机器周期//形式参数:无//返回值:无void delay1(){_NOP();_NOP();_NOP();}//函数名:int1//函数功能:lcd初始化//形式参数:无//返回值:无void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0f); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}//函数名:lcd_r_start//函数功能:读状态字//形式参数:无//返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsigned char lcd_r_start(){unsigned char s;PORTB=PINB|(1<<RW); //RW=1; //RW=1,RS=0,读LCD状态delay1();PORTB=PINB&(~(1<<RS)); //RS=0;delay1();PORTB=PINB|(1<<E); //E=1; //E端时序delay1();s=PINC; //从LCD的数据口读状态delay1();PORTB=PINB&(~(1<<E));//E=0;delay1();// RW=0;delay1();return(s); //返回读取的LCD状态字}//函数名:lcd_w_cmd//函数功能:写命令字//形式参数:命令字已存入com单元中//返回值:无void lcd_w_cmd(unsigned char com){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环PORTB=PINB&(~(1<<RW));//RW=0;delay1();PORTB=PINB&(~(1<<RS));//RS=0; // RW=0,RS=0,写LCD命令字delay1();PORTB=PINB|(1<<E); //E=1; //E端时序delay1();PORTC=com; //将com中的命令字写入LCD数据口delay1();PORTB=PINB&(~(1<<E));//E=0;delay1();// RW=1;delay(255);}//函数名:lcd_w_dat//函数功能:写数据//形式参数:数据已存入dat单元中//返回值:无void lcd_w_dat(unsigned char dat)unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环PORTB=PINB&(~(1<<RW)); //RW=0;delay1();PORTB=PINB|(1<<RS); //RS=1; // RW=1,RS=0,写数据delay1();PORTB=PINB|(1<<E); //E=1; // E端时序delay1();PORTC=dat; // 将dat中的显示数据写入LCD数据口delay1();PORTB=PINB&(~(1<<E)); //E=0;delay1();// RW=1;delay(255);}void gong(void){lcd_w_cmd(0x40);lcd_w_dat(0x1f);lcd_w_cmd(0x41);lcd_w_dat(0x1f);lcd_w_cmd(0x42);lcd_w_dat(0x04);lcd_w_cmd(0x43);lcd_w_dat(0x04);lcd_w_cmd(0x44);lcd_w_dat(0x04);lcd_w_cmd(0x45);lcd_w_dat(0x1f);lcd_w_cmd(0x46);lcd_w_dat(0x1f);lcd_w_cmd(0x47);lcd_w_dat(0x00);}。

51单片机LCD1602液晶显示程序

51单片机LCD1602液晶显示程序

LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/******************************************************************************
*
*函数名 * 函数功能
: 初始化 LCD 屏 :无 :无
*******************************************************************************
/
#ifndef
LCD1602_4PINS
void LcdInit()
//LCD 初始化子程序
{ LcdWriteCom(0x38); //开显示
//以下程序都是在 VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是 STC89C52RC,但是在所有的 51 52 单片机上都是通用的。51 只是一个学习的基础 平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111 代表第一个程序。//2222222222222222222222222 代表第二个程序, 以此类推
for(a=1;a>0;a--); } }
//误差 0us
}
/******************************************************************************
*
*函数名 * 函数功能
: LcdWriteCom : 向 LCD 写入一个字节的命令
LCD1602_E = 0;

LCD课程设计---128X64液晶显示程序设计

LCD课程设计---128X64液晶显示程序设计

《CPLD/FPGA 》课程设计报告题目:128X64液晶显示程序设计院(系):信息科学与工程学院专业班级:通信1001班学生姓名:訚鹏学号:20101181021同组学生:秦佩指导教师:吴莉20 13 年 10 月 14 日至20 13 年 10 月 25 日华中科技大学武昌分校制128X64液晶显示程序设计课程设计任务书目录摘要 (3)1.课程设计的目的 (4)2.课程设计题目和要求 (4)3.课程设计报告内容 (4)3.1课程设计原理 (4)3.2课程设计相关图 (5)3.3课程设计程序 (6)3.4课程设计的结果 (14)3.5课程设计的波形仿真 (15)4.课程设计所遇到的问题及解决方案 (15)5.课程设计总结 (17)摘要在硬件电子电路设计领域中,电子设计自动化(EDA)工具已成为主要的设计手段,而VHDL语言是EDA的关键技术之一,它采用自顶向下的设计方法,即从系统总体出发,自上至下地将设计任务分为不同的功能模块,最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。

本课设主要是基于FPGA的128X64的液晶显示控制器。

控制部分采用VHDL语言编写,主体程序采用状态机作为主要控制方式。

关键字:VHDL,状态机,128641 课程设计的目的通过对液晶屏的安装调试,需学习掌握:(1)液晶屏显示文字的整体设计流程。

(2)Quartus2软件的调试方法及相关工具的使用。

(3)液晶屏LCD12864的使用方法。

(4)各种常见元器件的选择及使用。

2 课程设计题目描述和要求题目描述:频率计的设计制作要求:用VHDL编程控制LCD12864显示的频率计。

(1)用LCD12864显示“频率及姓名”等内容。

(2)显示过程:实验板通电开机后,下载运行之后,LCD显示器显示“频率及姓名”,本组成员等内容。

(3)熟悉单片机系统的工作原理及调测方法。

软硬件安装调测完成后根据系统的工作原理、过程、测试数据及遇到的问题与处理情况、体会等完成课设报告。

1.44寸tftlcd驱动程序详解

1.44寸tftlcd驱动程序详解

1.44寸tftlcd驱动程序详解1.44寸TFT LCD(TFT液晶显示屏)是一种小型彩色液晶屏,通常应用于嵌入式系统和消费电子产品中。

为了使其正常显示图像,需要编写相应的驱动程序。

下面是对1.44寸TFT LCD驱动程序的详细解析:1. 建立通信:首先,需要确定与TFT LCD之间的通信接口,例如SPI (串行外设接口),I2C(串行总线接口)或并行接口等。

根据选定的接口,配置相应的引脚和通信参数,以确保正确的数据传输。

2. 初始化LCD控制器:接下来,需要初始化LCD控制器。

这包括设置控制器的工作模式、像素格式、扫描方向等。

此外,还需设置LCD的分辨率和颜色模式,以确定显示的像素数和色彩深度。

3. 像素数据传输:在驱动程序中,需要实现像素数据的传输和写入。

根据TFT LCD的工作原理,像素数据一般以行为单位进行传输。

通过逐行扫描,将图像数据按照指定的颜色格式和像素排列方式写入LCD的显示缓冲区。

4. 刷新显示:驱动程序需要定期刷新LCD的显示,以确保图像持续显示并且没有残留。

可以使用定时器中断或其他方式来触发刷新操作。

在刷新过程中,将显示缓冲区的数据传输到实际的LCD面板上,使其显示出正确的图像。

5. 特殊功能:根据不同的TFT LCD型号和应用需求,可能还需要实现一些特殊功能。

例如,调节LCD的亮度、对比度和背光等。

这些功能可以通过操作LCD控制器的寄存器来实现。

6. 错误处理:在驱动程序中,还需要添加适当的错误处理机制。

这可以包括检测和处理通信错误、数据传输错误以及其他异常情况。

通过合理的错误处理,可以提高驱动程序的健壮性和可靠性。

综上所述,编写1.44寸TFT LCD驱动程序需要建立通信接口、初始化LCD控制器、像素数据传输、刷新显示、实现特殊功能以及添加错误处理。

这样的驱动程序可以确保TFT LCD正常工作并显示出准确的图像。

驱动程序的编写需要根据具体的硬件规格和驱动芯片的特性进行调整和优化,以实现最佳的性能和用户体验。

LCD程序流程图

LCD程序流程图
开始
初始化
LCD显示数据
延时
定时 5s 检测一次(定 时期间单片机读预制 案件)
光照强度监测并传送 数据回单片机
判断光照强度是否 超出阈值
Y
报警装置启动(即蜂 鸣器发声)
N
复位
开始
初始化模块 LCD_Init()
用于设置坐标 LCD_SetCursor()
函数通过80并口 向LCD模块写入8 位的寄存器命令 LCD_WR_REG() 用来读取某个寄存 器的值 LCD_READREG()
画点函数 POINT_COLOR()
显示字符 LCD_ShowString()
用来读取GRAM的值 LCD_ReadRAM()
结束
开始
是ቤተ መጻሕፍቲ ባይዱ
数据在合理范围内? 系统初始化

执行报警子程序
每隔3秒采集一 次GY-30数据
在SD卡中储存 光照数据

延时等待
数据采集完毕?

上传至上位机并在 上位机中显示数据
LCD上显示光照数据 结束

LCD12864显示程序

LCD12864显示程序

L C D12864显示程序(总3页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除本例程为通过用AT89C52芯片操作LCD12864显示的程序,使用的晶振为12M。

/**********************************************************程序说明:LCD12864显示主程序程序调试员:莫剑辉调试时间:2010-6-7**********************************************************/#include<reg52.h>#include"12864.c"void main(){Ini_Lcd(); //液晶初始化子程序Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序while(1);}这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。

/**********************************************************程序说明:LCD12864显示头文件程序调试员:莫剑辉调试时间:2010-6-7**********************************************************///#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define DATA P2 //数据输出端0~7sbit RS=P0^0; //LCD12864 RS端sbit RW=P0^1; //LCD12864 RW端sbit E =P0^2; //LCD12864 E 端sbit PSB =P0^3;/*********************************************延时子程序*********************************************/void Delay_1ms(uint x){uint j,i;for(j=0;j<x;j++){for(i=0;i<120;i++); //延时X乘以120}}/*********************************************LCD12864液晶测忙子程序(读状态)*********************************************/void Busy(){uchar busy;do{E = 0; //0为关闭使能端,1为打开使能端RS = 0; //1为指令,0为数据RW = 1; //1为读,0为写Delay_1ms(20); //延时20乘以120时间E = 1; //0为关闭使能端,1为打开使能端busy=P1; //读取P2状态Delay_1ms(20); //延时20乘以120时间E = 0; //0为关闭使能端,1为打开使能端}while(busy&0x80); //判断BUSY位是否工作:1为内部在工作,0为正常状态}/*********************************************LCD12864液晶数据写入子程序*********************************************/void Write_Data(uchar k){Busy(); //测忙E =1; //0为关闭使能端,1为打开使能端RS=1; //1为指令,0为数据RW=0; //1为读,0为写DATA=k; //输入数据K到DATADelay_1ms(20); //延时20乘以120时间E =0; //0为关闭使能端,1为打开使能端Delay_1ms(20); //延时20乘以120时间}/*********************************************LCD12864液晶命令写入子程序*********************************************/void Write_Cmd(uchar cmd){Busy(); //测忙E=1; //0为关闭使能端,1为打开使能端RS=0; //1为指令,0为数据RW=0; //1为读,0为写DATA=cmd; //输入命令cmd到DATADelay_1ms(20); //延时20乘以120时间E=0; //0为关闭使能端,1为打开使能端Delay_1ms(20); //延时20乘以120时间}/*********************************************LCD12864液晶数据显示子程序*********************************************/void Disp(uchar y,uchar x,uchar i,uchar *z){uchar Address;if(y==1){Address=0x80+x;} //Y判断第几行,X判断第几列,0x80为液晶行初始地址if(y==2){Address=0x90+x;}if(y==3){Address=0x88+x;}if(y==4){Address=0x98+x;}Write_Cmd(Address); //写入地址命令到LCD12864while(i) //写入显示数据的大小{Write_Data(*(z++)); //写入显示数据到LCD12864i--;}}/*********************************************LCD12864液晶初始化子程序*********************************************/void Ini_Lcd(void){PSB=1;Delay_1ms(20);Write_Cmd(0x30); //基本指令集Delay_1ms(20);Write_Cmd(0x02); // 地址归位Delay_1ms(20);Write_Cmd(0x0c); //整体显示打开,游标关闭Delay_1ms(20);Write_Cmd(0x06); //游标右移Delay_1ms(20);Write_Cmd(0x80); //设定显示的起始地址Delay_1ms(20);Write_Cmd(0x01); //清除显示}。

LCD与单片机的连接电路图和LCD显示程序

LCD与单片机的连接电路图和LCD显示程序

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与单片机连接的引脚并不是固定的,如有不同只需要在程序里改一下引脚即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit E =P0^2; //LCD12864 E端
sbit PSB =P0^3;
/*********************************************
延时子程序
*********************************************/
void Delay_1ms(uint x)
//#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DATA P2 //数据输出端0~7
sbit RS=P0^0; //LCD12864 RS端
sbit RW=P0^1; //LCD12864 RW端
Write_Cmd(0x06); //游标右移
Delay_1ms(20);
Write_Cmd(0x80); //设定显示的起始地址
Delay_1ms(20);
Write_Cmd(0x01); //清除显示
}
/**********************************************************
程序说明:LCD12864显示头文件
程序调试员:莫剑辉
调试时间:2010-6-7
**********************************************************/
本例程为通过用AT89C52芯片操作LCD12864显示的序,使用的晶振为12M。
/**********************************************************
程序说明:LCD12864显示主程序
程序调试员:莫剑辉
调试时间:2010-6-7
**********************************************************/
while(i)//写入显示数据的大小
{
Write_Data(*(z++));//写入显示数据到LCD12864
i--;
}
}
/*********************************************
LCD12864液晶初始化子程序
*********************************************/
Delay_1ms(20);//延时20乘以120时间
}
/*********************************************
LCD12864液晶命令写入子程序
*********************************************/
void Write_Cmd(uchar cmd)
{
uchar Address;
if(y==1){Address=0x80+x;}//Y判断第几行,X判断第几列,0x80为液晶行初始地址
if(y==2){Address=0x90+x;}
if(y==3){Address=0x88+x;}
if(y==4){Address=0x98+x;}
Write_Cmd(Address);//写入地址命令到LCD12864
void Busy()
{
uchar busy;
do
{
E = 0;//0为关闭使能端,1为打开使能端
RS = 0;//1为指令,0为数据
RW = 1;//1为读,0为写
Delay_1ms(20);//延时20乘以120时间
E = 1;//0为关闭使能端,1为打开使能端
busy=P1;//读取P2状态
Delay_1ms(20);//延时20乘以120时间
void Write_Data(uchar k)
{
Busy();//测忙
E =1;//0为关闭使能端,1为打开使能端
RS=1;//1为指令,0为数据
RW=0;//1为读,0为写
DATA=k;//输入数据K到DATA
Delay_1ms(20);//延时20乘以120时间
E =0;//0为关闭使能端,1为打开使能端
{
Busy();//测忙
E=1;//0为关闭使能端,1为打开使能端
RS=0;//1为指令,0为数据
RW=0;//1为读,0为写
DATA=cmd;//输入命令cmd到DATA
Delay_1ms(20);//延时20乘以120时间
E=0;//0为关闭使能端,1为打开使能端
Delay_1ms(20);//延时20乘以120时间
void Ini_Lcd(void)
{
PSB=1;
Delay_1ms(20);
Write_Cmd(0x30); //基本指令集
Delay_1ms(20);
Write_Cmd(0x02); //地址归位
Delay_1ms(20);
Write_Cmd(0x0c); //整体显示打开,游标关闭
Delay_1ms(20);
E = 0;//0为关闭使能端,1为打开使能端
}
while(busy&0x80); //判断BUSY位是否工作:1为内部在工作,0为正常状态
}
/*********************************************
LCD12864液晶数据写入子程序
*********************************************/
}
/*********************************************
LCD12864液晶数据显示子程序
*********************************************/
void Disp(uchar y,uchar x,uchar i,uchar *z)
#include<reg52.h>
#include"12864.c"
void main()
{
Ini_Lcd();//液晶初始化子程序
Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序
while(1);
}
这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。
{
uint j,i;
for(j=0;j<x;j++)
{
for(i=0;i<120;i++); //延时X乘以120
}
}
/*********************************************
LCD12864液晶测忙子程序(读状态)
*********************************************/
相关文档
最新文档