📄 lcd.c.txt
字号:
#include <INTRINS.H>
#include <ABSACC.H>
//定义背光控制信号
sbit LCD_BL = P1^4;
/*
函数:LcdLightOn()
功能:点亮背光灯
*/
void LcdLightOn()
{
LCD_BL = 1;
}
/*
函数:LcdLightOff()
功能:熄灭背光灯
*/
void LcdLightOff()
{
LCD_BL = 0;
}
/*
函数:LcdGetBF()
功能:读出状态位BF
返回:
BF=1,表示忙,不可进行任何操作
BF=0,表示不忙,可以进行正常操作
*/
bit LcdGetBF()
{
unsigned char dat;
dat = XBYTE[0xD002]; //XBYTE的定义见<ABSACC.H>
return (bit)(dat & 0x80);
}
/*
函数:LcdWriteCmd()
功能:向LCD发送命令
参数:
cmd:命令字,详见器件的数据手册
*/
void LcdWriteCmd(unsigned char cmd)
{
while ( LcdGetBF() ); //忙则等一周期
XBYTE[0xD000] = cmd;
}
/*
函数:LcdWriteDat()
功能:向LCD写入数据
参数:dat,要写入的数据
说明:目标地址由地址计数器AC隐含指定,写完后AC自动加1
*/
void LcdWriteDat(unsigned char dat)
{
while ( LcdGetBF() );
XBYTE[0xD001] = dat;
}
/*
函数:LcdSetAC()
功能:设置DDRAM(显示数据RAM)的AC(地址计数器)值
参数:
ac:地址计数器值,范围0~63
*/
void LcdSetAC(unsigned char ac)
{
ac &= 0x3F;
ac |= 0x80;
LcdWriteCmd(ac);
}
/*
函数:LcdClear()
功能:LCD清屏,并使光标回到0
*/
void LcdClear()
{
LcdWriteCmd(0x01); //清屏命令
LcdCursor = 0;
}
/*
函数:LcdDelay()
功能:延时(t*100)个机器周期
*/
void LcdDelay(unsigned char t)
{
unsigned char n;
do
{
n = 49;
while ( --n != 0 );
} while ( --t != 0 );
}
/*
函数:LcdInit()
功能:LCD初始化
*/
void LcdInit()
{
LcdWriteCmd(0x30); //设置基本指令集
LcdDelay(3);
LcdWriteCmd(0x30); //设置基本指令集(需要再执行一次)
LcdDelay(1);
LcdWriteCmd(0x0C); //开启显示
LcdDelay(3);
LcdClear(); //清屏
LcdDelay(250);
LcdWriteCmd(0x06); //设置进入点
LcdDelay(10);
LcdPuts("电压/V");
( 调整AC值至第三行;)
LcdPuts("温度/oC");
}
/*
函数:LcdCheckAC()
功能:根据光标位置调整AC
*/
void LcdCheckAC()
{
switch ( LcdCursor )
{
case 16:
LcdSetAC(16);
break;
case 32:
LcdSetAC(8);
break;
case 48:
LcdSetAC(24);
break;
case 64:
LcdCursor = 0;
LcdSetAC(0);
break;
default:
break;
}
}
/*
函数:LcdPutChar()
功能:显示ASCII码
参数:
c为可显示的ASCII码(0x20~0x7F)
*/
void LcdPutChar(unsigned char c)
{
LcdWriteDat(c);
LcdCursor++;
LcdCheckAC();
}
/*
函数:LcdPuts()
功能:显示字符串
参数:
*s:要显示的字符串(可同时包含ASCII码和汉字)
*/
void LcdPuts(unsigned char *s)
{
unsigned char ch, cl;
for (;;)
{
ch = *s++;
if ( ch == '\0' ) break;
if ( ch < 0x80 )
{
LcdPutChar(ch);
}
else
{
cl = *s++;
LcdPutHZ(ch,cl);
}
}
}
函数:LcdClearme
功能:自定义的LCD清除屏幕上某一行的内容
参数:ac为电压或温度在LCD屏上所在行的AC值 ???acv=16 act=48???
void LcdClearme(unsigned char ac)
{ unsigned char i;
LcdSetAC(ac);
for(i=0;i<16;i++)
LcdPutChar(' ');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -