/*****************************************************************
* 文件名:Lcd1602.c
* 描 述:1602液晶驱动文件
* 版本号:1.0.0
*****************************************************************/
// 配置头文件
#include <reg52.h>
#include <intrins.h>
#include "LCD1602.h"
void delayms(unsigned int j)
{
unsigned int i;
while(j --)
{
for(i = 0; i < 1200; i ++);
}
}
// LCD1602引脚配置
#define LCD1602_DB P0
sbit LCD1602_RS = P2^5;
sbit LCD1602_RW = P2^6;
sbit LCD1602_EN = P2^7;
// 5us驱动函数延时专用
#define delay_5us() {_nop_();_nop_();_nop_();_nop_();_nop_();}
//// 驱动函数声明:写数据与写命令
//void LCD1602_Write_Cmd(unsigned char);
//void LCD1602_Write_Data(unsigned char);
//
/*****************************************************************
函数名: LCD1602_Init
描述: LCD1602 初始化
入口参数: 无
出口参数: 无
返回值: 无
*****************************************************************/
void LCD1602_Init()
{
LCD1602_Write_Cmd(0x38); // 8位数据,两行,5 * 7点阵
LCD1602_Write_Cmd(0x38); // 8位数据,两行,5 * 7点阵
LCD1602_Write_Cmd(0x38); // 8位数据,两行,5 * 7点阵
LCD1602_Write_Cmd(0x38); // 8位数据,两行,5 * 7点阵
// 三种显示方式
LCD1602_Write_Cmd(0x0c); // 开显示但无标
// LCD1602_Write_Cmd(0x0e); // 开显示,有光标但光标不闪烁
//LCD1602_Write_Cmd(0x0f); // 开显示,有光标且光标闪烁
LCD1602_Write_Cmd(0x06); // 显示地址指针自加1
LCD1602_Write_Cmd(0x01); // 清屏
LCD1602_Clear();
}
/*****************************************************************
函数名: LCD1602_ShowStr
描述: 在指定的行,指定的位置显示指定的字符串
入口参数: x :显示位置 y:1 or 2 s: 字符串地址
出口参数: 无
返回值: 无
*****************************************************************/
void LCD1602_ShowStr(unsigned char x,unsigned char y, unsigned char *s)
{
if(y == 1) // 写第一行x位置
{
LCD1602_Write_Cmd(0x80 + x);
}
else // 写第二行x位置
{
LCD1602_Write_Cmd(0xc0 + x);
}
while(*s) // 逐个写入字符
{
LCD1602_Write_Data(*s);
s ++ ;
}
}
/*****************************************************************
函数名: LCD1602_Clear
描述: LCD1602 清屏
入口参数: 无
出口参数: 无
返回值: 无
*****************************************************************/
void LCD1602_Clear(void)
{
LCD1602_Write_Cmd(0x01); // 写入清屏命令
delayms(10);
}
// LCD底层驱动:写命令
void LCD1602_Write_Cmd(unsigned char cmd)
{
LCD1602_RS = 0; // 选择指令寄存器
LCD1602_RW = 0; // 选择写
LCD1602_EN = 1; // 使能LCD
delay_5us();
LCD1602_DB = cmd; // 写入命令值
delayms(10);
LCD1602_EN = 0; //释放总线
}
// LCD底层驱动:写数据
void LCD1602_Write_Data(unsigned char Data)
{
LCD1602_RS = 1; // 选择数据寄存器
LCD1602_RW = 0; // 选择写
LCD1602_EN = 1; // 使能LCD
delay_5us();
LCD1602_DB = Data; // 写入数据值
delayms(10);
LCD1602_EN = 0; //释放总线
}
此帖出自
小平头技术问答
是不是这个样子
嗯···
一周热门 更多>