LCD1602驱动及显示计数值程序

合集下载

LCD1602驱动程序

LCD1602驱动程序

1602是课程设计和毕业设计经常用到的显示器,还在愁怎么对1602操作吗?那么看完1602驱动程序,一切变得那么简单。

LCD1602驱动程序://===========LCD1602.H===============#ifndef _LCD1602_H__#define _LCD1602_H__#include<intrins.h>#include"delay.h"//lcd1602管脚定义#define LCD_Data P0 //第7~14脚:D0~D7为8位双向数据线#define Busy 0x80 //用于检测LCM状态字中的Busy标识sbit LCD_RS=P2^0; //寄存器选择位,将LCD_RS位定义为P2.0引脚sbit LCD_RW=P2^1; //读写选择位,将LCD_RW位定义为P2.1引脚sbit LCD_E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚//函数定义声明bit BusyTest(void);//判断液晶模块的忙碌状态void WriteInstruction (unsigned char );//将模式设置指令或显示地址写入液晶模块//void WriteAddress(unsigned char ); //指定字符显示的实际地址void WriteData(unsigned char );//将数据(字符的标准ASCII码)写入液晶模块void CursorFlash(unsigned char,unsigned char); //光标在指定坐标闪烁void InitLcd(void);//初始化LCD1602/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。

LCD1602中文资料程序和使用说明

LCD1602中文资料程序和使用说明

LCD1602中文资料程序和使用说明一、硬件连接和初始化步骤:1.将LCD1602的16个引脚连接到MCU(单片机)的相应引脚上。

其中,VCC和GND分别接到电源正负极,VO接到可调电位器的中间引脚(用于调节背光亮度),RS、RW和E分别接到MCU的IO口上,D0-D7分别接到MCU的8个IO口上。

2.初始化LCD1602的操作包括设置显示模式、显示光标、输入模式等,具体步骤如下:a.将8位数据接口设置为并行输入模式,即设置D0-D3为输入模式。

b.设置显示模式为2行显示,5x8点阵字符,显示器不移动。

c.将显示光标设置为闪烁显示。

d.设置数据输入方式为向右移动,同时字符显示不移动。

e.清除显示内容,将光标位置设置为第一行第一列。

f.打开显示器和光标显示功能。

二、常用函数和操作方法:1. void lcd1602_init( 初始化LCD1602,包括上述硬件连接和初始化步骤。

2. void lcd1602_clear( 清除显示内容。

3. void lcd1602_setCursor(int row, int column) 设置光标位置,row表示行数(从0开始),column表示列数(从0开始)。

4. void lcd1602_print(String str) 在当前光标位置打印字符串str。

5. void lcd1602_shiftDisplayLeft( 将显示内容向左移动一位。

6. void lcd1602_shiftDisplayRight( 将显示内容向右移动一位。

7. void lcd1602_scrollDisplayLeft( 将整个显示内容向左滚动一格。

8. void lcd1602_scrollDisplayRight( 将整个显示内容向右滚动一格。

9. void lcd1602_noCursor( 关闭光标显示。

10. void lcd1602_cursor( 打开光标显示。

LCD1602显示屏的驱动设置及例程

LCD1602显示屏的驱动设置及例程

LCD1602显示屏的驱动设置及例程一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。

我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。

如图1所示:图1再来一张它的背面的,如图2所示:引脚号符号引脚说明引脚号符号引脚说明1VSS电源地9D2数据端口2VDD电源正极10D3数据端口3VO偏压信号11D4数据端口4RS命令/数据12D5数据端口5RW读/写13D6数据端口6E使能14D7数据端口图2它的16条引脚定义如下:对这个表的说明:1. VSS接电源地。

2. VDD接+5V。

3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。

或同样阻值的RM065/RM063蓝白可调电阻。

见图3。

图34. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当RS为高电平时,选择数据。

5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据。

如果不需要进行读取操作,可以直接将其接VSS。

6. E,执行命令的使能引脚,接单片机的一个I/O。

7. D0—D7,并行数据输入/输出引脚,可接单片机的P0—P3任意的8个I/O口。

如果接P0口,P0口应该接—10K的上拉电阻。

如果是4线并行驱动,只须接4个I/O口。

8. A背光正极,可接一个10—47欧的限流电阻到VDD。

7D0数据端口15A背光正极8D1数据端口16K背光负极9. K背光负极,接VSS。

见图4所示。

图4二.基本操作LCD1602的基本操作分为四种:1. 读状态:输入RS=0,RW=1,E=高脉冲。

输出:D0—D7为状态字。

2. 读数据:输入RS=1,RW=1,E=高脉冲。

输出:D0—D7为数据。

3. 写命令:输入RS=0,RW=0,E=高脉冲。

LCD1602显示~~C程序

LCD1602显示~~C程序

1、关于1602液晶的电气参数一般市场上的1602液晶使用的驱动器为HD44780U或HD44780S,市场上大部分液晶用的是后者。

HD44780S的供电电压为5V±10%,而HD44780U 的供电电压为2.7V~5.5V。

也就是说,绝大部分1602液晶只能工作在5V 电压下,其供电电压必须为5V。

经过试验发现,1602液晶的供电虽然必须为5V,但其控制总线和数据总线可以用3.3V电平(因为对于TTL电平,一般大于2.5V以上都算高电平,不过最可靠的是大于3.6V),只不过在3.3V 电平下,数据的通信速度会大大降低,这一点需要在写驱动时注意。

需要时,可以将MCU的IO配置为漏极开路方式,用上拉电阻拉到5V电平;实在不能配置为漏极开路方式时,请查阅MCU的电气参数,在允许的条件下,直接使用电阻弱上拉也可以。

2、硬件连接1602液晶可以使用4位或8位通信模式,通信可以是双向的或单向的,双向通信主要是为了读取LCD忙标志和AC地址寄存器和DDRAM和CGRAM中的值,一般用处不大,因为1602不支持点阵绘图功能。

在连接时,注意4位通信方式下,LCD只使用DB7~DB4,一般情况下会使用MCU 某端口的高4位或低4位与之连接,注意写驱动时在必要的情况下对端口的其它几位要保护,防止破坏其数据;当然如果没有使用其它4位时则不必要保护(奇怪,不使用其它4位干嘛用4位通信方式嘛?)。

还要注意的是,如果需要双向通信,则必须选择既能做输入又能做输出的IO口,特别是对于RS、RW和E这三条控制线,若能选择支持位寻址的IO口则可以方便编程。

3、底层驱动问题通用1602液晶的时序如图:(1)、写时序(2)、读时序总的说来,按照这个时序图来编写驱动程序是不会出什么问题的,只是要深刻理解时序图中各参数的涵义。

编程中要特别关注E这根控制线。

写操作的时序应该是:①、RS=0(写指令寄存器)或RS=1(写数据寄存器);②、RW=0(写操作);③、将数据写到数据线上;④、E=1;⑤、E=0 。

LCD1602显示屏的驱动设置及例程

LCD1602显示屏的驱动设置及例程

LCD1602显示屏的驱动设置及例程一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。

我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。

如图1所示:图1再来一张它的背面的,如图2所示:引脚号符号引脚说明引脚号符号引脚说明1 VSS 电源地9 D2 数据端口2 VDD 电源正极10 D3 数据端口3 VO 偏压信号11 D4 数据端口4 RS 命令/数据12 D5 数据端口5 RW 读/写13 D6 数据端口6 E 使能14 D7 数据端口7 D0 数据端口15 A 背光正极图2它的16条引脚定义如下:对这个表的说明:1. VSS接电源地。

2. VDD接+5V。

3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。

或同样阻值的RM065/RM063蓝白可调电阻。

见图3。

图34. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当RS为高电平时,选择数据。

5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据。

如果不需要进行读取操作,可以直接将其接VSS。

6. E,执行命令的使能引脚,接单片机的一个I/O。

7. D0—D7,并行数据输入/输出引脚,可接单片机的P0—P3任意的8个I/O口。

如果接P0口,P0口应该接4.7K—10K的上拉电阻。

如果是4线并行驱动,只须接4个I/O 口。

8. A背光正极,可接一个10—47欧的限流电阻到VDD。

9. K背光负极,接VSS。

见图4所示。

8 D1 数据端口16 K 背光负极图4二.基本操作LCD1602的基本操作分为四种:1. 读状态:输入RS=0,RW=1,E=高脉冲。

输出:D0—D7为状态字。

2. 读数据:输入RS=1,RW=1,E=高脉冲。

单片机LCD1602显示字符和数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序1,单片机和LCD1602的连线,和程序结果显示如下图:2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。

程序如下:RS EQU P2.4RW EQU P2.5E EQU P2.6ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HMOV 40H,#01HMOV 41H,#02HMOV 42H,#03HMOV 43H,#04HMOV 44H,#05HMOV 45H,#06HMOV 46H,#07HACALL DD1 ;DD1是LCD初始化MOV DPTR,#TABLE1ACALL DD2;DD2是LCD第一行显示TABLE1ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据SJMP $DD1: MOV p0,#01H ;清屏CALL ENABLEMOV p0,#38H ;显示功能CALL ENABLEMOV p0,#0FH ;显示开关控制CALL ENABLEMOV p0,#06H ;显示光标右移加1CALL ENABLERETDD2: MOV p0,#80H;第一行的开始位置cALL ENABLECALL WRITE1;到TABLE1取码?RETENABLE: CLR RS ;送命令CLR RWCLR ECALL DELAYSETB ERETWRITE1: MOV R1,#00H ;显示table中的值A1: MOV A,R1;到table取码MOVC A,@A+DPTRcall wRITE2 ;显示到lcdINC R1CJNE A,#00H,A1 ;是否到00hRETWRITE2:MOV p0,A ;显示SETB RSCLR RWCLR ECALL DELAYSETB ERET(动态显示频率、幅度核心程序设计思想:可以利用如下程序)MOV40H,#01HMOV41H,#02HMOV42H,#03H)MOV R1,#40H;显示table中的值MOV A,R1;到table取码MOVC A,@A+DPTRMOV P0,AINC R1LJMP LOOPDELAY: PUSH ACCMOV A,R4MOV R4,#05D1: MOV R5,#0FFHDJNZ R5,$DJNZ R4,D1MOV R4,APOP ACCRETPPP: MOV p0,#0C0H;第二行的位置CALL ENABLEMOV DPTR,#TAB;显示CALL WRITE3;到TABLE2 取码RETWRITE3: MOV R1,#40H ;显示table中的值MOV R7,#07HA2: MOV A,@R1;到table取码MOVC A,@A+DPTRcall wRITE2 ;显示到lcdINC R1DJNZ R7,A2 ;是否到00hRETtable1: db"XIAORENGUANG ",00H TAB: DB 30H, 31H, 32H, 33HDB 34H, 35H, 36H, 37HDB 38H, 39HEND。

LCD1602原理与显示程序

LCD1602原理与显示程序

LCD1602原理与显示程序LCD1602的原理是基于液晶显示技术。

液晶是一种特殊的物质,具有双折射性质,即能将入射的光线分成两束,通过改变液晶分子的排列方式,可以改变其双折射的性质,从而使得光线透过液晶时会发生偏转。

LCD1602利用这一原理,在液晶显示面板上设置了16列和2行的像素点阵,通过控制每个像素点的液晶分子的排列方式,来实现字符的显示。

初始化是指在使用LCD1602之前,需要对其进行一系列的初始化操作,以确保其正常工作。

具体的初始化步骤如下:1.设置通信协议:LCD1602可以通过并行接口和串行接口进行通信,根据具体的接口方式,选择相应的通信协议。

2.设置工作模式:LCD1602有两种工作模式,分别是4位模式和8位模式。

选择适合的工作模式,并设置相应的控制寄存器。

3.设置显示模式:LCD1602可以显示不同的字符集,如英文字符、数字、特殊符号等。

选择合适的字符集,并设置显示模式。

4.清除显示:设置清除显示寄存器,将显示区域清空。

5.光标设置:设置光标位置和显示方式,如光标是否闪烁、光标位置等。

完成初始化后,就可以将要显示的数据写入LCD1602数据写入是指将要显示的字符或数字写入到LCD1602的显示区域。

具体的数据写入步骤如下:1.设置光标位置:根据需要显示的字符位置,设置光标的位置。

2.数据写入:通过通信接口,将要显示的数据写入到LCD1602的数据寄存器。

3.延时:由于LCD1602的刷新速度较慢,需要等待一定的时间,使得数据能够稳定显示在液晶屏上。

4.更新光标位置:根据数据的长度和显示方式,更新光标的位置。

通过以上的步骤,就可以实现LCD1602的显示功能。

总结起来,LCD1602的原理是基于液晶显示技术,通过控制液晶分子排列方式来实现字符的显示。

其显示程序包括初始化和数据写入两个方面的内容,通过设置通信协议、工作模式、显示模式等参数,并将要显示的数据写入到LCD1602的显示区域,来实现字符的显示。

LCD1602显示程序main

LCD1602显示程序main

/**************************************************** LCD1602显示** 描述:4线数据宽度,操作Lcd1602* 在LCD1602屏幕上第一行显示Hello!LCD1602* 第二行显示123456789abcdef** 时间:2012年3月15日调试成功(出现问题主要是因为LCD初始化)** 硬件电路:MSP430F2132* 硬件连接:** MSP430与LCD连接信息* LCD1602,4位接口,即使用D4-D7数据口,D0-D3不接入MCU* PIN1 --> 地* PIN2 --> VCC(一定要接+5V)* PIN3 -->仿真时悬空,实际电路2K电阻-->地(一定要接好,否则没有任何显示) * PIN4 --> RS --> P2.2* PIN5 --> R/W --> GND* PIN6 --> EN --> P2.1* PIN7 --> D0不接* PIN8 --> D1不接* PIN9 --> D2不接* PIN10 --> D3不接* PIN11 --> D4 --> P1.4* PIN12 --> D5 --> P1.5* PIN13 --> D6 --> P1.6* PIN14 --> D7 --> P1.7* PIN15 --> VCC(一定要接+5V,如果不要背光可以不接* PIN16 --> 地* 调试器:MSP430FET全系列JTAG仿真器* 调试软件:CCS5.1.1 编译**************************************************/#include "msp430f2132.h"#include <intrinsics.h>//定义////////////////////////////////////////////////////////////////////#define LCD_EN_PORT P2OUT//以下2个要设为同一个口#define LCD_EN_DDR P2DIR#define LCD_RS_PORT P2OUT//以下2个要设为同一个口#define LCD_RS_DDR P2DIR#define LCD_DATA_PORT P1OUT //以下3个要设为同一个口#define LCD_DATA_DDR P1DIR //一定要用高4位#define LCD_RS BIT2#define LCD_EN BIT1//#define LCD_DATA BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7 //8位数据线连接模式时使用#define LCD_DATA BIT4|BIT5|BIT6|BIT7 //4位数据线连接模式时使用////预定义函数//////////////////////////////////////////////////////////////////void LCD_init(void);void LCD_en_write(void);void LCD_write_command(unsigned char command);void LCD_write_data(unsigned char data);void LCD_set_xy (unsigned char x, unsigned char y);void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data);void delay_1ms(void);void delay_nus(unsigned int n);void delay_nms(unsigned int n);void main(){WDTCTL = WDTPW + WDTHOLD; // Stop watchdogLCD_init();delay_1ms();LCD_write_string(0,0,"Hello!LCD1602");delay_1ms();LCD_write_string(0,1,"123456789abcdef");}//LCD液晶操作函数/////////////////////////////////////////////////////////////////LCD1602液晶初始化void LCD_init(void){delay_nms(15);LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出LCD_EN_DDR|=LCD_EN; //设置EN方向为输出LCD_RS_DDR|=LCD_RS; //设置RS方向为输出delay_1ms(); //这4行不要改,否则仿真没显示// LCD_write_command(0x38); //8位数据接口时,使用这行,否则仿真没显示LCD_write_command(0x33); //4位数据接口时,使用这行,否则仿真没显示delay_1ms(); //// LCD_write_command(0x38); //8位数据接口时,使用这行,否则仿真没显示LCD_write_command(0x32); //4位数据接口时,使用这行,否则仿真没显示delay_1ms();// LCD_write_command(0x38); //8位数据接口时,使用这行,否则仿真没显示delay_1ms();// LCD_write_command(0x38); //8位数据接口LCD_write_command(0x2c); //4位数据接口delay_1ms();LCD_write_command(0x0c); //显示开delay_1ms();LCD_write_command(0x01); //清屏delay_1ms();LCD_write_command(0x06);}//液晶使能void LCD_en_write(void){LCD_EN_PORT|=LCD_EN;delay_nus(10);LCD_EN_PORT&=~LCD_EN;}//写指令void LCD_write_command(unsigned char command) {delay_nus(16);LCD_RS_PORT&=~LCD_RS; //RS=0LCD_DATA_PORT&=0X0f; //清高四位LCD_DATA_PORT|=command&0xf0; //写高四位//LCD_DATA_PORT = command; //写8位delay_nus(16);LCD_en_write();command=command<<4; //低四位移到高四位LCD_DATA_PORT&=0x0f; //清高四位LCD_DATA_PORT|=command&0xf0; //写低四位LCD_en_write();}//写数据void LCD_write_data(unsigned char data){delay_nus(16);LCD_RS_PORT|=LCD_RS; //RS=1LCD_DATA_PORT&=0X0f; //清高四位LCD_DATA_PORT|=data&0xf0; //写高四位//LCD_DATA_PORT = data; //写8位LCD_en_write();data=data<<4; //低四位移到高四位LCD_DATA_PORT&=0X0f; //清高四位LCD_DATA_PORT|=data&0xf0; //写低四位LCD_en_write();}//写地址函数void LCD_set_xy( unsigned char x, unsigned char y ){unsigned char address;if (y == 0) address = 0x80 + x;else address = 0xc0 + x;LCD_write_command( address);}//LCD在任意位置写字符串//列x=0~15,行y=0,1void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) {LCD_set_xy( X, Y ); //写地址while (*s) // 写显示字符{LCD_write_data( *s );s ++;}}//LCD在任意位置写字符//列x=0~15,行y=0,1void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) {LCD_set_xy( X, Y ); //写地址LCD_write_data( data);}//延时函数////////////////////////////////////////////////////////////////////////1us延时函数void delay_1us(void){asm("nop");}//N us延时函数void delay_nus(unsigned int n) {unsigned int i;for (i=0;i<n;i++)delay_1us();}//1ms延时函数void delay_1ms(void){unsigned int i;for (i=0;i<1140;i++);}//N ms延时函数void delay_nms(unsigned int n) {unsigned int i=0;for (i=0;i<n;i++)delay_1ms();}。

LCD1602显示模块控制指令

LCD1602显示模块控制指令
(3)指令3:读/写方式下的光标和显示模式设置命令。
I/D:
表示地址计数器的变化情况,即光标的移动方向。
I/D=1:计数器地址自动加1,光标右移一字符位置。
I/D=0:计数器地址自动减1,光标左移一字符位置。
S:
显示屏上画面向左或向右全部移动一个字符位。
S=1,I/D=1:显示画面左移;S=1,I/D=0:显示画面右移
序号
11指令
清显示
光标返回
置输入模式
显示开/关控制
光标或字符移动
置功能
置字符存储器地址
置数据存储器地址
读忙标志或地址
写数到CGRAM或DDRAM
RS 01R/W 10
1D1
BF D1DD400001DL D30001
S/C
N D2001D R/L F D101I/D C **D01*S B **字符发生器存储地址(AGG)显示数据存储器地址(ADD)计数器地址(AC)
(10)指令10:写数据。
(11)指令11:读数据。
要写的数据内容
读出的数据内容
从CGRAM或DDRAM读数1:增量/减量
S=1:全显示屏移动:显示屏移动/光标移动:左移/右移
:8位/4位
:2行/1行
:5*10点阵/5*7点阵:内部操作正在进行/允许指令操作
*:
无关项
(1)指令1:清显示,光标复位到地址00H位置。
(2)指令2:光标复位,光标返回到地址00H.
(6)指令6:功能设置命令。
DL=1时:
内部数据总线为4位宽度DB7~DB4;DL=0时,内部总线为8位宽度。
N=0时,单行显示;N=1时,双行显示。F=0时,显示字形5*7点阵;F=1时,5*10。

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驱动及显示计数值程序
1.6.2 显示开/关及光标设置
1.6.3 数据指针设置 1.6.4 其它设置
5
1.7 外形
嵌入式应用软件园,版权所有,请勿转载/销售。
6
嵌入式应用软件园,版权所有,请勿转载/销售。
第 2 章 程序功能
程序中包含 LCM 用到的所有函数:初始化、写指令、写数据、判忙碌、清屏 幕。
单片机外接 2x2 (P3.7,P3.6 与 P3.0,P3.1)矩阵键盘,利用定时器 T0 的定时中断, 查询矩阵键盘。矩阵键盘被命名为 A、B、C、D。对键盘被按下的次数进行计数, 计数值会在 LCM 上显示。
LCM 与单片机的连接
7
嵌入式应用软件园,版权所有,请勿转载/销售。
第 3 章 程序代码
我们的辛勤付出,需要您的肯定,请访问: 嵌入式应用软件园。
;******************************************************************************
9
嵌入式应用软件园,版权所有,请勿转载/销售。
LCALL WRITE_DATA MOV A,#10001010B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#3AH LCALL WRITE_DATA ;显示 C: MOV A,#11000000B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#43H LCALL WRITE_DATA MOV A,#11000001B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#3AH LCALL WRITE_DATA ;显示 D: MOV A,#11001001B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#44H LCALL WRITE_DATA MOV A,#11001010B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#3AH LCALL WRITE_DATA ;计数的循环,一直执行,永不跳出 START: MOV LCM_P,#10000010B ;数据指针(显示地址设置) MOV R0,#A4 LCALL DISP MOV LCM_P,#10001011B ;数据指针(显示地址设置) MOV R0,#B4 LCALL DISP MOV LCM_P,#11000010B ;数据指针(显示地址设置) MOV R0,#C4 LCALL DISP MOV LCM_P,#11001011B ;数据指针(显示地址设置) MOV R0,#D4 LCALL DISP LJMP START

lcd1602 C语言驱动

lcd1602 C语言驱动

/*LCD1602驱动程序*//*程序用法:1、按行显示:display(行号,数据指针)2、定位显示:displayUser(行号,列号,字符/字符串)3、动态显示:Ddisplay(行号、列号、字符/字符串)4、闪烁显示:Fldisplay(行号、列号、字符/字符串)*//*声明代码(放工程中需要包含的自定义头文件中):void delay(unsigned char n);void init();void display(unsigned char a,unsigned char table[]);void write_date(uchar);void write_command(uchar);void displayUser(unsigned char hang,unsigned lie,unsigned char table[]); void Ddisplay(unsigned char hang,unsigned lie,unsigned char table[]); void Fldisplay(unsigned char hang,unsigned lie,unsigned char table[]); */#include <reg51.h>#define uchar unsigned charsbit rs=P2^4;sbit rw=P2^5;sbit e=P2^6;uchar busyc,line;void delay(uchar n){uchar x,y;for(x=n;x>0;x--)for(y=110;y>0;y--);}void busy(uchar busyc){rs=0;rw=1;e=1;delay(1);busyc=P0;e=0;}void write_command(uchar command) {busy(busyc);while(busyc); //判断LCD 是否冗忙rs=0;rw=0;e=1;P0=command;delay(10);e=0;}void write_date(uchar date){busy(busyc);while(busyc); //判断LCD 是否冗忙rs=1;rw=0;e=1;P0=date;delay(10);e=0;}void init(){e=0;write_command(0x38);delay(15);write_command(0x0c);write_command(0x06);write_command(0x01);}void display(unsigned int a,unsigned char *table){uchar i;if(a==1){write_command(0x80); //设置显示位置(第一行开头)for(i=0;i<16;i++)write_date(*(table+i)); //显示字符}if(a==2){write_command(0xc0); //设置显示位置(第二行开头)for(i=0;i<16;i++)write_date(*(table+i)); //显示字符}}void displayUser(unsigned char hang,unsigned lie,unsigned char table[])和列号//定位显示,定位行号{unsigned char add,i;if(hang==1){add=0x80+lie-1;}if(hang==2){add=0xc0+lie-1;}write_command(add);for(i=0;i<(add%15);i++)write_date(table[i]); //显示字符}void Ddisplay(unsigned char hang,unsigned lie,unsigned char table[]) //动态、定位显示,定位行号和列号{unsigned char add,i,m;if(hang==1){add=0x80+lie-1;}if(hang==2){add=0xc0+lie-1;}write_command(add);for(i=0;i<(add%15);i++){write_date(table[i]); //显示字符for(m=0;m<4;m++)delay(250);}}void Fldisplay(unsigned char hang,unsigned lie,unsigned char table[])//闪烁、定位显示,定位行号和列号{unsigned char add,i;if(hang==1){add=0x80+lie-1;}if(hang==2){add=0xc0+lie-1;}write_command(add);while(1){for(i=0;i<(add%15);i++){write_date(table[i]); //显示字符}delay(250);delay(250);delay(250);write_command(0x01); delay(250);delay(250);delay(250);}}。

LCD1602原理及显示程序

LCD1602原理及显示程序

LCD1602原理及显示程序LCD1602是一种常用的液晶显示器模块,具有16列2行的显示区域,可以用于显示各种文字和简单的图形。

它广泛应用于各种电子产品中,如计算器、电子钟表、仪器仪表等。

本文将介绍LCD1602的工作原理和显示程序设计。

LCD1602模块由液晶显示面板、驱动芯片和背光源组成。

其中驱动芯片负责向液晶面板发送控制信号和数据信号,控制液晶分子的取向和光的穿透程度,从而实现图像的显示。

背光源则提供背光,使得图像可以在暗环境下清晰可见。

液晶显示面板是LCD1602模块最关键的部分。

它由两片平行的玻璃基板构成,中间夹层有液晶层和极板。

液晶层是一种特殊的有机化合物,具有液态和固态之间的特性。

液晶分子有两种主要的排列方式,即平行排列和垂直排列,通过调节驱动芯片发送的电压信号,可以改变液晶分子的排列方式,进而控制光的透射和反射。

极板则起到滤光器的作用,可以控制光的偏振方向。

为了控制LCD1602模块进行显示,我们需要通过IO口与其连接,并向其发送控制信号和数据信号。

以下是一个基本的LCD1602显示程序的设计过程:1.初始化LCD1602模块:a.设置LCD1602的工作模式,例如行数、字体大小等。

b.设置显示模式,例如显示打开、显示关闭、光标光灭等。

2.发送指令到LCD1602模块:a.选择指令寄存器,RS引脚置低电平。

b.向数据总线发送指令数据。

c.发送使能信号,EN引脚从高到低电平进行一个脉冲,使得LCD1602芯片接收到指令。

3.发送数据到LCD1602模块:a.选择数据寄存器,RS引脚置高电平。

b.向数据总线发送需要显示的数据。

c.发送使能信号,EN引脚从高到低电平进行一个脉冲,使得LCD1602芯片接收到数据。

4.清除LCD1602模块的显示内容:a.发送清除显示指令到LCD1602模块。

5.控制LCD1602模块的光标位置:a.发送光标位置指令到LCD1602模块。

6.控制LCD1602模块的背光亮度:a.通过PWM控制背光源的亮度。

LCD1602四线驱动的方法

LCD1602四线驱动的方法

LCD1602四线驱动的方法一、硬件连接:见下图,图图中LCD1602的高四位DB7-DB4和RS、E端接到单片机的6个I/O 口,R/W 接地。

这种连接方法只能向LCD写入指令和数据,而不能从LCD中读出数据。

单片机引脚的接法可以根据要求改变。

二、驱动说明:1、当E = 0时,数据位和RS位和P4~P7位可以改变2、当E = 1时,数据位内容被写入LCD3、当RS = 0时,写入的为指令4、当RS = 1时,写入的为数据(地址)三、驱动流程:1、写入指令:1)EN = 0 (LCD使能禁止)2)短延时3)RS = 0 (准备写入指令)4)DATA = 指令的高4位(A TA代表D7、D6、D5、D4,下同)5)短延时6)EN = 1 (LCD使能允许,指令写入)7)短延时8)EN = 0 (LCD使能禁止)9)DATA = 指令的低4位10)短延时11)EN = 1 (LCD使能允许,指令写入)12)短延时13)EN = 0 (LCD使能禁止)14)短延时2、写入数据:1)EN = 0 (LCD使能禁止)2)短延时3)RS = 1 (准备写入数据)4)DATA = 数据的高4位5)短延时6)EN = 1 (LCD使能允许,数据写入)7)短延时8)EN = 0 (LCD使能禁止)9)DATA = 数据的低4位10)短延时11)EN = 1 (LCD使能允许,数据写入)12)短延时13)EN = 0 (LCD使能禁止)14)短延时四、指令的格式:。

