1602液晶显示汉字程序Word文档格式.docx

上传人:b****4 文档编号:16905991 上传时间:2022-11-27 格式:DOCX 页数:11 大小:17.26KB
下载 相关 举报
1602液晶显示汉字程序Word文档格式.docx_第1页
第1页 / 共11页
1602液晶显示汉字程序Word文档格式.docx_第2页
第2页 / 共11页
1602液晶显示汉字程序Word文档格式.docx_第3页
第3页 / 共11页
1602液晶显示汉字程序Word文档格式.docx_第4页
第4页 / 共11页
1602液晶显示汉字程序Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

1602液晶显示汉字程序Word文档格式.docx

《1602液晶显示汉字程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《1602液晶显示汉字程序Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

1602液晶显示汉字程序Word文档格式.docx

RW=0;

RS=0;

EN=1;

DB=out_data;

EN=0;

delay(10);

voidOUTD(charout_data)

RS=1;

DB=out_data;

OUTI()是写入指令的函数,OUTD()是写入数据的函数。

如:

左上角第一个5*7的显示数据为:

0x00,0x01,0x81,0x12,0x24,0x41,0x81,0x10

蓝色区域的相应位为1

这样就可以写出全部4个5*7点阵的显示数据了,把它封装在一个数组中,如数组,

hanzi[]={0x00,0x01,0x81,0x12,0x24,0x41,0x81,0x10,

……

之后利用命令:

OUTI(0X40);

64;

i++)

{OUTD(neu[i]);

将这个数组中的数据赋值到1602内部CGRAM中。

完成后,再设置数据在1602上的

显示地址,根据图1的结构,设置好位置,如在第一行第一个字符和第二个字符以及第二行

第一个字符和第二个字符处显示:

Command_out(0x80+0x00);

4;

{data_out(i);

}

Command_out(0x80+0x40);

for(i=4;

8;

{data_out(i);

command_out()的作用是设置显示的起始地址,data_out()的作用是将hanzi[]数组中的16

进制数据发送出去,每一个16进制数字对应之5*7点阵上的每一行内容。

第1行第1个字

符需要8个16进制数据,第1行第2个字符处也需要816进制数据。

还有第2行的两个字

符点阵,这样显示一个汉字需要32个16进制数据。

下面列举一个实例(proteus仿真通过)

//***************************************************************************************

//硬件连接:

1602VDD接5V,VO接地,BL1接5V,BL2接地,8根数据线接P0口,RSRWE分别接P2.0、P2.1、P.4口

#include<

reg52.h>

string.h>

#defineBusy0x80//用于检测LCM状态字中的Busy标识

#defineLCM_DataP0

sbitLCM_RS=P2^0;

//寄存器选择

sbitLCM_RW=P2^1;

//读/写控制

sbitLCM_E=P2^4;

//读/写使能

inti,j;

//自定义字符列表

//=====================================================================================

unsignedcharcharacter0[8]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02},//年

character1[8]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11},//月

character2[8]={0x0f,0x09,0x09,0x09,0x0f,0x09,0x09,0x0f},//日

characterN[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

//日

//==========================================================

//=========================================================

//延时程序

//=======================================================

voidDelay5Ms(void)

unsignedlongintTempCyc=5552;

while(TempCyc--);

voidDelay400Ms(void)

unsignedcharTempCycA=5;

unsignedintTempCycB;

while(TempCycA--)

TempCycB=7269;

while(TempCycB--);

};

//===================================================================

//读写子程序

//=================================================================

//读数据

unsignedcharReadDataLCM(void)

LCM_RS=1;

LCM_RW=1;

LCM_E=1;

LCM_E=0;

for(i=0;

100;

return(LCM_Data);

//读状态

unsignedcharReadStatusLCM(void)

LCM_Data=0xFF;

LCM_RS=0;

//while(LCM_Data&

Busy);

//检测忙信号

//写数据

voidWriteDataLCM(unsignedcharWDLCM)

ReadStatusLCM();

//检测忙

LCM_Data=WDLCM;

LCM_RW=0;

//若晶振速度太高可以在这后加小的延时

//延时

//写指令

voidWriteCommandLCM(unsignedcharWCLCM,BuysC)//BuysC为0时忽略忙检测

if(BuysC)ReadStatusLCM();

//根据需要检测忙

LCM_Data=WCLCM;

//===========================================================

//初始化子程序

voidLCMInit(void)//LCM初始化

LCM_Data=0;

WriteCommandLCM(0x38,0);

//三次显示模式设置,不检测忙信号

Delay5Ms();

WriteCommandLCM(0x38,1);

//显示模式设置,开始要求每次检测忙信号

WriteCommandLCM(0x08,1);

//关闭显示

WriteCommandLCM(0x01,1);

//清屏

WriteCommandLCM(0x06,1);

//显示光标移动设置

WriteCommandLCM(0x0c,1);

//显示开及光标设置

//================================================================

//按指定位置显示一个字符

voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData)

