LCD1602程序
#include "lcd1602.h"
#include <intrins.h>
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
void delay_us(uchar t)
{
while(--t);
}
void DelayMs(uchar t)
{
while(t--)
{
delay_us(245);
delay_us(245);
}
}
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
void LCD_Write_Com(uchar com)
{
DelayMs(5);
RS_CLR;
RW_CLR;
EN_CLR;
DataPort= com;
EN_SET;
_nop_();
EN_CLR;
}
void LCD_Write_Data(uchar Data)
{
DelayMs(5);
RS_SET;
RW_CLR;
EN_CLR;
DataPort= Data;
EN_SET;
_nop_();
EN_CLR;
}
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
void LCD_Write_String(uchar x,uchar y,uchar *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
while (*s)
{
LCD_Write_Data(*s);
s ++;
}
}
void LCD_Calc_String(uchar posx,uchar posy,uchar *str)
{
LCD_Write_Com(0x04);
if (posy == 0)
{
LCD_Write_Com(0x80 + posx);
}
else
{
LCD_Write_Com(0xC0 + posx);
}
while (*str=='\0')
{
LCD_Write_Data(*str);
str ++;
}
}
void LCD_Write_Char(uchar x,uchar y,uchar Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
void LCD_Init(void)
{
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08);
LCD_Write_Com(0x01);
LCD_Write_Com(0x06);
DelayMs(5);
LCD_Write_Com(0x0F);
}
#ifndef __LCD1602_H
#define __LCD1602_H
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
void LCD_Write_Com(uchar com);
void LCD_Write_Data(uchar Data);
void LCD_Clear(void);
void LCD_Write_String(uchar x,uchar y,uchar *s);
void LCD_Write_Char(uchar x,uchar y,uchar Data);
void LCD_Init(void);
void LCD_Calc_String(uchar posx,uchar posy,uchar *str);
void DelayMs(uchar t);
void delay_us(uchar t);
#endif