LCD1602原理及显示程序

LCD1602原理及显示程序

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

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

在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。

发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。

在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。

因此,液晶显示器画质高且不会闪烁。

数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比一样显示面积的传统显示器要轻得多。

功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。

液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。

②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。

除了黑白显示外,液晶显示器还有多灰度有彩色显示等。

如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。

③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。

LCD1602快速显示程序(附真实序列图)

LCD1602快速显示程序(附真实序列图)

LCD1602快速显示源程序(附真实序列图)/*********************************************************************** 文件名称: LCD1602.c* 当前版本: 1.0* 功能: LCD1602字符液晶的驱动实现* 作者:杜运福* 完成时间: 2013-01-04* 原始版本: 1.0* 修改人员、时间、版本及修改内容:* 其他说明:**********************************************************************/#ifndef LCD1602_H#define LCD1602_H/* 公共类型定义 */typedef unsigned char uint8;typedef signed char sint8;typedef unsigned short uint16;typedef signed short sint16;typedef unsigned long uint32;typedef signed long sint32;/** 函数名称:LCD_WriteCMD* 功能描述:写单个命令* 输入参数:CMD 命令字节,低7位有效* 输出参数:无* 返回值:0 执行成功,-1 执行失败* 其它说明:* 修改日期修改人修改内容* -----------------------------------------------* XXXX-XX-XX XXXX XXXX*/sint8 LCD_WriteCMD(uint8 CMD);/** 函数名称:LCD_SetPos* 功能描述:设置显示位置* 输入参数:XPos 行位置1,2;YPos 列位置,1~16* 输出参数:无* 返回值:0 执行成功,-1 执行失败* 其它说明:* 0x00----------------0x0f 0x10-------0x27 第一行(一次显示16个字符)* 0x40----------------0x4f 0x50-------0x67 第二行* 修改日期修改人修改内容* -----------------------------------------------* XXXX-XX-XX XXXX XXXX*/sint8 LCD_SetPos(uint8 XPos, uint8 YPos);/** 函数名称:LCD_WriteByte* 功能描述:写入单个字节显示数据* 输入参数:Byte 待写入字节数据* 输出参数:无* 返回值:0 执行成功,-1 执行失败* 其它说明:* 修改日期修改人修改内容* -----------------------------------------------* XXXX-XX-XX XXXX XXXX*/sint8 LCD_WriteByte(uint8 Byte);/** 函数名称:LCD_DispChar* 功能描述:指定位置显示单个字符* 输入参数:XPos 行位置1,2;YPos 列位置,1~16* ch 待显示字符* 输出参数:无* 返回值:0 执行成功,<0 执行失败* 其它说明:当行或列位置不合法时,不设置显示位置,直接在当前光标处显示 * 修改日期修改人修改内容* -----------------------------------------------* XXXX-XX-XX XXXX XXXX*/sint8 LCD_DispChar(uint8 XPos, uint8 YPos, char ch);/** 函数名称:LCD_DispString* 功能描述:指定位置显示字符串* 输入参数:XPos 行位置1,2;YPos 列位置,1~16* pStr 待显示字符串首地址* 输出参数:无* 返回值:0 执行成功,<0 执行失败* 其它说明:当行或列位置不合法时,不设置显示位置,直接在当前光标处显示 * 修改日期修改人修改内容* -----------------------------------------------* XXXX-XX-XX XXXX XXXX*/sint8 LCD_DispString(uint8 XPos, uint8 YPos, const char *pStr);/** 函数名称:LCD_Init* 功能描述:初始化LCD1602* 输入参数:无* 输出参数:无* 返回值:0 执行成功,-1 执行失败* 其它说明:8位数据总线模式、5*7点阵字符、AC自增、屏不移动、光标不显示、不闪烁 * 常用命令:0x38:16*2显示,5*7点阵显示字符,8位数据;指令执行时间40us* 0x0C:开显示,关光标 40us* 0x08:关显示,关光标 40us* 0x06:写完数据自动右移光标,普通情形,从左向右显示 40us* 0x04:写完数据自动左移光标,可以从右向左显示 40us* 0x01:清除显示内容,即清屏 1.64ms* 0x02:使光标还回起始位置 1.64ms* 0x18:屏幕上所有字符同时左移一格,适合滚动显示 40us* 0x1C:屏幕上所有字符同时右移一格,适合滚动显示 40us* 修改日期修改人修改内容* -----------------------------------------------* XXXX-XX-XX XXXX XXXX*/sint8 LCD_Init(void);#endif /* end LCD1602_H *//*********************************************************************** 文件名称: LCD1602.c* 当前版本: 1.0* 功能: LCD1602字符液晶的驱动实现* 作者:杜运福* 完成时间: 2013-01-04* 原始版本: 1.0* 修改人员、时间、版本及修改内容:* 其他说明:**********************************************************************/#include <reg52.h>#include <intrins.h>#include "LCD1602.h"/* LCD1602引脚定义 */#define LCD_CTRL P2 /* LCD控制口 */#define EN 0x80 /* P2.7 */#define RS 0x40 /* P2.6 */#define RW 0x20 /* P2.5 */#define LCD_DATA P0 /* LCD数据口 */#define LCD_DATAIN_SET LCD_DATA=0xFF /* 数据口输入设置宏 *//* 控制线置位与复位带参宏定义 */#define SET(X) LCD_CTRL |= (X)#define RESET(X) LCD_CTRL &= ~(X)/* 读取LCD忙状态 BF bit7 */#define LCD_STATE LCD_DATA & 0x80/* 延时1us宏定义 */#define NOP() _nop_()/** 延时N毫秒*/static void DelayNms(int N){int i = 0;while (N--){for (i = 0; i < 75; i++){}}}/* 等待LCD空闲,BF=0 */static void LCD_WaitIdle(void){uint8 State = 0;/* 读BF时序建立 */RESET(RS);SET(RW);SET(EN);/* 设置BF对应引脚为输入 */LCD_DATAIN_SET;/* 等待BF=0,LCD空闲 */while ((State = LCD_STATE)!=0);/* 拉低LCD使能 */RESET(EN);}/* 写一个字节命令 */sint8 LCD_WriteCMD(uint8 CMD){/* 若为无效命令,则直接返回 */if ((CMD & 0x3F)== 0){return -1;}LCD_DATA = CMD;RESET(RS);RESET(RW);SET(EN);RESET(EN); /* 产生下降沿,启动写入操作 */LCD_WaitIdle(); /* 等待LCD空闲 */return 0;}/* 设置显示位置 */sint8 LCD_SetPos(uint8 XPos, uint8 YPos){uint8 Pos = 0;if ((XPos != 1) && (XPos != 2)) /* 判断行坐标是否合法 */ {return -1;}if (YPos > 40) /* 每行有40个地址 */{return -1;}if (XPos == 1) /* 第一行 */{Pos = 0x00 + YPos -1;}else /* 第二行*/{Pos = 0x40 + YPos -1;}LCD_DATA = Pos | 0x80;RESET(RS);RESET(RW);SET(EN);RESET(EN); /* 产生下降沿 */LCD_WaitIdle(); /* 等待LCD空闲 */return 0;}/* 写入一个字节数据 */sint8 LCD_WriteByte(uint8 Byte){if (Byte == 0){return -1;}LCD_DATA = Byte;SET(RS);RESET(RW);SET(EN);RESET(EN); /* 产生下降沿 */LCD_WaitIdle(); /* 等待LCD空闲 */return 0;}/* 指定位置显示一个字符 */sint8 LCD_DispChar(uint8 XPos, uint8 YPos, char ch){sint8 ret = 0;ret += LCD_SetPos(XPos, YPos);ret += LCD_WriteByte((uint8)ch);return ret;}/* 指定位置显示一个字符串 */sint8 LCD_DispString(uint8 XPos, uint8 YPos, const char *pStr) {sint8 ret = 0;sint8 Cnt = 0;ret += LCD_SetPos(XPos, YPos);/* 逐个显示字符,最多可以显示41-YPos个字符(含超出一屏的内容)例:YPos=1,则Cnt范围为0~39 */while ((pStr[Cnt] != '\0') && (Cnt <= 40-YPos)){ret += LCD_WriteByte((uint8)pStr[Cnt]);Cnt++;}if (Cnt + YPos > 40) /* 字符串过长!! */{ret = -1;}return ret;}/* LCD1602初始化 */sint8 LCD_Init(void){/* 上电等待LCD硬件自动复位完成,不少于10ms */DelayNms(10);/* 关显示 */LCD_WriteCMD(0x08);/* 功能设置,两行显示、5*7点阵字体、8位数据总线 */LCD_WriteCMD(0x38);/* 设置输入模式,AC自动加1,显示不移位,光标自动移位 */ LCD_WriteCMD(0x06);/* 开显示,关光标,关闪烁 */LCD_WriteCMD(0x0C);/* 清显示,清除DDRAM,光标归位 */LCD_WriteCMD(0x01);return 0;}/** 文件名称: main.c* LCD1602模块测试程序*/#include <reg52.h>#include <intrins.h>#include "LCD1602.h"/* 延时N个10us */static void DelayN10us(uint16 N){while (N--);}int main(){LCD_Init();while(1){LCD_DispString(2,2,"Welcome!!"); DelayN10us(65535);DelayN10us(65535);LCD_WriteCMD(0x01);LCD_DispString(2,2,"Hello!!"); DelayN10us(65535);DelayN10us(65535);LCD_WriteCMD(0x01);//DelayN10us(65535);}return 0;}写清屏命令0x01序列图:写模式设置命令0x38序列图:写显示地址序列图:写一字节数据序列图:注:以上序列图为本人亲测!!。

