LCD1602.h和LCD1602.c文件下载(51单片机液晶驱动)
    

LCD1602.c文件的内容(这个一个完善的用51单片机实现1602液晶屏驱动文件带protues仿真文件):
完整的程序源码和仿真文件下载:http://www.51hei.com/f/TLC1543c51.rar

/*----File Description----

- File Name : LCD1602.h - Functions : - Description : None - Author : Mason 别名:小菜 - Create Date : 2013/7/25 - Performance : Finished - Global Variable : None - File static Variable : None - ------------------------------------------- - Revision History - No. Date Revised by Item Description - -------------------------------------------------------------------------*/ /*----------------------------Head---------------------------------------*/ #include "LCD1602.h" #include "delay.h" /*----------------------------Code---------------------------------------*/
// LCD1602上电后初使化 void LCD1602_Init(void) { delayms(50); // 上电延时50ms. write1602_byte(0x3c,0); // 功能设置:双行、8位数据接口、5*10点阵字符. while(Read1602_BF()); // 读取1602的繁忙状态(Busy Flag),直至空闲。 write1602_byte(0x0c,0); // 显示开关:开;光标显示:关;闪烁控制:关; while(Read1602_BF()); // 读取1602的繁忙状态(Busy Flag),直至空闲。 write1602_byte(0x06,0); // 操作后,AC自增,画面不动。 while(Read1602_BF()); // 读取1602的繁忙状态(Busy Flag),直至空闲。 write1602_clear(); CursorRST_1602(); // 光标复位,但DDRAM内容不变 }
/*----Function Description---- - Function Name : write1602_byte(uchar dat,bit RorS) - Description : 发送一个字节数据 - Return Code : None - Parameters/Arguments : dat 是一个字节数据,RorS 指定 dat 是数据还是指令 - Global Variable : None - static Variable : None -------------------------------------------------------------------------*/ void write1602_byte(uchar dat,bit RorS) { RW_1602 = 0; // 写 EN_1602 = 0; delayus(10); // 数据建立时间,需大于1us.这里延时25us. if(RorS) RS_1602 = 1; // dat is a data. else RS_1602 = 0; // dat is a command. EN_1602 = 1; // 使能脉冲需大于450ns。 DP_1602 = dat; // 整个使能周期需大于1ms。 delayus(10); // 延时25us EN_1602 = 0; delayms(1); // 指令执行时间,需大于40us.这里延时1ms. }
/*----Function Description---- - Function Name : bit Read1602_BF(void) - Description : 判断1602指令执行状态。 - Return Code : BF(busy flag),BF = 1 : busy. - Parameters/Arguments : None - Global Variable : None - static Variable : None -------------------------------------------------------------------------*/ bit Read1602_BF(void) // 读取1602的空闲状态(Busy Flag) { RW_1602 = 1; // 读 RS_1602 = 0; delayus(50); // 延时100us,这里的延时需大于 DP_1602 <<= 1; // 读指令最大执行时间40us. return CY; // 将BF位移至CY位并返回. }
void write1602_clear(void) { write1602_byte(CLRLCD1602,0); // 发送清屏指令。 delayms(50); // 延时需大于15.2ms,这里延时50ms }
void CursorRST_1602(void) // 光标复位,但DDRAM内容不变 { write1602_byte(CURRST1602,0); // 发送清屏指令。 delayms(50); // 延时需大于15.2ms,这里延时50ms }
/*----Function Description---- - Function Name : write1602_DDRAM_pos(uchar px,uchar py) - Description : DDRAM 为显示数据存储器。本函数更改指向DDRAM 的指针AC。 - Return Code : None - Parameters/Arguments : py : row . 0 : First row . 1 : Second row . px : 从左至右分别为 0 ~ 15 . - Global Variable : None - static Variable : None -------------------------------------------------------------------------*/ void write1602_DDRAM_pos(uchar px,uchar py) { if(py){ write1602_byte( px|0x80 + 0x40 , 0 ); }else{ write1602_byte( px|0x80 , 0 ); } }

/*----Function Description---- - Function Name : write1602_CGRAM(uchar dat[8],uchar add) - Description : 将一个字符(8个字节的数组)写入 CGRAM。 - Return Code : None - Parameters/Arguments : uchar dat[8]为字符数组。 uchar add 为自定义字符的访问地址,取值应在 0~7. - Global Variable : None - static Variable : None -------------------------------------------------------------------------*/ void write1602_CGRAM(uchar dat[8],uchar add) { uchar temp; add %= 8; // 数据有效性处理 for(temp=0;temp<8;temp++) { write1602_byte( add<<3|0x40+temp , 0 ); // 写 CGRAM 地址。 write1602_byte( dat[temp] , 1 ); // 写 CGRAM 字符数据。 } }
void draw1602_basic(void) { uchar temp; for(temp=0;temp<8;temp++) // 装载8个自定义符号 write1602_CGRAM(dat1602[temp],temp);
write1602_DDRAM_pos(0,0); write1602_byte(4,1); // 显示8个自定义符号 write1602_DDRAM_pos(15,0); write1602_byte(5,1); // 显示8个自定义符号 write1602_DDRAM_pos(0,1); write1602_byte(6,1); // 显示8个自定义符号 write1602_DDRAM_pos(15,1); write1602_byte(7,1); // 显示8个自定义符号 write1602_DDRAM_pos(5,0); write1602_byte('m',1); write1602_byte('a',1); write1602_byte('s',1); write1602_byte('o',1); write1602_byte('n',1);
write1602_DDRAM_pos(2,1); write1602_byte('v',1); write1602_byte('o',1); write1602_byte('l',1); write1602_byte('t',1); write1602_byte(':',1); }

LCD1602.h头文件的内容(这个一个完善的1602液晶屏驱动文件带protues仿真文件):

/*----Head Description----

- File Name : LCD1602.h

- Author : Mason 别名:小菜

- Create Date : 2013/7/25

- -------------------------------------------

- Revision History

- No. Date Revised by Item Description

-

-------------------------------------------------------------------------*/

/*----------------------------Head---------------------------------------*/

#include <reg52.h>

#include "MICRO.h"


#ifndef _LCD1602_H_

#define _LCD1602_H_

/*----------------------------Interface----------------------------------*/

sbit RS_1602 = P0^5; // 1:数据;0:指令。

sbit RW_1602 = P0^6; // 1:读; 0:写。

sbit EN_1602 = P0^7; // 高电平使能

#define DP_1602 P2 // 数据/指令接口

/*----------------------------Micro--------------------------------------*/

// 指令设置(若不另加说明):需令RS1602 = 0;RW1602 = 0 ;


// 清屏

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 0 0 0 0 0 0 1

#define CLRLCD1602 0x01 // Clear LCD1602. 清屏


// 光标复位

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 0 0 0 0 0 1 *

#define CURRST1602 0x02 // Cursor restoration. 光标复位


// 输入方式设置 // I : Increase, D : Decrease. AC : address counter. 地址寄存器。

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 0 0 0 0 1 I/D S

#define MODEIN1602 0x06 // AC Increase,Not Shift. 操作后,AC自增,画面不动。

#define MODEDN1602 0x04 // AC Decrease,Not Shift. 操作后,AC自减,画面不动。

#define MODEIS1602 0x07 // AC Increase,Shift. 操作后,AC自增,画面平移。

#define MODEDS1602 0x05 // AC Decrease,Shift. 操作后,AC自减,画面平移。


// 显示开关控制 Display Setup

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 0 0 0 1 D C B

// D: Display Switch. 显示开关。

// C: Cursor Switch. 光标开关。置位时显示光标。

// B: Blink Switch. 闪烁控制。置位时光标闪烁。

// 将下列相应功能宏相或后赋值操作。

#define DISSET1602 0x08

#define SETDIS1602 0x04

#define SETCUR1602 0x02

#define SETBLI1602 0x01


// 光标/画面位移(不改变DDRAM内容)

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 0 0 1 S/C R/L * *

// S/C: Screen or Cursor.

// R/L: Right or left.


// 功能设置

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 0 1 DL N F * *

// DL = 1,8位数据接口; DL = 0,4位数据接口。

// N = 1,两行显示; N = 0,单行显示。

// F = 1,5*10点阵字符;F = 0,5*7点阵字符。


// CGRAM 地址设置,character generator RAM (0~3FH)

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 1 A5 A4 A3 A2 A1 A0


// DDRAM 地址设置

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 1 A6 A5 A4 A3 A2 A1 A0

// N = 0,单行显示 A6 ~ A0 = 00H ~ 4FH

// N = 1,首行 A6 ~ A0 = 00H ~ 27H

// 次行 A6 ~ A0 = 40H ~ 67H


// 读BF、AC值(BF:Busy Flag.)

// RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 1 BF A6 A5 A4 A3 A2 A1 A0


// 写数据

// RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

// 0 1 BF A6 A5 A4 A3 A2 A1 A0


/*------------------------------Code Variable----------------------------*/

extern uchar code dat1602[][8]; // 自定义字符


/*----------------------------Function Declaration-----------------------*/

bit Read1602_BF(void); // 读取1602的空闲状态(Busy Flag)

void LCD1602_Init(void); // LCD1602上电初使化

void CursorRST_1602(void); // 光标复位,但DDRAM内容不变

void write1602_clear(void); // 清屏

void write1602_byte(uchar dat,bit RorS); // 写一字节数据/指令.

void write1602_DDRAM_pos(uchar px,uchar py);// 写指向DDRAM的地址指针

void write1602_CGRAM(uchar dat[8],uchar add);// 将一个5*8自定义字符写入CGRAM中


void draw1602_basic(void);


#endif

相关阅读
  • 9S12的3.带液晶驱动和SSD的MC9S12H
  • 张工的单片机初学者(51开发板含16
  • 基于51单片机的1602lcd液晶反显程
  • 基于51单片机设计的TFT液晶显示
  • 基于51单片机的tft液晶显示设计
  • 基于51单片机设计的tft液晶显示
  • 基于51单片机的TFT液晶显示设计
  • 单片机驱动19264液晶显示汉字c程序
  • HT1621液晶驱动芯片的51单片机程序
  • LCD1602液晶显示带汉字的万年历程
  • 51单片机驱动步进电机protues仿真
  • 51单片机、AVR单片机和PIC单片机IO
  • 51系列单片机的结构和功能_Structu
  • 跟我学51单片机(七)—lcd1602液
  • 【程序】51单片机LCD1602程序2
  • 【应用】80C51和CH375的USB打印机
  • 【程序】51单片机和图形LCD接口技
  • 单片机驱动SED1335液晶图像LCD显示
  • 【应用】基于USB总线和89C51单片机
  • 驱动精灵更新下载的文件在哪里
  • 51单片机驱动步进电机电路及汇编程
  •  



     
     
         

    收录时间:2016年10月17日 17:53:36 来源:单片机教程网 作者:匿名
    上一篇:LPC210X的实时时钟操作程序  (电脑版  手机版)
     
    创建分享人
    客尚淹留
    最新问题
     
    喜欢此文章的还喜欢
    Copyright by www.chinabaike.com;All rights reserved. 联系:QQ:469681782