打印

液晶汉字显示实例

[复制链接]
1655|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianli1980|  楼主 | 2012-4-19 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tianli1980 于 2012-4-19 09:23 编辑

点阵图形液晶显示模块除了可以显示基本的数字和英文字符外,最大的优势是还可以显示中文信息。
#include<reg52.h>    //头文件

#include<stdio.h>
unsigned data i;
unsigned char *p;     //建立数组指针
unsigned char wbyte;
sbit E=P3^2;     //读写使能信号,1有效
sbit R_W=P3^1;    //读写选择信号;1为读选通,0为写选通
sbit RS=P3^0;
sbit D_I=P3^0;     //数据指令选择信号;1为数据操作,0为写指令或读状态
char code Hanzi[32]=     //汉字和字符数组
{
0x02,0x03,     //笑脸,心
0x03,      //心
0xb1,0xb1,     //汉字"北"
0xbe,0xa9,     //汉字"京"
0xb0,0xc2,     //汉字"奥"
0xd4,0xcb,     //汉字"运"
0xbb,0xe1,     //汉字"会"
0x03,      //心
0x03,0x02,     //心,笑脸
0x30,0x31,     //0,1
0x32,0x33,      //2,3
0x34,0x35,     //4,5
0x36,0x37,     //6,7
0x38,0x39,     //8,9
0x41,0x42,     //A,B
0x43,0x44,     //C,D
0x45,0x46     //E,F
};
char code Hanzi1[28]=     //汉字和字符数组
{
0xbb,0xb6,     //汉字"欢"
0xd3,0xad,     //汉字"迎"
0xc4,0xfa,     //汉字"您"
0xa3,0xa1,     //!
0x20,0x20,     //空格
0x20,0x20,
0x20,0x20,
0x20,
0x32,0x30,     //2,0
0x30,0x38,     //0,8
0x2d,0x30,     //-,0
0x38,0x2d,     //8,-
0x30,0x38,     //0,8
0x20,0x20,     //空格
0x20,
};
unsigned char data j;
unsigned char data k;
void WCOM(unsigned char dcode);     //指令操作子函数
void Dat(unsigned char ddata);   //数据操作子函数
void Imim();      //初始化子函数
void Clearlcd();      //基本指令集清屏子函数
void Hanz();      //汉字显示子函数

void main()
{
Imim();      //初始化
Clearlcd();
p=Hanzi;      //指针指向数组的首地址*/
j=32;       //所建立的第一个汉字数组中元素的个数
k=0x80;       //起始点:80h-8fh为在第一行显示
Hanz();      //在1、3行写汉字程序
p=Hanzi1;
j=28;        //所建立的第二个汉字数组中元素的个数
k=0x92;      //起始点:90h-9fh为在第二行显示
Hanz();      //在2、4行写汉字程序
while(1)
{
}
}

void WCOM(unsigned char dcode)     //写指令程序
{
unsigned char q;
R_W=1;
D_I=0;      //设置状态
Loop:
P1=0xFF;
E=1;      //使能有效
q=P1;      //将P1口状态读入
E=0;      //关闭使能信号
if(q&0x80)     //判断屏幕是否忙
{
goto Loop;     //若忙,循环等待
}
R_W=0;
D_I=0;      //写数据指令
P1= dcode;     //将数据送入P1口
E=1;      //使能信号开
E=0;      //使能信号关
}

void Dat(unsigned char ddata)
{
unsigned char q;
R_W=1;
D_I=0;      //读状态指令
Loop:
P1=0xFF;
E=1;      //使能
q=P1;
E=0;
if(q&0x80)     //判忙
{
goto Loop;
}
D_I=1;      //送数据指令
R_W=0;
P1= ddata;     //写入数据
E=1;      //使能信号开
E=0;      //使能信号关
}

void Clearlcd()
{
D_I=0;
R_W=0;
P1=0x01;
WCOM(0x01);     //清除显示
}
void Imim()
{
P0=0xFF;     //初始化单片机端口
P1=0xFF;
P2=0xFF;
P3=0xFF;
E=0;
WCOM(0x38);     //功能设定
WCOM(0x08);     //关显示指令
WCOM(0x06);     //游标右移
Clearlcd();     //清屏
WCOM(0x0c);     //开显示指令
}

void Hanz()
{
int i;
WCOM(k);     //设置起始点
for(i=0;i<j;i++,p++)
{
  wbyte=*p;
  Dat(wbyte);     //将汉字数组数据送入
}
}

相关帖子

沙发
jxmzzr| | 2012-4-20 08:29 | 只看该作者
在单片机系统中,液晶显示模块使用的最为广泛。学习了。

使用特权

评论回复
板凳
huangfeng33| | 2012-4-20 09:28 | 只看该作者
学习一下代码。谢谢楼主的分享。

使用特权

评论回复
地板
joing1999| | 2012-4-20 09:38 | 只看该作者
帮顶,虽然很简单。

使用特权

评论回复
5
shenmu2012| | 2012-4-22 16:53 | 只看该作者
这个程序值得好还参考啊,谢谢楼主了啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