📄 lcd1602.c
字号:
/**************************************************************************
File Name: LCD.h
Author: liao xuming
Created: 2007/3/23
Modified: NO
Revision: 1.0
***************************************************************************/
#include"LCD1602.h"
#include"keyboard.h"
/***********************LCD1602接线引脚定义**************************/
#define LCDIO P0 //定义P2口与LCD1602的数据口相接
sbit LCD_RS=P2^5;
sbit LCD_RW=P2^6;
sbit LCD_EN=P2^7;
sbit LCD_BUSY=LCDIO^7;
/**************LCD1602的初始化***************************/
void LCD_init(void)
{LCD_EN=0;
LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);
LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);
LCD_send_command(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);
LCD_send_command(LCD_DISPLAY_ON|LCD_CURSOR_OFF);
LCD_send_command(LCD_CLEAR_SCREEN);
}
/********************************************************/
void LCD_check_busy(void) //检测LCD状态,看它是不是还在忙呢
{
do
{
LCD_EN=0;
LCD_RS=0;
LCD_RW=1;
LCDIO=0xff;
LCD_EN=1;
}
// while(1);
while(LCD_BUSY==1); //在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,
//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
//实际硬件时打开此语句
LCD_EN=0;
}
/************LCD1602写命令*******************************/
void LCD_send_command(uchar command)
{
LCD_check_busy();
LCD_RS=LOW;
LCD_RW=LOW;
LCD_EN=HIGH;
LCDIO=command;
LCD_EN=LOW;
}
/********************************************************/
/*****************LCD1602写数据**************************/
void LCD_send_data(uchar dat)
{
LCD_check_busy();
LCD_RS=HIGH;
LCD_RW=LOW;
LCD_EN=HIGH;
LCDIO=dat;
LCD_EN=LOW;
}
/********************************************************/
void LCD_write_char(uchar x,uchar y,uchar dat)
{
unsigned char address;
if(dat!=KEY_NOTHING+0x30) //this if is my add for when the time no key down to do not display anything
{
if (y == LINE1)
address = LINE1_HEAD + x;
else
address = LINE2_HEAD + x;
LCD_send_command(address);
LCD_send_data(dat);
}
}
void GotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_send_command(0x80|x);
if(y==1)
LCD_send_command(0x80|(x-0x40));
}
void Print(unsigned char *str)
{
while(*str!='\0')
{
LCD_send_data(*str);
str++;
}
}
/******************LCD1602显示字符串*********************/
void LCD_disp_string(uchar x,uchar y,uchar *Data)
{
if(y==LINE1)
{
if(x<LINE_LENGTH)
{
LCD_send_command(LINE1_HEAD+x);
for(;x<LINE_LENGTH&&*Data!='\0';x++)
{
LCD_send_data(*(Data++));
}
if(*Data!='\0')
{
x=0;
y=LINE2;
}
}
}
if(y==LINE2)
{
LCD_send_command(LINE2_HEAD+x);
for(;x<LINE_LENGTH&&*Data!='\0';x++)
{
LCD_send_data(*(Data++));
}
}
}
/****************************************************************/
//ming add display code string
/******************LCD1602显示字符串*********************/
void LCD_disp_string_code(uchar x,uchar y,uchar code *Data)
{
if(y==LINE1)
{
if(x<LINE_LENGTH)
{
LCD_send_command(LINE1_HEAD+x);
for(;x<LINE_LENGTH&&*Data!='\0';x++)
{
LCD_send_data(*(Data++));
}
if(*Data!='\0')
{
x=0;
y=LINE2;
}
}
}
if(y==LINE2)
{
LCD_send_command(LINE2_HEAD+x);
for(;x<LINE_LENGTH&&*Data!='\0';x++)
{
LCD_send_data(*(Data++));
}
}
}
/****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -