📄 ym1602c.txt
字号:
51单片机控制YM1602C液晶显示模块的子程序,P2口接1602C数据端口,其控制位如下所示
/* LCD控制位 */
sbit RS=P3^5;
sbit RW=P3^6;
sbit E=P3^7;
// YM1602C程序 //
/*init_lcd() */
/*功能:lcd初始化 */
void init_lcd(void)
{
delay5Ms();
delay5Ms();
delay5Ms();
P2=0x00;
P3=0x00;
lcdwritecmd(0x38,0); /* 2行8位5×7点阵 */
lcdwritecmd(0x38,0); /* 设置3次,不查询忙位 */
lcdwritecmd(0x38,0);
lcdwritecmd(0x38,1);
lcdwritecmd(0x08,1); /* 关显示 */
lcdwritecmd(0x01,1); /* 清屏 */
lcdwritecmd(0x06,1); /* 光标自动右移 */
lcdwritecmd(0x0f,1); /* 开显示,有光标且闪烁 */
}
/*lcdwritecmd() */
/*功能:写LCD控制字 */
void lcdwritecmd(uchar command,uchar wait_en)
{
if(wait_en)wait_enable();
P2=command;
RS=0;
RW=0;
E=0;
E=1;
P2=command;
E=0;
}
/*lcdwritedata() */
/*功能:LCD输出字符 */
void lcdwritedata(uchar charater)
{
wait_enable();
P2=charater;
RS=1;
RW=0;
E=0;
E=1;
E=0;
}
/*wait_enable() */
/*功能:查询LCD是否空闲 */
void wait_enable(void)
{
P2=0xff;
RS=0;
RW=1;
E=1;
while(P2&0x80);
E=0;
}
void delay5Ms(void) /* 延时5ms */
{
uint i=500;
while(i--);
}
/*LCD显示字符串 */
/*参数:行号,列号,字符串首地址 */
void writestr(uchar x,uchar y,uchar str[])
{
uchar dis;
uchar *p;
if(x==1)dis=0x80+y-1;
else if(x==2)dis=0xc0+y-1;
lcdwritecmd(dis,1);
for(p=str;(*p!='\n')&&(p<=str+0x0f);p++)lcdwritedata(*p);
}
/*dis() */
/*LCD显示无符号长整型数 */
void dis(uchar x,uchar y,unsigned long string)
{
uchar word[9]={0,0,0,0,0,0,0,0,'\n'};
char k;
for(k=7;k>=0;k--)
{
word[k]=string%10;
string/=10;
}
word[8]='\n';
for(k=7;k>=0;k--)
{
word[k]+=0x30;
}
writestr(x,y,word);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -