首页技术lcd1602程序(lcd1602例程)

lcd1602程序(lcd1602例程)

编程之家2024-02-04113次浏览

一、LCD1602怎么显示中文啊

【1】1602液晶是字符型液晶,总共有2行,每行16个字符。

lcd1602程序(lcd1602例程)

每个字符有效的可显示字体是5*8点阵字体。

所以通常无法显示中文。中文的显示必须选择图形点阵型液晶。

【2】特别地:是指,显示“年月日”,之类的简单的汉字吧?

最多支持8个CGRAM字符。可以自己做。调用字模代码0-7。

如:“年”的CGRAM单元数据为:

0FH,09H,0FH,09H,0FH,09H,13H,00H。这8个字节写入CGRAM单元00H-07H。

lcd1602程序(lcd1602例程)

调用字符代码0。可以看到中文“年”。

【3】具体代码,下载相关液晶点阵模块的资料,附带程序能看到一些例程。

二、万年历51单片机LCD1602不显示是什么原因

给你一个显示的例程,你看看你自己的程序或硬件错在何处。

#defineLCD1602_FLAG

#defineLCD1602_PORTP0

#include<reg51.h>

lcd1602程序(lcd1602例程)

#include<stddef.h>

#defineucharunsignedchar

sbitlcd1602_rs=P2^0;

sbitlcd1602_e=P2^2;

sbitlcd1602_rw=P2^1;

sbitlcd1602_busy=P0^7;

ucharstr[]="ThisisKeyTest";

ucharkeyval,keystr[16];

voiddelay(uchara)

{

uchari;

while(a--)for(i=0;i<120;i++);

}

/*

************************************

*函数名称:lcd1602_CheckBusy()

*函数功能:状态查询

************************************

*/

voidlcd1602_CheckBusy()

{

do

{

lcd1602_busy=1;

lcd1602_rs=0;

lcd1602_rw=1;

lcd1602_e=0;

lcd1602_e=1;

}

while(lcd1602_busy);

}

/*

***************************************

*函数名称:lcd1602_WriteCmd()

*函数功能:写命令

*入口参数:命令字

*出口参数:无

***************************************

*/

voidlcd1602_WriteCmd(constucharcmd)

{

lcd1602_CheckBusy();

lcd1602_rs=0;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=cmd;

lcd1602_e=0;

}

/*

*******************************************

*函数名称:lcd1602_WriteData()

*函数功能:写数据

*入口参数:c--待写数据

*出口参数:无

*********************************************

*/

voidlcd1602_WriteData(constucharc)

{

lcd1602_CheckBusy();

lcd1602_rs=1;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=c;

lcd1602_e=0;

}

/*

***********************************************

*函数名称:lcd1602_Init()

*函数功能:初始化LCD

*入口参数:无

*出口参数:无

***********************************************

*/

voidlcd1602_Init()

{

lcd1602_WriteCmd(0x38);//显示模式为8位2行5*7点阵

lcd1602_WriteCmd(0x0c);//displayenable,flagenable,flashenable,

lcd1602_WriteCmd(0x06);//flagmovetoright,screendon'tmove

lcd1602_WriteCmd(0x01);//clearscreen

}

/*

************************************************

*函数名称:lcd1602_Display()

*函数功能:字符显示

*入口参数:ptr--字符或字符串指针

*出口参数:无

*说明:用户可通过以下方式来调用:

*1)lcd1602_Display("Hello,world!");

*2)INT8U存储类型txt[]="要显示的字符串";

*或者INT8U存储类型txt[]={'t','x','t',..,'\0'};

*INT8U*ptr;

*ptr=&txt;

*lcd1602_Display(ptr);

*或lcd1602_Display(txt);

*或lcd1602_Display(&txt);

************************************************

*/

voidlcd1602_Display(constuchar*ptr,ucharline)

{

uchardatai=0;

uchar*dataq;

q=ptr;

switch(line)

{

case0:

lcd1602_WriteCmd(0x80);

while(q!=NULL&&(*q!='\0')&&i<16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

break;

case1:

lcd1602_WriteCmd(0xc0);

while(q!=NULL&&(*q!='\0')&&i<16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

break;

}

}

ucharkbscan(void)

{

unsignedcharsccode,recode;

P3=0x0f;//发0扫描,列线输入

if((P3&0x0f)!=0x0f)//有键按下

{

delay(20);//延时去抖动

if((P3&0x0f)!=0x0f)

{

sccode=0xef;//逐行扫描初值

while((sccode&0x01)!=0)

{

P3=sccode;

if((P3&0x0f)!=0x0f)

{

recode=(P3&0x0f)|0xf0;

while((P3&0x0f)!=0x0f);//等待键抬起

return((~sccode)+(~recode));

}

else

sccode=(sccode<<1)|0x01;

}

}

}

return0;//无键按下,返回0

}

uchargetkey(void)

{

ucharkey;

key=kbscan();

if(key==0){keyval=0xff;return(0);}

switch(key)

{

case0x11:keyval=7;break;

case0x12:keyval=4;break;

case0x14:keyval=1;break;

case0x18:keyval=10;break;

case0x21:keyval=8;break;

case0x22:keyval=5;break;

case0x24:keyval=2;break;

case0x28:keyval=0;break;

case0x41:keyval=9;break;

case0x42:keyval=6;break;

case0x44:keyval=3;break;

case0x48:keyval=11;break;

case0x81:keyval=12;break;

case0x82:keyval=13;break;

case0x84:keyval=14;break;

case0x88:keyval=15;break;

default:keyval=0xff;break;

}

if(keyval!=0xff)return(1);

elsereturn(0);

}

main()

{

ucharnum;

lcd1602_Init();

lcd1602_Display(str,0);

while(1)

{

if(getkey())

{

if(keyval<10)keystr[num]=keyval+0x30;

elsekeystr[num]=keyval-10+'A';

lcd1602_Display(keystr,1);

num++;

num%=16;

}

}

}

mysql分页(MySQL的三种分页方式)marquee 参数(HTML marquee标签参数怎么使用)