📄 lcd.c
字号:
/************************************************/
/*** this program depends on the LM044L ********/
/*** make by:liaowenbing ********/
/*** make date:2006-12-22 ********/
/*** check date:2006-12-22 ********/
/************************************************/
#define _UseKeil_
#define _Lcd_LM044L
#include"lcd.h"
void LcdDelay2us()
{
LcdDelay1us();
}
static void LcdWaitFree(void)
{
do
{
LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
LcdMAC_SetBitData(LcdEN , cnLcdENEnable);
LcdMAC_SetDDR(LcdDA , cnAllPortIn);
LcdDelay2us();
}while((LcdMAC_GetData(LcdDA)&cnLcdBusyTestData) != cnLcdFreeData);
LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
LcdMAC_SetDDR(LcdDA , cnAllPortOut);
}
/**
***函数名称:LcdWriteCommand
***说明:写命令前面自己已经等待了lcd为空闲
**/
void LcdWriteCommand(unsigned char cmd)
{
LcdWaitFree();
//LcdMAC_SetDDR(LcdDA , cnAllPortOut);
LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
LcdMAC_SetBitData(LcdRW , cnLcdRWWrite);
LcdMAC_SetBitData(LcdEN , cnLcdENEnable);
LcdMAC_SetData(LcdDA , cmd);
LcdDelay2us();
LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
}
/**
***函数名称:LcdWriteData
***说明:调用前外部函数必须判断lcd状态是否空闲
**/
void LcdWriteData(unsigned char datavalue)
{
LcdWaitFree();
//LcdMAC_SetDDR(LcdDA , cnAllPortOut);
LcdMAC_SetBitData(LcdRS , cnLcdRSData);
LcdMAC_SetBitData(LcdRW , cnLcdRWWrite);
LcdMAC_SetBitData(LcdEN , cnLcdENEnable);
LcdMAC_SetData(LcdDA , datavalue);
LcdDelay2us();
LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
}
/**
***函数名称:LcdInit
***功能说明:清除显示,并地址归位,光标不显示
**/
void LcdInit(void)
{
LcdMAC_SetBitDDR(LcdRS , cnBitPortOut);
LcdMAC_SetBitDDR(LcdRW , cnBitPortOut);
LcdMAC_SetBitDDR(LcdEN , cnBitPortOut);
LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
LcdMAC_SetDDR(LcdDA , cnAllPortOut);
LcdWriteCommand(cmLcdCls); //显示清屏
LcdWriteCommand(cmLcdSetVisible); //显示开
}
/**
***函数名称:LcdSetXY
*** 功 能 : 设置LCD显示的起始位置
***输入参数:x、y : 显示字符串的位置, 0 <= X < cnLcdRowMaxCount,0 <= Y < cnLcdRowCount
*** 说 明 :LCD第一行显示寄存器地址:cnLcdAddrRow0 += cnLcdRowMaxCount,
*** LCD第二行显示寄存器地址:cnLcdAddrRow1 += cnLcdRowMaxCount
*** LCD第三行显示寄存器地址:cnLcdAddrRow2 += cnLcdRowMaxCount
*** LCD第四行显示寄存器地址:cnLcdAddrRow3 += cnLcdRowMaxCount
*** 注 意 : 只用在4行范围内的显示,且要看是中文还是英文的显示
**/
void LcdSetXY( unsigned char x, unsigned char y )
{
unsigned char address;
switch(y)
{
case 0:
{
address = cnLcdAddrRow0 + x;
break;
}
case 1:
{
address = cnLcdAddrRow1 + x;
break;
}
case 2:
{
address = cnLcdAddrRow2 + x;
break;
}
case 3:
{
address = cnLcdAddrRow3 + x;
break;
}
default:
{
address = cnLcdAddrRow0 + x;
break;
}
}
LcdWriteCommand( address );
}
/**
***函数名称:LcdWriteString
*** 说 明 :连续写完一个字符串(用指针的时候务必用0结尾),自动换行调整行序功能
*** 注 意 :仅在中文显示位置
**/
void LcdWriteString(unsigned char x,unsigned char y,unsigned char *s)
{
unsigned char thex,they;
LcdSetXY( x, y );
thex = x + x; //只在中文字显示的时候
they = y;
while(*s)
{
LcdWriteData( *s);
s++;
if(*s)
{
thex++;
if(thex >= cnLcdRowMaxCount)
{
thex = 0;
they++;
if(they >= cnLcdRowCount)
they = 0;
LcdSetXY( thex, they );
}
}
}
}
/**
***函数名称:LcdWriteStr
***说明:此函数只做”在当前位置显示完一个字符串用,不做位置调整等操作
**/
void LcdWriteStr(unsigned char *s)
{
while(*s != '\0')
{
//LcdWriteData( *s++);
LcdWriteData( *s);
s++;
}
}
/**
***函数名称:LcdWriteCountStr
***说明:此函数也只显示指定个数个数据,并不做位置和字符串结尾显示
**/
void LcdWriteCountStr(unsigned char count,unsigned char *s)
{
while(count--)
{
//LcdWriteData( *s++);
LcdWriteData( *s);
s++;
}
}
/**
***函数名称:LcdReadData
*** 说 明 :读出当前地址的值
**/
unsigned char LcdReadData(void)
{
// unsigned char ret;
// LcdMAC_SetData(LcdEN , cnLcdENDisable);
// LcdMAC_SetData(LcdRS , cnLcdRSCmd);
// LcdMAC_SetData(LcdRW , cnLcdRWRead);
// LcdMAC_SetData(LcdEN , cnLcdENEnable);
// LcdMAC_SetDDR(LcdDA , cnAllPortIn);
// LcdDelay2us();
// io_SetDir(LCD_Date_DDr,PortIn); //设置输入
// io_SetBit(RS,1);
// io_SetBit(RW,1);
// io_SetBit(EN,1);
// macLcdDelay1Us();
// ret = LCD_Data;
// io_SetBit(EN,0);
// io_SetDir(LCD_Date_DDr,PortOut); //设置输出
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -