📄 lcd1602_.h
字号:
else
write(0,0x08);
}
else if(!strcmp(str,"EN_BLINK")) //enable blink cursor
{
blinkEn=1;
if(dispEn)
if(cursorEn)
write(0,0x0F);
else
write(0,0x0D);
else
if(cursorEn)
write(0,0x0B);
else
write(0,0x09);
}
else if(!strcmp(str,"DIS_BLINK")) //disable blink cursor
{
blinkEn=0;
if(dispEn)
if(cursorEn)
write(0,0x0E);
else
write(0,0x0C);
else
if(cursorEn)
write(0,0x0A);
else
write(0,0x08);
}
/*--------------------------------------------------
dispEn & cursorEn & blinkEn共用一个命令设置
--------------------------------------------------*/
else if(!strcmp(str,"RIGHT_SCR")) //right shift screen
write(0,0x1c);
else if(!strcmp(str,"LEFT_SCR")) //left shift screen
write(0,0x18);
else if(!strcmp(str,"RIGHT_CURS")) //right shift cursor
write(0,0x14);
else if(!strcmp(str,"LEFT_CURS")) //left shift cursor
write(0,0x10);
}
/*--------------------------------------------------------------------
函数名称:LCD1602初始化
函数功能:
注意事项:
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void LCD1602_init(void)
{
delay50ms(1);
CLR_D7;
CLR_D6;
SET_D5;
SET_D4;
DELAY();
CLR_RS;
DELAY();
CLR_RW;
SET_E;
DELAY();
CLR_E;
delay50us(200);
SET_E;
DELAY();
CLR_E;
delay50us(200);
SET_E;
DELAY();
CLR_E;
delay50us(200);
CLR_D7;
CLR_D6;
SET_D5;
CLR_D4;
DELAY();
SET_E;
DELAY();
CLR_E;
DELAY();
LCD1602_setCmd("OPEN_LCD");
LCD1602_setCmd("CLR_SCR");
LCD1602_setCmd("INC_AC");
//LCD1602_setCmd("OPEN_CURS");
//LCD1602_setCmd("GO_HOME");
}
/*--------------------------------------------------------------------
宏名称:设置AC值
宏功能:设置AC值啦
注意事项:
提示说明:
输 入:
返 回:无
--------------------------------------------------------------------*/
#define LCD1602_setAC(adr) write(0,adr)
/*--------------------------------------------------------------------
函数名称:输出一个字符
函数功能:
注意事项:对于高速CPU,应加延时,好像是废话~
提示说明:调用LCD1602_putc(0x80,'A'),则在第一行第一个字符处输出'A'
输 入:
返 回:无
--------------------------------------------------------------------*/
void LCD1602_putc(uint8 adr,uint8 ch)
{
write(0,adr);
write(1,ch);
}
/*--------------------------------------------------------------------
函数名称:输出一个字符串
函数功能:
注意事项:无
提示说明:调用LCD1602_puts(0x80,"waveShare"),则从第一行第一个位置开始输出"waveShare"
输 入:
返 回:无
--------------------------------------------------------------------*/
void LCD1602_puts(uint8 startAdr,uint8 *str)
{
/*
while(*str)
{
LCD1602_putc(addr++,*str++);
}
*/
//LCD1602_setCmd("AC++");
write(0,startAdr);
while(*str)
write(1,*str++);
}
/*--------------------------------------------------------------------
函数名称:输出一个数值(带0)
函数功能:有时候你可能不是需要"123",而是需要"00123"吧
注意事项:无
提示说明:调用LCD1602_putd0(0x8F,123,5),则从0x8B开始到0X8F输出"00123"
输 入:
返 回:无
--------------------------------------------------------------------*/
//for example:dat=123,length=6,output 000123
void LCD1602_putd0(uint8 endAdr,uint32 dat,uint8 length)
{
sint8 i;
speaData(dat,length);
//LCD1602_setCmd("AC++");
write(0,endAdr-length+1);
for(i=length-1;i>=0;i--)
write(1,dataElem[i]+0x30);
}
/*--------------------------------------------------------------------
函数名称:输出一个数值(不带0)
函数功能:
注意事项:无
提示说明:调用LCD1602_putd(0x8F,123,5),则从0x8B开始到0X8F输出" 123"
输 入:
返 回:无
--------------------------------------------------------------------*/
void LCD1602_putd(uint8 endAdr,uint32 dat,uint8 length)
{
sint8 i;
sint8 effectLen;
if(dat>999999)
effectLen=7;
else if(dat>99999)
effectLen=6;
else if(dat>9999)
effectLen=5;
else if(dat>999)
effectLen=4;
else if(dat>99)
effectLen=3;
else if(dat>9)
effectLen=2;
else
effectLen=1;
speaData(dat,effectLen);
//LCD1602_setCmd("AC++");
if(length>effectLen)
{
write(0,endAdr-length+1);
for(i=length-effectLen-1;i>=0;i--)
write(1,' ');
}
for(i=effectLen-1;i>=0;i--)
{
if(i==0||dataElem[i])
{
write(0,endAdr-i);
for(;i>=0;i--)
write(1,dataElem[i]+0x30);
}
}
}
/*--------------------------------------------------------------------
函数名称:输出一个混合串
函数功能:
注意事项:最好不要加载这个函数,因为它将占用将近1K空间
提示说明:调用LCD1602_sprintf(0x8F,12AB,4),则从0x8B开始到0X8F输出"12ABok"
输 入:
返 回:无
--------------------------------------------------------------------*/
//void LCD1602_sprintf(uint8 startAdr,uint32 dat,uint8 length)
//{
// /* clear the display area first here! */
// //LCD1602_puts(addr," ");
// sprintf(t,"%luok",dat);
// //LCD1602_setCmd("AC++");
// LCD1602_puts(addr,t);
//}
/********************************************************
* 函数说明:数值显示函数(HEX) *
* 输入: 需要显示的数字(Num) *
********************************************************/
void LCDDisplayNum(uint8 adr,long Num)
{
char showtext[8]="0";
unsigned long temp;
unsigned int a1,a2,a3,a4,a5,a6,a7,a8;
char nn;
char a;
temp=Num;
a1=temp/10000000;
a2=temp/1000000-a1*10;
a3=temp/100000-(a2*10+a1*100);
a4=temp/10000-(a3*10+a2*100+a1*1000);
a5=temp/1000-(a4*10+a3*100+a2*1000+a1*10000);
a6=temp/100-(a5*10+a4*100+a3*1000+a2*10000+a1*100000);
a7=temp/10-(a6*10+a5*100+a4*1000+a3*10000+a2*100000+a1*1000000);
a8=temp-(a7*10+a6*100+a5*1000+a4*10000+a3*100000+a2*1000000+a1*10000000);
if (a1>0)nn=8;
else if (a2>0)nn=7;
else if (a3>0)nn=6;
else if (a4>0)nn=5;
else if (a5>0)nn=4;
else if (a6>0)nn=3;
else if (a7>0)nn=2;
else if (a8>0)nn=1;
else nn=0;
switch(nn){
case 8:
showtext[0]=a1+0x30;
showtext[1]=a2+0x30;
showtext[2]=a3+0x30;
showtext[3]=a4+0x30;
showtext[4]=a5+0x30;
showtext[5]=a6+0x30;
showtext[6]=a7+0x30;
showtext[7]=a8+0x30;
for(a=0;a<8;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
case 7:
showtext[0]=a2+0x30;
showtext[1]=a3+0x30;
showtext[2]=a4+0x30;
showtext[3]=a5+0x30;
showtext[4]=a6+0x30;
showtext[5]=a7+0x30;
showtext[6]=a8+0x30;
for(a=0;a<7;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
case 6:
showtext[0]=a3+0x30;
showtext[1]=a4+0x30;
showtext[2]=a5+0x30;
showtext[3]=a6+0x30;
showtext[4]=a7+0x30;
showtext[5]=a8+0x30;
for(a=0;a<6;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
case 5:
showtext[0]=a4+0x30;
showtext[1]=a5+0x30;
showtext[2]=a6+0x30;
showtext[3]=a7+0x30;
showtext[4]=a8+0x30;
for(a=0;a<5;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
case 4:
showtext[0]=a5+0x30;
showtext[1]=a6+0x30;
showtext[2]=a7+0x30;
showtext[3]=a8+0x30;
for(a=0;a<4;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
case 3:
showtext[0]=a6+0x30;
showtext[1]=a7+0x30;
showtext[2]=a8+0x30;
showtext[3]=0x20;
for(a=0;a<3;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
case 2:
showtext[0]=a7+0x30;
showtext[1]=a8+0x30;
showtext[2]=0x20;
showtext[3]=0x20;
for(a=0;a<2;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
case 1:
showtext[0]=a8+0x30;
showtext[1]=0x20;
showtext[2]=0x20;
showtext[3]=0x20;
for(a=0;a<1;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
case 0:
showtext[0]=0x30;
showtext[1]=0x20;
showtext[2]=0x20;
showtext[3]=0x20;
for(a=0;a<4;a++)
{
busy();
write(0,adr++);
write(1,showtext[a]);
}
break;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -