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

上传人:飞*** 文档编号:43690344 上传时间:2018-06-07 格式:DOC 页数:30 大小:92KB
返回 下载 相关 举报
单片机液晶汉字显示c语言程序_第1页
第1页 / 共30页
单片机液晶汉字显示c语言程序_第2页
第2页 / 共30页
单片机液晶汉字显示c语言程序_第3页
第3页 / 共30页
单片机液晶汉字显示c语言程序_第4页
第4页 / 共30页
单片机液晶汉字显示c语言程序_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《单片机液晶汉字显示c语言程序》由会员分享,可在线阅读,更多相关《单片机液晶汉字显示c语言程序(30页珍藏版)》请在金锄头文库上搜索。

1、单片机液晶汉字显示单片机液晶汉字显示 c c 语言程序语言程序/*液晶屏分为 4 行*12 列汉字,全部使用模拟接口方式。/* TGLCMLIMIT64A 接口程序(模拟方式);*单片机液晶汉字显示 c 语言程序*;连线图:;*LCM-89C52* *LCM-89C52* *LCM-89C52* *LCM-89C52* *;*DB0-P0.0* *DB4-P0.4* *D/I-P2.6* *CS1-P2.4* *;*DB1-P0.1* *DB5-P0.5* *R/W-P2.7* *CS2-P2.5* *;*DB2-P0.2* *DB6-P0.6* *RST-VCC* *CS3-P3.2* *

2、;*DB3-P0.3* *DB7-P0.7* *E-P2.3* *;注:89C52 的晶振频率为 12MHz *;*单片机液晶汉字显示 c 语言程序*/画线部分请参照 avr 的 c 程序。/*#pragma src /*生成 ASM 文件开关,必要时打开 */#include#include#include#define Uchar unsigned char/*液晶显示器接口引脚定义*/sbit Elcm= P23; /sbit CS1LCM= P24; /sbit CS2LCM= P25; /sbit CS3LCM= P32; /*这个连接只是做实验的临时接法。*/sbit Dilcm=

3、 P26; /sbit Rwlcm= P27; /sfr Datalcm= 0x80; /数据口unsigned char testi=“浸渠叁绳漱塔烃威牺晓玄瑶“;/*常用操作命令和参数定义*/#define DISPON 0x3f /*显示 on */#define DISPOFF 0x3e /*显示 off */#define DISPFIRST 0xc0 /*显示起始行定义 */#define SETX 0x40 /*X 定位设定指令(页) */#define SETY 0xb8 /*Y 定位设定指令(列) */#define Lcdbusy 0x80 /*LCM 忙判断位 */*显示

4、分区边界位置*/#define MODL 0x00 /*左区 */#define MODM 0x40 /*左区和中区分界 */#define MODR 0x80 /*中区和右区分界 */#define LCMLIMIT 0xC0 /*显示区的右边界 */*全局变量定义*/Uchar col,row,cbyte; /*列 x,行(页)y,输出数据 */bit xy; /*画线方向标志:1 水平 */*函数列表*/void Lcminit(void); /*液晶模块初始化 */void Delay(Uchar); /*延时,入口数为 Ms */void lcdbusyL(void); /*busy

5、 判断、等待(左区) */void lcdbusyM(void); /*busy 判断、等待(中区) */void lcdbusyR(void); /*busy 判断、等待(右区) */void Putedot(Uchar); /*半角字符输出 */void Putcdot(Uchar); /*全角(汉字)输出 */void Wrdata(Uchar); /*数据输出给 LCM */void Lcmcls( void ); /*LCM 全屏幕清零(填充 0) */void wtcom(void); /*公用 busy 等待 */void Locatexy(void); /*光标定位 */voi

6、d WrcmdL(Uchar); /*左区命令输出 */void WrcmdM(Uchar); /*中区命令输出 */void WrcmdR(Uchar); /*右区命令输出 */void Putstr(Uchar *puts,Uchar i); /*中英文字符串输出 */void Rollscreen(Uchar x); /*屏幕向上滚动演示 */void Rddata(void); /* 从液晶片上读数据 */void Linehv(Uchar length); /*横(竖)方向画线 */void point(void); /*打点 */void Linexy(Uchar endx,Uch

7、ar endy);/*数组列表*/Uchar code Ezk; /*ASCII 常规字符点阵码表 */Uchar code Hzk; /*自用汉字点阵码表 */Uchar code STR1; /*自定义字符串 */Uchar code STR2; /Uchar code STR3; /Uchar code STR4; /*/* 单片机液晶汉字显示 c 语言程序 */*/void main(void)Uchar x,y;col=0;row=0;Delay(40); /*延时大约 40Ms,等待外设准备好 */Lcminit(); /*液晶模块初始化,包括全屏幕清屏*/Putstr(STR2,

8、24); /*第一行字符输出,24 字节 */col=0;row=2;Putstr(STR1,12); /*第二行字符输出,12 字节 */col=0;row=4;Putstr(STR3,24); /*第三行字符输出,24 字节 */col=0;row=6;Putstr(STR4,24); /*第四行字符输出,12 字节 */x=0;col=0;row=0;xy = 1; /*方向标志。定为水平方向 */Linehv(192); /*画一条横线(0,0)-(191,0) */col=0;row=15;xy = 1;Linehv(192); /*画一条横线(0,15)-(191,15) */co

9、l=0;row=32;xy = 1;Linehv(192); /*画一条横线(0,32)-(191,32) */col=0;row=1;xy = 0; /*方向标志。定为垂直方向 */Linehv(31); /*画一条竖线(0,1)-(0,31) */col=191;row=1;xy = 0;Linehv(31); /*画一条竖线(191,1)-(191,31) */col=0; /*设定斜线的起点坐标 */row=63;Linexy(44,31); /*画一段斜线(0,63)-(44,31) */col=44;row=31;Linexy(190,62); /*继续画斜线(44,31)-(19

10、1,63) */while(1)Rollscreen(y); /*定位新的显示起*/y+;y %=8;x=testiy;Delay(100); /*延时,控制滚动速度 */;/*/*画线。任意方向的斜线,不支持垂直的或水平线 */*/void Linexy(Uchar endx,Uchar endy)register Uchar t;int xerr=0,yerr=0,delta_x,delta_y,distance;Uchar incx,incy;/* compute the distance in both directions */delta_x=endx-col;delta_y=end

11、y-row;/* compute the direction of the increment ,an increment of “0“ means either a vertical or horizontal lines */if(delta_x0) incx=1;else if( delta_x=0 ) incx=0;else incx=-1;if(delta_y0) incy=1;else if( delta_y=0 ) incy=0;else incy=-1;/* determine which distance is greater */delta_x = cabs( delta_

12、x );delta_y = cabs( delta_y );if( delta_x delta_y ) distance=delta_x;else distance=delta_y;/* draw the line */for( t=0;t distance ) xerr-=distance;col+=incx;if( yerr distance ) yerr-=distance;row+=incy;/*/*画线。只提供 X 或 Y 方向的,不支持斜线 */*/void Linehv(Uchar length)Uchar xs,ys;if (xy)ys = col;for (xs=0;xs3;

13、 /*取 Y 方向分页地址 */Rddata();y=y1 /*字节内位置计算 */x=0x01;x=x7) row=0; /*如果行越界,返回首行 */ /*上半个字符输出结束 */col = bakerx; /*列对齐 */row = bakery+1; /*指向下半个字符行 */*下半个字符输出,8 列 */for(i=0;i7) row=1; /*如果行越界,返回首行 */ /*下半个字符输出结束 */row=bakery; /*整个字符输出结束 */*/* 全角字符点阵码数据输出 */*/void Putcdot(Uchar Order)Uchar i,bakerx,bakery; /*共定义 3 个局部变量 */int x; /*偏移量,字符量少的可以定义为 UCHAR */bakerx = col; /*暂存 x,y 坐标,已备下半个字符使用 */bakery = row;x=Order * 0x20; /*每个字符 32 字节 */*上半个字符输出,16 列 */for(i=0;i6) row=0; /*如果行越界,返回首行 */ /*上半个字符输出结束 */*下半个字符输出,16 列 */col = bakerx;row = bakery+1;for(i=0;i7) row=1; /*如果行越界,返回首行 */ /*下半个字符输出结束 */

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号