欢迎光临散文网 会员登陆 & 注册

基于51单片机的1602驱动程序

2021-01-10 20:56 作者:技术流阿宅  | 我要投稿

//作者:科技小宅神

//版本声明:仅供参考学习!违者必究!

//完成时间:2021/01/10

//代码功能:本程序为液晶1602驱动程序,具有高度可移植性!只需更改相应的引脚即可!


#ifndef _1602_H_

#define _1602_H_


#define uchar unsigned char

#define uint unsigned int


#define BUSY 0x80 //常量定义


//LCD1602引脚定义

sbit LCD_RS = P2^0;//寄存器选择位,将RS位定义为P2^0引脚

sbit LCD_RW = P2^1;//读写选择位,  将RW位定义为P2^1引脚

sbit LCD_EN = P2^2;//使能信号位,  将EN位定义为P2^2引脚

//---------------------------------------------------------------------

//函数:判忙函数(等待函数)

//功能:判断液晶是否忙碌

void busy()

{

uchar sta;

sta=0xff;//读取 LCD 引脚状态

LCD_EN=1;//选择数据寄存器

LCD_RS=0;//选择指令寄存器

LCD_RW=1;//读

_nop_(); 

_nop_();

_nop_();

do

{

LCD_EN=1;

_nop_();

sta=P0;    //读取状态字

LCD_EN=0;  //当E端由高电平跳变成低电平时,液晶模块执行命令

}

while(sta&BUSY);//bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止

}

//---------------------------------------------------------------------

//函数:写命令函数

//功能:向液晶写入一字节命令(8位命令), cmd-待写入命令值 

void writecmd(unsigned char cmd)

{

busy();     //判断液晶是否忙碌

LCD_RS = 0; //选择指令寄存器

LCD_RW = 0; //写模式

P0 = cmd;   //把数据给P0,即写入指令和地址

LCD_EN = 1;

    _nop_();    //短暂延时1us

_nop_();    //短暂延时1us

LCD_EN = 0; //当E端由高电平跳变成低电平时,液晶模块执行命令

}

//---------------------------------------------------------------------

//函数:写数据函数

//功能:向液晶写入一字节数据(8位数据), dat-待写入数据值 

void writedata(unsigned char dat)

{

busy(); //判断液晶是否忙碌

LCD_RS = 1; //选择数据寄存器

LCD_RW = 0; //写模式

P0= dat; //把数据给P0

LCD_EN = 1;

_nop_(); //短暂延时1us

_nop_(); //短暂延时1us

LCD_EN = 0; //当E端由高电平跳变成低电平时,液晶模块执行命令

}

//---------------------------------------------------------------------

//函数:初始化液晶函数

//功能:初始化液晶,并显示启动界面

void LCD_init()

{

writecmd(0x38); //16*2 显示, 5*7 点阵, 8 位数据传送

writecmd(0x0c); //显示器开,光标关闭

writecmd(0x06); //文字不动,地址自动+1

writecmd(0x01); //清屏

}

#endif


基于51单片机的1602驱动程序的评论 (共 条)

分享到微博请遵守国家法律