📄 lcd1602.h
字号:
#ifndef lcd1602_h //
#include<absacc.H> //包含外部数据传送指令的宏定义 //引用XBYTE[]相当于用汇编中的MOVX指令
#define write_lcd_addr XBYTE[0xfceb] // 1111 1100 1110 1100
#define write_lcd_data XBYTE[0xfdeb] // 1111 1101 1110 1100
#define rd_lcd_busy XBYTE[0xfeeb] // 1111 1110 1110 1100 sbit RS=P2^0;sbit RW=P2^1;
//
sbit BF=ACC^7; //忙标志位
//
void lcd_delay() //
{unsigned char a; //
for(a=100;a>0;a--); //
} //
//
wait() // 准备写指令
{wait:lcd_delay(); // 等待液晶响应
ACC=rd_lcd_busy ; // 地址的低位第8位向p17口写1,并读回其状态
if(BF==1)goto wait; // 判断液晶是否忙
} //
/***************************************************************************************************************/
/***********************液晶初使化******************************************************************************
//
void lcd_ready_nclr(unsigned char a,unsigned char b,unsigned char c) //
{ //
wait(); // a=0:无光标
write_lcd_addr=0x38; // a=1:光标闪烁
wait(); // b=0:地址自减
write_lcd_addr=a*0x0f+!a*0x0c; // b=1:地址自加
if(c==0) // c=0:不移屏
{ // c=1:输入字符后左移屏
wait(); // 0x0c 无光标; 0x0f 光标闪烁
write_lcd_addr=b*0x06+!b*0x04; // 0x04 地址减; 0x06 地址加
} //
if(c==1) //
{ //
wait(); //
write_lcd_addr=b*0x07+!b*0x05; //
} //
} //
/***************************************************************************************************************/
/************************液晶初使化*****************************************************************************/
//
void lcd_ready(unsigned char a,unsigned char b,unsigned char c) //
{ // a=0:无光标
wait(); // a=1:光标闪烁
write_lcd_addr=0x01; // b=0:地址自减
wait(); // b=1:地址自加
write_lcd_addr=0x38; // c=0:不移屏
wait(); // c=1:输入字符后左移屏
write_lcd_addr=a*0x0f+!a*0x0c; //
if(c==0) //
{ //
wait(); // 0x0c 无光标; 0x0f 光标闪烁
write_lcd_addr=b*0x06+!b*0x04; // 0x04 地址减; 0x06 地址加
} //
if(c==1) //
{ //
wait(); //
write_lcd_addr=b*0x07+!b*0x05; //
} //
} //
/***************************************************************************************************************/
/***********************字符定位********************************************************************************/
//
void begin(unsigned char x,unsigned char y) //
{ //
if(x==1) //
{ //
wait(); //
write_lcd_addr=0x80+y; //第一行起始数据地址
} //
if(x==2) //
{ //
wait(); //
write_lcd_addr=0xc0+y; //第二行起始数据地址
} //
} //
/***************************************************************************************************************/
/************************带定位的字符串输出函数*****************************************************************/
//
void addr_zfc_print(unsigned char x,unsigned char y,unsigned char zf[]) //
{ //
unsigned char i=0; //
begin(x,y); //
while(zf[i]!='\0') //
{ //
wait(); //
write_lcd_data=zf[i++]; //
} //
} //
/***************************************************************************************************************/
/***********************不带定位的字符串输出函数****************************************************************
//
void naddr_zfc_print(unsigned char zf[]) //
{ //
unsigned char i=0; //
while(zf[i]!='\0') //
{ //
wait(); //
write_lcd_data=zf[i++]; //
} //
} //
/***************************************************************************************************************/
/***********************不带定位的字符输出函数****************************************************************/
//
void naddr_zf_print(unsigned char zf) //
{ //
wait(); //
write_lcd_data=zf; //
} //
/***************************************************************************************************************/
/***********************不带定位的数据输出函数******************************************************************/
//
void naddr_sj_print(float f) //
{ //
unsigned char zf[16]; //
unsigned char p=0,i=1,s=0; //
long n; //
n=f*10000; //
while(n!=0) //
{ //
if(n%10>=0.00005||s>3) //
p=1; //
if(p==1) //
{ //
zf[i++]=n%10+'0'; //
if(s==3) //
zf[i++]='.'; //
} //
n=n/10; //
s++; //
} //
i--; //
while(zf[i]!='\0') //
{ //
wait(); //
write_lcd_data=zf[i--]; //
} //
} //
/***************************************************************************************************************/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -