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

发布者:数字梦行最新更新时间:2015-01-07 来源: 51hei关键字:LCD1602  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

#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

关键字:LCD1602  51单片机  液晶驱动 引用地址:LCD1602.h和LCD1602.c文件下载(51单片机液晶驱动)

上一篇:基于ZigBee的无线传感器网络硬件设计
下一篇:51单片机中什么是bit和sbit?_bit和sbit区别

推荐阅读最新更新时间:2024-03-16 13:50

利用51单片机完成一种智能助眠机系统的设计
一、功能简介 本项目使用Proteus8.12仿真51单片机控制器,使用蜂鸣器闹铃模块、LCD1602显示模块、心率血氧模块、PCF8691 ADC模块、按键模块等。 主要功能: 系统运行后,LCD1602显示传感器采集的心率和血氧值以及当前时间;可通过K3键进入时间修改模式,K3用于切换时、分、秒,K1和K2键调节;时间修改完成后可按下K4键保存并返回主界面。 可通过K4键进入助眠和起床闹铃设置模式,K4用于切换助眠时/分,起床时/分,K1和K2键调节。闹铃设置好后可按下K3键保存并返回主界面。若当前时间到达助眠时间或起床闹钟时间,则开启蜂鸣器闹铃,可通过K2键取消正在闹铃。正常界面下,可通过K1键查阅监测心率和血氧的数
[单片机]
利用<font color='red'>51单片机</font>完成一种智能助眠机系统的设计
51单片机直接寻址方式与编程举例
直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。 例如:MOV A,30H 这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。 在80C51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间,具体的说就是: 1、内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。 我们知道低128单元的地址是00H-7FH。在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH形
[单片机]
单片机 实时时钟电路(LCD1602、PCF8563)
一、简介 此电路主要有51单片机、LCD1602模块、PCF8563芯片和按键组成组成,通过LCD1062显示当前时间,按键可设置时间。 二、运行效果 三、部分代码 /*想要更多项目私wo!!!*/ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int void init() { uchar num; lcden=0; write_com(0x38); //0011 1000B,功能模式设置,设置为8为数据口,两行显示,5*7点阵 write_com(0x0c)
[单片机]
单片机 实时时钟电路(<font color='red'>LCD1602</font>、PCF8563)
51单片机串口配置
1.配置串口工作模式为模式1。即设置SCON寄存器(SM0,SM1,REN位),SCON |= 0X50;(SM0 = 0,SM1 = 1,REN =1). SM0 = 0,SM1 = 0 方式0:同步移位串行方式:波特率= SYSclk / 12. SM0 = 0,SM1 = 1 方式1:8位UART,波特率可变: 波特率 = (2^SMOD / 32) * (定时器1的溢出率) SM0 = 1,SM1 = 0 方式2:9位UART: 波特率 = (2^SMOD / 64) * (SYSclk系统工作时钟频率) SM0 = 1,SM1 = 1 方式3: 8位UART,波特率可变: 波特率 = (2^SMOD /
[单片机]
51单片机锁存器详解
P0口作为分时复用接口,既要作为数据总线口,又要作为地址总线口 输出的低8位地址需要用8位锁存器锁存 ALE的下降沿将P0口输出的低8位地址锁存 • 对于锁存器: ○ /OE为输出使能端 § /OE有效时,三态门导通 § /OE无效时,三态门高阻(任何数据或信息都不能通过) ○ /LE为数据输入锁存信号 § /LE有效时(低电平),数据锁存在锁存器内 § /LE无效时(高电平),输入数据直通到锁存器输出端(下图绿色部分) • 当单片机与锁存器构成总线扩展电路时: ○ ALE-------/LE(或者是CP) ○ GND------/OE § ALE=1时,/LE无效,输入的地址
[单片机]
<font color='red'>51单片机</font>锁存器详解
51单片机-按键&蜂鸣器&数码管
在上一讲的代码中我们可以不用写“sbit GND = P2^3;”,像宋老师那样直接在开头“P2 = 0xF7;”仅让P2.3输出0其他输出1即可,这样P2.7就有被拉低的条件了。 1.趁热打铁 沿袭上一讲的功能,我们新学的按键知识需要结合所学过的无源蜂鸣器硬件一起捣鼓玩玩。同上一讲的代码功能一样,这次用的是无源蜂鸣器,按键按下时,蜂鸣器就响,松开不按时就不响。 2.分析 我们先缕缕思路,显然无源蜂鸣器要想鸣叫,就不能像“LED2=KEY4;”这样赋值的方式。我们已经知道,在P2.3输出低电平的情况下,K4按下的时候程序中KEY4就等于0,松开不按时KEY4等于1。 这里可以在主函数中的死循环里用“if(KEY4==0
[单片机]
51单片机i2c存储器24c02驱动程序
这是 电路图 ,这是从这个项目中取得的文件里面有电路图和仿真文件: http://www.51hei.com/bbs/dpj-22586-1.html 下面是 i2c.c文件: #include reg52.h #include i2c.h #include delay_ms.h void delay() { ;; } void i2cinit()// 总线 初始化 { SDA = 1; delay(); SCL = 1; delay(); } void start()//启动信号 { SDA = 1; SCL = 1; delay(); SDA = 0; delay(); } void sto
[单片机]
<font color='red'>51单片机</font>i2c存储器24c02<font color='red'>驱动</font>程序
基于51单片机的车用数字仪表设计与实现
摘 要:介绍了一种以MCS 51单片机为主控器,以ADC0809为核心,以气压、油压、温度、霍尔元件等传感器为主要外围元件的车用数字仪表(VDI)的设计与实现。该仪表系统具有显示直观、准确,使用方便可靠等优点,代表了车用仪表的最新发展趋势。 关键词: MCS 51单片机;传感器;车用数字仪表 引言 ---车辆仪表是驾驶员与汽车进行信息交流的重要接口和界面,是车辆安全行驶的重要保证。随着电子技术的广泛应用,传统汽车仪表逐渐被微处理器为核心的电子控制数字仪表取代已成为必然趋势。然而,目前国内车辆仪表数字化水平还不高,绝大部分仪表还是模拟式的,而大多数模拟仪表表头的体积较大、数量多,使得显示系统拥挤不堪,影响美观;另外一些模拟
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved