#include "reg52.h"
#include "lcd1602.h"
#include "delay.h"
sbit LCD_RS=P2^6;//数据命令选择端
sbit LCD_WR=P2^5;//数据读写端
sbit LCD_E=P2^7; //液晶使能端
#define Date P0 //数据口宏定义
unsigned char str1[]="AD: ";
unsigned char str2[]="Value: . ";
#define LineLenth 16 //16x2
//LCD_Write_Cmd(0x01);//清屏
void LCD_Init()//液晶初始化
{
u8 i;
LCD_WR=0;
LCD_Write_Cmd(0x38);//设置16*2显示,5*7点阵,8位数据接口
LCD_Write_Cmd(0x0c);//设置开显示,0x0e显示光标 0x0c不显示光标
LCD_Write_Cmd(0x06);//写一个字符后地址指针自动加1,光标自动右移
LCD_Write_Cmd(0x01);//清屏
LCD_Write_Cmd(0x80);//数据指针定位到第一行第一个字处
for(i=0;i<16;i++)
LCD_Write_Data(str1[i]);//液晶显示第一行写数据
LCD_Write_Cmd(0xc0);//数据指针定位到第二行第一个字处
for(i=0;i<16;i++)
LCD_Write_Data(str2[i]);//液晶显示第二行写数据
}
void LCD_Manifest(u8 row,u8 add,u8 date)
{
if(row==1) LCD_Write_Cmd(0x80+add);
if(row==2) LCD_Write_Cmd(0xc0+add);
LCD_Write_Data(0x30+date);
}
void WriteChar(u8 hang,u8 lie,u8 dat)
{
if((hang == 0) || (hang > 2)) return;
if((lie == 0) || (lie > LineLenth)) return;
if(hang == 1) LCD_Write_Cmd((lie-1) | 0x80);
else LCD_Write_Cmd((lie+63) | 0x80);
LCD_Write_Data(dat);
}
/*----------------写一个字符串,指定行、列和字符串首地址----------------*/
/*----------------PutString(1,1,"-- Clock demo --");----------------*/
void PutString(u8 hang,u8 lie,u8 *puts)
{
if((hang == 0) || (hang > 2)) return;
if((lie == 0) || (lie > LineLenth)) return;
if(hang == 1) LCD_Write_Cmd((lie-1) | 0x80);
else LCD_Write_Cmd((lie+63) | 0x80);
for ( ; *puts != 0; puts++)
{
if(++lie > 20) break;
LCD_Write_Data(*puts);
}
}
////指定地址显示光标
//void Cursor_display(u8 add)
//{
// LCD_Write_Cmd(0x80+add);
// LCD_Write_Cmd(0x0e);//打开光标显示
//}
void LCD_Write_Cmd(u8 com)//液晶写命令
{
LCD_RS=0;//选择写命令模式
Date=com;//将要写的命令字送到数据总线上
delay_ms(1);
LCD_E=1;//使能端给一高脉冲,高脉冲有效
delay_ms(1);
LCD_E=0;
}
void LCD_Write_Data(u8 date)//数据写命令
{
LCD_RS=1;//选择写数据模式
Date=date;
delay_ms(1);
LCD_E=1;//使能端给一高脉冲,高脉冲有效
delay_ms(1);
LCD_E=0;
}

D3089885784
- 粉丝: 0
- 资源: 1