Y&

=0x1;

X&

=0xF;

//限制X不能大于15,Y不能大于1

if(Y)X|=0x40;

//当要显示第二行时地址码+0x40;

X|=0x80;

//算出指令码

WriteCommandLCM(X,0);

//这里不检测忙信号,发送地址码

WriteDataLCM(DData);

//按指定位置显示一串字符

//voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData)

//说明:

x(0-15):

x参数y(0-1):

y参数DData(字符串):

要显示的内容(英文、数字、符号)

//========================================================================

voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData)

unsignedcharListLength,j;

ListLength=strlen(DData);

if(X<

=0xF)//X坐标应小于0xF

{

for(j=0;

j<

ListLength;

j++)

DisplayOneChar(X,Y,DData[j]);

//显示单个字符

X++;

//显示自定义字符

//voidmychar(charxx,charyy,unsignedchar*character,unsignedcharsaveto)

xx(0-15):

为x参数.yy(0-1):

y参数.character:

要显示的字符的列表地址,在程序前面有定义

//saveto(1-7)为字符保存的RAM,每屏最多显示7个自定义字符

//(0x00-0x0h是自定义字符)

//=============================================================

voidmychar(charxx,charyy,unsignedchar*character,unsignedcharsaveto)

unsignedcharadd=(saveto<

<

3)|0x40;

unsignedchart;

//临时变量,每一行的值

/*

t=*(character+0);

WriteCommandLCM(add,0);

//第1行

WriteDataLCM(t);

t=*(character+1);

WriteCommandLCM(add+1,0);

//第2行

t=*(character+2);

WriteCommandLCM(add+2,0);

//第3行

t=*(character+3);

WriteCommandLCM(add+3,0);

//第4行

t=*(character+4);

WriteCommandLCM(add+4,0);

//第5行

t=*(character+5);

WriteCommandLCM(add+5,0);

//第6行

t=*(character+6);

WriteCommandLCM(add+6,0);

//第7行

t=*(character+7);

WriteCommandLCM(add+7,0);

//第8行

*/

for(i=0;

WriteCommandLCM(add+i,0);

WriteDataLCM(*(character+i));

DisplayOneChar(xx,yy,saveto);

//显示字符

//===============================================================

//主函数

main()

Delay400Ms();

LCMInit();

//1602初始化

while

(1)

DisplayListChar(0,0,"

ThisisListChar"

);

DisplayListChar(0,1,"

!

"

for(j=0;

30;

j++)for(i=0;

30000;

//清屏

ThisisOneChar:

DisplayOneChar(0,1,0x4f);

DisplayOneChar(1,1,0x6e);

DisplayOneChar(2,1,0x65);

DisplayOneChar(3,1,0x21);

ThisisMyChar:

mychar(0,1,character0,1);

mychar(1,1,character1,2);

mychar(2,1,character2,3);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1