LCD1602.H51单片机LCD1602显示驱动程序

LCD1602.H51单片机LCD1602显示驱动程序

LCD1602.H(51单片机LCD1602显示驱动程序)/*无敌高氯酸修改函数功能delay_ms(time) 延时time毫秒LCD_init() 初始化清空LCD屏LCD_print(x,y,str)在(x,y)坐标上显示str字符0=;0;i--)for (j=0;j<1140;j++);}/************************************************ *********************函数名称:LCD_print()功能描述:显示字符或字符串入口参数:字符或字符串返回值:无************************************************* *********************/void LCD_print(uchar x,uchar y,uchar *str){LCD_gotoxy(x,y);while(*str!='\0'){LCD_wdata(*str);str++;}}/************************************************** *******************函数名称:LCD_wcommand()功能描述:LCD写指令入口参数:uchar lcd_cmd:命令字,uchar busy_f:忙检测标志位返回值:无************************************************* ********************/void LCD_wcommand(uchar lcd_cmd,busy_f){if (busy_f) Rstatus(); //不忙才执行下个程序Port = lcd_cmd;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; //延时}/************************************************ *********************函数名称: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);}。

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

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

实验三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.专业全拼+学号” o3.编写程序,利用功能键实现字符的垂直滚动和水平滚动等效果显示。

显示字符为:“ 1.姓名全拼2.专业全拼+学号 EXP8 DISPLAY”主程序静态显示“ My in formation ! ”四、实验原理液晶显示的原理:采用的LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。

当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。

1. LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各3.芯片时序表:4.1602LCD勺一般初始化(复位)过程(1)延时 15mso(2)写指令38H (不检测忙信号)。

(3)延时5ms(4)写指令38H (不检测忙信号)。

(5)延时5ms(6)写指令38H (不检测忙信号)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

D0
EQU 53H
;LCM 显示缓存指针
LCM_P EQU 54H
;********************************变量定义结束**********************************
;**********************************程序开始************************************ ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0 ;T0 定时中断
1.6.2 显示开/关及光标设置
1.6.3 数据指针设置 1.6.4 其它设置
5
1.7 外形
嵌入式应用软件园,版权所有,请勿转载/销售。
6
嵌入式应用软件园,版权所有,请勿转载/销售。
第 2 章 程序功能
程序中包含 LCM 用到的所有函数:初始化、写指令、写数据、判忙碌、清屏 幕。
单片机外接 2x2 (P3.7,P3.6 与 P3.0,P3.1)矩阵键盘,利用定时器 T0 的定时中断, 查询矩阵键盘。矩阵键盘被命名为 A、B、C、D。对键盘被按下的次数进行计数, 计数值会在 LCM 上显示。
;****************************LCM 与 89C51 接口定义******************************
RS
BIT P3.3
R_W BIT P3.4
E
BIT P3.5
DB0_7 EQU P1
;********************************接口定义结束**********************************
9
嵌入式应用软件园,版权所有,请勿转载/销售。
LCALL WRITE_DATA MOV A,#10001010B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#3AH LCALL WRITE_DATA ;显示 C: MOV A,#11000000B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#43H LCALL WRITE_DATA MOV A,#11000001B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#3AH LCALL WRITE_DATA ;显示 D: MOV A,#11001001B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#44H LCALL WRITE_DATA MOV A,#11001010B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#3AH LCALL WRITE_DATA ;计数的循环,一直执行,永不跳出 START: MOV LCM_P,#10000010B ;数据指针(显示地址设置) MOV R0,#A4 LCALL DISP MOV LCM_P,#10001011B ;数据指针(显示地址设置) MOV R0,#B4 LCALL DISP MOV LCM_P,#11000010B ;数据指针(显示地址设置) MOV R0,#C4 LCALL DISP MOV LCM_P,#11001011B ;数据指针(显示地址设置) MOV R0,#D4 LCALL DISP LJMP START
2
1.1 技术参数
嵌入式应用软件园,版权所有,请勿转载/销售。
第 1 章 LCD/LCM 简介
1.2 信号说明
1.3 操作时序
3
1.4 状态字
嵌入式应用软件园,版权所有,请勿转载/销售。
1.5 RAM 地址映射
1.6 指令说明 1.6.1 显示模式设置
4
嵌入式应用软件园,版权所有,请勿转载/销售。
;***********************************变量定义***********************************
;计数器 A 缓存
A4
EQU 40H
A3
EQU 41H
A2
EQU 42H
A1
EQU 43H
A0
EQU 44H
;计数器 B 缓存
B4
EQU 45H
B3
EQU 46H
B2
EQU 47H
B1
EQU 48H
B0
EQU 49H
;计数器 C 缓存
C4
EQU 4AH
C3
EQU 4BH
C2
EQU 4CH
C1
EQU 4DH
C0
EQU 4EH
;计数器 D 缓存
D4
EQU 4FH
D3
EQU 50H
D2
EQU 51H
8
嵌入式应用软件园,版权所有,请勿转载/销售。
D1
EQU 52H
;****************************************************************************** ;函数名:DISP ;输 入:R0 ;输 出:无 ;调 用:WRITE_COM,WRITE_DATA
10
嵌入式应用软件园,版权所有,请勿转载/销售。
LCM 与单片机的连接
7
嵌入式应用软件园,版权所有,请勿转载/销售。
第 3 章 程序代码
我们的辛勤付出,需要您的肯定,请访问: 嵌入式应用软件园。
;******************************************************************************
;模 块:LCM
;文件名:LCM_Num.asm
;作 者:嵌入式应用软件园 http:ห้องสมุดไป่ตู้/
;修 订:
;
版本号
原因
;
1.0
初始版本
;******************************************************************************
ORG 0030H MAIN:
MOV TMOD,#01H MOV TL0,#00H MOV TH0,#00H SETB EA SETB ET0 SETB TR0 MOV SP,#60H LCALL INITIAL LCALL CLEAR ;显示 A: AGAIN: MOV A,#10000000B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#41H LCALL WRITE_DATA MOV A,#10000001B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#3AH LCALL WRITE_DATA ;显示 B: MOV A,#10001001B ;数据指针(显示地址设置) LCALL WRITE_COM MOV A,#42H
嵌入式应用软件园,版权所有,请勿转载/销售。
1602A LCD /1602A LCM 驱动及显示计数值
程序
作者: 嵌入式应用软件园
1
嵌入式应用软件园,版权所有,请勿转载/销售。
目录
第 1 章 LCD/LCM 简介 ...............................................................................................3 1.1 技术参数............................................................................................................3 1.2 信号说明............................................................................................................3 1.3 操作时序............................................................................................................3 1.4 状态字................................................................................................................4 1.5 RAM 地址映射....................................................................................................4 1.6 指令说明............................................................................................................4 1.6.1 显示模式设置..............................................................................................4 1.6.2 显示开/关及光标设置 ................................................................................5 1.6.3 数据指针设置..............................................................................................5 1.6.4 其它设置 .....................................................................................................5 1.7 外形 ...................................................................................................................6
相关文档
最新文档