/******************************************************************************/
//文件名:lcd_int.h
////
//创建时间:2010年10月23日23:29:08
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
/******************************************************************************/
#ifndef __LCD_INT_H__
#define __LCD_INT_H__
#define LCD_DataPort_In P4DIR=0x00
#define LCD_DataPort_Out P4DIR=0xff
#define Lcd_Data_In P4IN
#define Lcd_Data_Out P4OUT
#define LCD_CMDOut P3DIR|=0x07 //P3口的低三位设置为液晶控制
#define LCD_RS_H P3OUT|=BIT2 //P3.0
#define LCD_RS_L P3OUT&=~BIT2 //P3.0
#define LCD_RW_H P3OUT|=BIT1 //P3.1
#define LCD_RW_L P3OUT&=~BIT1 //P3.1
#define LCD_EN_H P3OUT|=BIT0 //P3.2
#define LCD_EN_L P3OUT&=~BIT0 //P3.2
/******************************************************************************/
//函数名:Write_Cmd2Lcd()
//
//说明:液晶写指令函数
//
//参数:cmd 液晶操作指令
//
//返回:无
//
//创建时间:2010年10月23日23:37:32
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/
void Write_LcdCmd(U8 cmd)
{
U8 LcdTemp = 0 ; //液晶状态
LCD_RS_L ;
LCD_RW_H ;
LCD_DataPort_In ; //设置液晶数据接口为输入状态
do //检测液晶是否为忙
{
LCD_EN_H ;
_NOP();
LCD_DataPort_In;
LcdTemp = Lcd_Data_In ;
LCD_EN_L ;
}
while(LcdTemp & 0x80);
LCD_DataPort_Out; //设置液晶数据接口为输出状态
LCD_RW_L ;
Lcd_Data_Out = cmd ; //发送数据至液晶
LCD_EN_H;
_NOP();
LCD_EN_L;
}
/******************************************************************************/
//函数名:Write_LcdData()
//
//说明:写数据到液晶
//
//参数:Data 所写数据
//
//返回:无
//
//创建时间:2010年10月23日23:50:01
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/
void Write_LcdData(U8 Data)
{
U8 LcdTemp = 0 ; //液晶状态
LCD_RS_L ;
LCD_RW_H ;
LCD_DataPort_In ; //设置液晶数据接口为输入状态
do //检测液晶是否为忙
{
LCD_EN_H ;
_NOP();
LcdTemp = Lcd_Data_In ;
LCD_EN_L ;
}
while(LcdTemp & 0x80);
LCD_DataPort_Out; //设置液晶数据接口为输出状态
LCD_RS_H ;
LCD_RW_L ;
Lcd_Data_Out = Data ; //发送数据至液晶
LCD_EN_H;
_NOP();
LCD_EN_L;
}
/******************************************************************************/
//函数名:Lcd_Clear()
//
//说明:液晶清屏函数
//
//参数:无
//
//返回:无
//
//创建时间:2010年10月24日0:04:32
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/
void Lcd_Clear(void)
{
Write_LcdCmd(0x34); //扩充指令操作
Delay_ms(10);
Write_LcdCmd(0x30); //基本指令操作
Delay_ms(10);
Write_LcdCmd(0x01); //清屏
Delay_ms(10);
}
/******************************************************************************/
//函数名:Lcd_Int()
//
//说明:液晶初始化函数
//
//参数:无
//
//返回:无
//
//创建时间:2010年10月23日23:59:26
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/
void Lcd_Int(void)
{
LCD_CMDOut; //液晶控制端口设置为输出
Delay_ms(500);
Write_LcdCmd(0x30);
Delay_ms(5);
Write_LcdCmd(0x02);
Delay_ms(5);
Write_LcdCmd(0x0c);
Delay_ms(5);
Write_LcdCmd(0x01);
Delay_ms(5);
Write_LcdCmd(0x06);
Delay_ms(5);
Write_LcdCmd(0x80);
Delay_ms(5);
}
/******************************************************************************/
//函数名:Lcd_DisPos()
//
//说明:液晶显示字符位置设置函数
//
//参数:x 显示位置的横坐标
// y 显示位置的纵坐标
//
//返回:无
//
//创建时间:2010年10月24日14:53:47
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/
void Lcd_DisPos(U8 x ,U8 y)
{
U8 Position;
if(x == 1)
{
x = 0x80;
}
else if(x == 2)
{
x = 0x90;
}
else if(x == 3)
{
x = 0x88;
}
else if(x == 4)
{
x = 0x98;
}
Position = x + y;
Write_LcdCmd(Position);
}
/******************************************************************************/
//函数名:Lcd_DisWord()
//
//说明:液晶显示字符串函数
//
//参数:字符串指针头
//
//返回:无
//
//创建时间:2010年10月24日14:58:38
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/
void Lcd_DisWord(U8 Word[])
{
U8 num = 0;
while(Word[num])
{
Write_LcdData(Word[num++]);
}
}
/******************************************************************************/
//函数名:LcdDis_Picture()
//
//说明:液晶显示图片128*64
//
//参数:图像数据指针头
//
//返回:无
//
//创建时间:2010年10月24日0:13:22
//
//修改时间:
//
//创建人员:Dewey
//
//版本:第一版
//
/******************************************************************************/
void LcdDis_Picture(const U8 *bmp)
{
U8 i, j;
Write_LcdCmd(0x34); //写数据,关闭图形显示
for (i = 0; i < 32; i++) //32行(上半屏)
{
Write_LcdCmd(0x80 + i); //先写入Y坐标值
Write_LcdCmd(0x80); //写入X坐标值
for (j = 0; j < 16; j++)
Write_LcdData(*bmp++);
}
for (i = 0; i < 32; i++)
{
Write_LcdCmd(0x80 + i); //先写入Y坐标值
Write_LcdCmd(0x88); //写入X坐标值
for (j = 0; j < 16; j++)
Write_LcdData(*bmp++);
}
Write_LcdCmd(0x36); //写完数据,开图形显示
Write_LcdCmd(0x30); //回到基本指令集
}
#endif