📄 lcm1602.c
字号:
#include <reg52.h>
#include <intrins.h>
sbit RSPIN = P1^0; //数据/命令选择端
sbit RWPIN = P1^1; //读写控制信号
sbit EPIN = P1^2; //使能信号
unsigned char XPOS,YPOS;
void delay1(unsigned int t) //延时
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
void lcdwaitidle(void) //读写检测.对控制器每次进行读写操作之前,都必须进行,
{ P0=0xff;
RSPIN=0;
RWPIN=1;
EPIN=1;
while((P0&0x80)==0x80); //确保STA7 为0
EPIN=0;
}
void lcdwcn(unsigned char c) //不判忙直接写指令
{ RSPIN=0;
RWPIN=0;
P0=c;
EPIN=1;
_nop_();
EPIN=0;
}
void lcdwc(unsigned char c) //判忙后写指令
{ lcdwaitidle();
lcdwcn(c);
}
void lcdwd(unsigned char d) //写数据
{ lcdwaitidle();
RSPIN=1;
RWPIN=0;
P0=d;
EPIN=1;
_nop_();
EPIN=0;
}
void lcdpos(void) //确定当前光标位置
{ XPOS&=0x0f;
YPOS&=0x03;
if(YPOS==0x00)
lcdwc(XPOS|0x80);
else if(YPOS==0x01)
lcdwc((XPOS+0x40)|0x80);
}
void lcdreset() //LCM初始化
{ EPIN=0;
delay1(150); lcdwcn(0x38); //写指令38H
delay1(50); lcdwcn(0x38); //写指令38H
delay1(50); lcdwcn(0x38); //写指令38H
lcdwc(0x38); //显示模式设置,设置16X2 显示,5X7 点阵,8 位数据接口
lcdwc(0x08); //显示关闭
lcdwc(0x01); //显示清屏
lcdwc(0x06); //显示光标移动设置
lcdwc(0x0c); //显示开及光标设置
}
void lcdfill(unsigned char n) //向1602写一满屏字符
{
for(YPOS=0;YPOS<2;YPOS++)
for(XPOS=0;XPOS<16;XPOS++)
{ lcdpos();
lcdwd(n); }
}
void lcdchar(unsigned char x,unsigned char y,unsigned char ch) //在1602指定位置写一个字符
{
XPOS=x; YPOS=y;
lcdpos();
lcdwd(ch);
}
void lcdwda(unsigned char x,unsigned char y,unsigned char *s) //在1602指定位置写一行字符串
{ YPOS=y;
for(XPOS=x;XPOS<16;XPOS++)
{ lcdpos();
if (*s=='\0') return;
lcdwd(*s);
s++;
//delay1(5000);//(400);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -