📄 lcd.c
字号:
#include "iic.h"
#define EN() {P2=0xa0;}
#define DisEN() {P2=0xf0;}
unsigned char code Line[4]={0x80,0x90,0x88,0x98};
//////////////
void DelayS()
{
unsigned char xdata i;
i = 200; //1f
while(i--);
}
void WriteCmd(unsigned char ch)
{
DelayS();
//EN = 0;
DisEN();
LCD_RS = 0;
LCD_RW = 0;
_nop_();
_nop_();
//EN = 1;
EN();
P0 = ch;
_nop_();
_nop_();
_nop_();
//EN = 0;
DisEN();
}
void WriteData(unsigned char dat)
{
DelayS();
//EN = 0;
DisEN();
LCD_RS = 1;
LCD_RW = 0;
_nop_();
_nop_();
//EN = 1;
EN();
P0 = dat;
_nop_();
_nop_();
_nop_();
//EN = 0;
DisEN();
LCD_RS = 0;
}
void LcdInit()
{
if(LcdRE==1)
{//扩展指令集状态,先退出睡眠状态
WriteCmd(0x0c);//退出睡眠模式
WriteCmd(0x30);//基本指令集
LcdRE=0;
}
WriteCmd(0x0C);//显示on,游标、反白oFF
WriteCmd(0x01);//清除显示
WriteCmd(0x02);//地址归位
WriteCmd(0x80);
}
void LcdCN(unsigned char x,unsigned char y,const char datH,const unsigned char datL)
{//汉字显示
x=Line[x];
x+=y;
WriteCmd(x);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
WriteData(datH);
WriteData(datL);
}
void LcdCnString(unsigned char x,unsigned char y,const char Head[])
{//汉字串
//x:0-3,y:0-7
unsigned char *ptr;
ptr=Head;
while(1)
{
LcdCN(x,y,*ptr,*(ptr+1));
y+=1;
ptr=ptr+2;
if(*ptr == NULL)
break;
}
}
void LcdChar(unsigned char x,unsigned char y,const char dat)
{//英文显示
//x:0-3,y:0-7
/* switch(x)
{
case 0:
x=0x80;
break;
case 1:
x=0x90;
break;
case 2:
x=0x88;
break;
default:
x=0x98;
}*/
x=Line[x];
x+=y;
WriteCmd(x);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
WriteData(dat);
}
void LcdAddChar(unsigned char dat)
{
//追加英文字母
WriteData(dat);
}
void LcdCur(unsigned char x,unsigned char y)
{
//x:0~3,y:0~7
x=Line[x];
x=x+y;
WriteCmd(x);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
WriteCmd(0x0f);//开下标
}
void LcdCurOff()
{
WriteCmd(0x0C);
}
void LcdPowerOn()
{
LcdPowerFlag=1;
}
void LcdPowerOff()
{
LcdPowerFlag=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -