89C52单片机液晶汉字显示c语言程序文档格式.docx

上传人:b****4 文档编号:18453819 上传时间:2022-12-16 格式:DOCX 页数:31 大小:22.23KB
下载 相关 举报
89C52单片机液晶汉字显示c语言程序文档格式.docx_第1页
第1页 / 共31页
89C52单片机液晶汉字显示c语言程序文档格式.docx_第2页
第2页 / 共31页
89C52单片机液晶汉字显示c语言程序文档格式.docx_第3页
第3页 / 共31页
89C52单片机液晶汉字显示c语言程序文档格式.docx_第4页
第4页 / 共31页
89C52单片机液晶汉字显示c语言程序文档格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

89C52单片机液晶汉字显示c语言程序文档格式.docx

《89C52单片机液晶汉字显示c语言程序文档格式.docx》由会员分享,可在线阅读,更多相关《89C52单片机液晶汉字显示c语言程序文档格式.docx(31页珍藏版)》请在冰豆网上搜索。

89C52单片机液晶汉字显示c语言程序文档格式.docx

#defineDISPON0x3f/*显示on*/

#defineDISPOFF0x3e/*显示off*/

#defineDISPFIRST0xc0/*显示起始行定义*/

#defineSETX0x40/*X定位设定指令(页)*/

#defineSETY0xb8/*Y定位设定指令(列)*/

#defineLcdbusy0x80/*LCM忙判断位*/

/**************显示分区边界位置*****************/

#defineMODL0x00/*左区*/

#defineMODM0x40/*左区和中区分界*/

#defineMODR0x80/*中区和右区分界*/

#defineLCMLIMIT0xC0/*显示区的右边界*/

/****************全局变量定义*******************/

Ucharcol,row,cbyte;

/*列x,行(页)y,输出数据*/

bitxy;

/*画线方向标志:

1水平*/

/*****************函数列表**********************/

voidLcminit(void);

/*液晶模块初始化*/

voidDelay(Uchar);

/*延时,入口数为Ms*/

voidlcdbusyL(void);

/*busy判断、等待(左区)*/

voidlcdbusyM(void);

/*busy判断、等待(中区)*/

voidlcdbusyR(void);

/*busy判断、等待(右区)*/

voidPutedot(Uchar);

/*半角字符输出*/

voidPutcdot(Uchar);

/*全角(汉字)输出*/

voidWrdata(Uchar);

/*数据输出给LCM*/

voidLcmcls(void);

/*LCM全屏幕清零(填充0)*/

voidwtcom(void);

/*公用busy等待*/

voidLocatexy(void);

/*光标定位*/

voidWrcmdL(Uchar);

/*左区命令输出*/

voidWrcmdM(Uchar);

/*中区命令输出*/

voidWrcmdR(Uchar);

/*右区命令输出*/

voidPutstr(Uchar*puts,Uchari);

/*中英文字符串输出*/

voidRollscreen(Ucharx);

/*屏幕向上滚动演示*/

voidRddata(void);

/*从液晶片上读数据*/

voidLinehv(Ucharlength);

/*横(竖)方向画线*/

voidpoint(void);

/*打点*/

voidLinexy(Ucharendx,Ucharendy);

/******************数组列表*********************/

UcharcodeEzk[];

/*ASCII常规字符点阵码表*/

UcharcodeHzk[];

/*自用汉字点阵码表*/

UcharcodeSTR1[];

/*自定义字符串*/

UcharcodeSTR2[];

UcharcodeSTR3[];

UcharcodeSTR4[];

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

/*单片机液晶汉字显示c语言程序*/

voidmain(void)

