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;}。

  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液晶测忙子程序(读状态)
*********************************************/
相关文档
最新文档