{

Ucharx,y;

col=0;

row=0;

Delay(40);

/*延时大约40Ms,等待外设准备好*/

Lcminit();

/*液晶模块初始化,包括全屏幕清屏*/

Putstr(STR2,24);

/*第一行字符输出,24字节*/

row=2;

Putstr(STR1,12);

/*第二行字符输出,12字节*/

row=4;

Putstr(STR3,24);

/*第三行字符输出,24字节*/

row=6;

Putstr(STR4,24);

/*第四行字符输出,12字节*/

x=0;

xy=1;

/*方向标志。

定为水平方向*/

Linehv(192);

/*画一条横线(0,0)-(191,0)*/

row=15;

/*画一条横线(0,15)-(191,15)*/

row=32;

/*画一条横线(0,32)-(191,32)*/

row=1;

xy=0;

定为垂直方向*/

Linehv(31);

/*画一条竖线(0,1)-(0,31)*/

col=191;

/*画一条竖线(191,1)-(191,31)*/

/*设定斜线的起点坐标*/

row=63;

Linexy(44,31);

/*画一段斜线(0,63)-(44,31)*/

col=44;

row=31;

Linexy(190,62);

/*继续画斜线(44,31)-(191,63)*/

while

(1){

Rollscreen(y);

/*定位新的显示起*/

y++;

y%=8;

x=testi[y];

Delay(100);

/*延时,控制滚动速度*/

}

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

/*画线。

任意方向的斜线,不支持垂直的或水平线*/

voidLinexy(Ucharendx,Ucharendy)

registerUchart;

intxerr=0,yerr=0,delta_x,delta_y,distance;

Ucharincx,incy;

/*computethedistanceinbothdirections*/

delta_x=endx-col;

delta_y=endy-row;

/*computethedirectionoftheincrement,

anincrementof"

0"

meanseitheraverticalorhorizontallines*/

if(delta_x>

0)incx=1;

elseif(delta_x==0)incx=0;

elseincx=-1;

if(delta_y>

0)incy=1;

elseif(delta_y==0)incy=0;

elseincy=-1;

/*determinewhichdistanceisgreater*/

delta_x=cabs(delta_x);

delta_y=cabs(delta_y);

if(delta_x>

delta_y)distance=delta_x;

elsedistance=delta_y;

/*drawtheline*/

for(t=0;

t<

=distance+1;

t++){

point();

xerr+=delta_x;

yerr+=delta_y;

if(xerr>

distance){

xerr-=distance;

col+=incx;

if(yerr>

yerr-=distance;

row+=incy;

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

只提供X或Y方向的,不支持斜线*/

voidLinehv(Ucharlength)

Ucharxs,ys;

if(xy){ys=col;

for(xs=0;

xs<

length;

xs++){

col=ys+xs;

else{xs=row;

for(ys=0;

ys<

ys++){

row=xs+ys;

/***************单片机液晶汉字显示c语言程序*************************/

/*画点*/

voidpoint(void)

Ucharx1,y1,x,y;

x1=col;

y1=row;

row=y1>

>

3;

/*取Y方向分页地址*/

Rddata();

y=y1&

0x07;

/*字节内位置计算*/

x=0x01;

x=x<

<

y;

/*移入所画点*/

Wrdata(cbyte|x);

/*画上屏幕*/

col=x1;

/*恢复xy坐标*/

row=y1;

/*屏幕滚动定位*/

voidRollscreen(Ucharx)

cbyte=DISPFIRST|x;

/*定义显示起始行为x?

WrcmdL(cbyte);

WrcmdM(cbyte);

WrcmdR(cbyte);

/*一个字串的输出*/

voidPutstr(Uchar*puts,Uchari)

Ucharj,X;

for(j=0;

j<

i;

j++)

X=puts[j];

if(X&

0x80)

Putcdot(X&

0x7f);

/*只保留低7位*/

elsePutedot(X-0x20);

/*ascii码表从0x20开始*/

/*半角字符点阵码数据输出*/

voidPutedot(UcharOrder)

Uchari,bakerx,bakery;

/*共定义4个局部变量*/

intx;

/*偏移量,字符量少的可以定义为UCHAR*/

bakerx=col;

/*暂存x,y坐标,已备下半个字符使用*/

bakery=row;

x=Order*0x10;

/*半角字符,每个字符16字节*/

/*上半个字符输出,8列*/

for(i=0;

i<

8;

i++)

cbyte=Ezk[x];

/*取点阵码,rom数组*/

Wrdata(cbyte);

/*写输出一字节*/

x++;

col++;

if(col==LCMLIMIT){col=0;

row++;

/*下一列,如果列越界换行*/

if(row>

7)row=0;

/*如果行越界,返回首行*/

}/*上半个字符输出结束*/

col=bakerx;

/*列对齐*/

row=bakery+1;

/*指向下半个字符行*/

/*下半个字符输出,8列*/

/*取点阵码*/

row=row+2;

7)row=1;

}/*下半个字符输出结束*/

row=bakery;

}/*整个字符输出结束*/

/*全角字符点阵码数据输出*/

voidPutcdot(UcharOrder)

/*共定义3个局部变量*/

x=Order*0x20;

/*每个字符32字节*/

/*上半个字符输出,16列*/

16;

Wrdata(Hzk[x]);

if(col==LCMLIMIT){col=0;

}/*下一列,如果列越界换行*/

6)row=0;

/*下半个字符输出,16列*/

i++)/*下半部分*/

row=bakery;

/*清屏,全屏幕清零*/

voidLcmcls(void)

for(row=0;

row<

row++)

for(col=0;

col<

LCMLIMIT;

col++)Wrdata(0);

/*从液晶片上读数据,保留在全局变量中*/

voidRddata(void)

Locatexy();

/*坐标定位,返回时保留分区状态不变*/

Datalcm=0xFF;

Dilcm=1;

/*数据*/

Rwlcm=1;

/*读数据*/

Elcm=1;

/*读入到LCM*/

_nop_();

cbyte=Datalcm;

/*虚读一次*/

Elcm=0;

/*从数据口读数据,真读*/

/*数据写输出*/

voidWrdata(UcharX)

//wtcom();

/*数据输出*/

Rwlcm=0;

/*写输出*/

Datalcm=X;

/*数据输出到数据口*/

/*命令输出,每次输出一个分区控制口*/

/*voidWrcmd(UcharX)

//{

//Locatexy();

/*确定分区,返回时保留分区状态不变*/

/*等待LCM操作允许*/

//Dilcm=0;

/*数据操作*/

//Rwlcm=0;

//Datalcm=X;

//Elcm=1;

//}

/*命令输出到左区控制口*/

voidWrcmdL(UcharX)

lcdbusyL();

/*确定分区,返回时保留分区状态不变*/

Dilcm=0;

/*命令操作*/

/*命令输出到中区控制口*/

voidWrcmdM(UcharX)

lcdbusyM();

/*命令输出到数据口*/

/*命令输出到右区控制口*/

voidWrcmdR(UcharX)

lcdbusyR();

/*****************单片机液晶汉字显示c语言程序***************************************/

/*分区操作允许等待,返回时保留分区选择状态*/

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

voidlcdbu

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

当前位置:首页 > 表格模板 > 书信模板

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

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