用MCS-51单片机来驱动液晶显示本已不属于单片机本身的知识了,我所用到的液晶是1602液晶屏,主要是要自已去查看相关芯片的文档,所以自然对英语阅读能力是一个不小的挑战.在看文档的时候,我们也只需要注意几个相对重要的问题,而不用面对大篇的文档而不知何去何从,第一重要当然是液晶的时序图了,只有掌握了时序图后我们才能写出合理正确的程序,除此之外,还有相关引角的作用也是必不可少的.
在编写相关程序时,首先是将相关位进行设置,将RW接地即可,还有就是要合理设置RS位和EN位了,它们分别是读写选择位,命令数据先择位,使能位了,在操作时序的时候,我们主要也是来操作EN位来以时序进行控制的所以,她是极其重要的.接下来,我们就可以向芯片写指令了,比如清屏,设置液晶的显示模式等等.接下来我们就可以写你所要写进去的数据了.
下面是我写的一个简单的例子程序,已成功运行,运行环境:STC89C52单片机,1602的液晶屏.
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcdrs = P1^0;
sbit lcdrw = P1^1;
sbit lcden = P1^2;
uchar table1[] = "I LIKE MCU!";
uchar table2[] = "www.yunchow.com";
uchar i;
void init();
void write_cmd(uchar);
void write_data(uchar);
void delay(uint);
void main()
{
init();
//write_data('A');//向液晶写入一个A
//write_cmd(0x80+0x10);//设置地址指针位置
delay(20);
for(i=0;i<10;i++) //写入table1的数据
write_data(table1[i]);
write_cmd(0x80+0x51); //让地址指针指向第二行第17个位置
for(i=0;i<15;i++)
{ //写入table2的数据
write_data(table2[i]);
//delay(5);
}
for(i=0;i<16;i++) //让液晶整屏移动
{
write_cmd(0x18);
delay(500);
}
while(1);
}
/** 将发送的数据进行翻转,高位到低位,低位转到高位 **/
uchar reverse(uchar c)
{
uchar chbuff=0;
if (c&0x01) chbuff=chbuff|0x80;
if (c&0x02) chbuff=chbuff|0x40;
if (c&0x04) chbuff=chbuff|0x20;
if (c&0x08) chbuff=chbuff|0x10;
if (c&0x10) chbuff=chbuff|0x08;
if (c&0x20) chbuff=chbuff|0x04;
if (c&0x40) chbuff=chbuff|0x02;
if (c&0x80) chbuff=chbuff|0x01;
return chbuff;
}
/** 向液晶显示器发送命令 **/
void write_cmd(uchar cmd)
{
lcdrs = 0;
P0 = reverse(cmd);
delay(5);
lcden = 1;
delay(5);
lcden = 0;
delay(5);
}
/** 向液晶写入数据 **/
void write_data(uchar dat)
{
lcdrs = 1;
P0 = reverse(dat);
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void delay(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
lcdrw = 0;
lcden = 0;
write_cmd(0x01);//清屏
write_cmd(0x38);//显示模式设置
write_cmd(0x0f);//显示开/关及光标设置
write_cmd(0x06);//设置地址指针自动加1和整屏不移动
write_cmd(0x80+0x10);//设置地址指针位置
}
虽然这个程序简单,但是我还是花了好几天时间,因为刚开始没注意我所用到的实验板居然把P0~P7分别接到的液晶的D7~D0,导致了我刚开始所写的指令全是错误的指令(指令反过来了),这也正是我为什么会在源代码中加上reverse(uchar data);函数的原因所在了.
附上一份1602的文档
分享到:
相关推荐
参考资料-基于MCS-51单片机的液晶显示设计.zip
本书是在第3版《MCS:51单片机应用设计》一书的基础上,从应用的角度,详细地介绍了MCS:51单片机的硬件结构、指令系统、各种硬件接口设计、各种常用的数据运算和处理程序、接口驱动程序以及MCS:51单片机应用系统的...
嵌入式前景很好 现在3G牌照的发放 势必嵌入式会更火 不过真正学的很好的人不多 所以说还是要比较刻苦的学 (文件请用超星阅览器打开)
51单片机写的GPS接受程序,包括1602液晶显示和Protues仿真电路
2、选取合适的液晶显示屏,对测得的室内湿度进行显示; 3、当湿度低于人体健康舒适度时,启动加湿器工作,当高于时,停止工作; 4、满足人体健康舒适度的湿度可以设置; 5、当室内湿度太大时给出警示。 资料内容:...
MCS51单片机液晶12864并行驱动源码(有注释很详细)是我买的开发板带的程序。
为了快速识别未知芯片的类型,设计了以MCS-51单片机为核心,可以完成对74LS00、74LS02、74LS08、74LS14、74LS74、74LS86等14脚芯片的型号检测的数字芯片检测器。该芯片检测器利用手动按键进行控制操作,液晶显示屏...
MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS- 48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和 指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在...
与大家一起分享,基于51单片机的点阵式LED显示“0~9”.仿真
使用mcs-51单片机驱动lcd12864液晶显示屏幕
指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS- 51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC- 51单片机作为代表进行理论基础学习。MCS- 51系列...
用0802液晶显示CHINA-SZ LOVE8051的程序
mcs51单片机在汽车四轮转向系统中的应用.pdf mcs51单片机汇编语言程序ide设计与实现.pdf mcs51型单片机在测流缆道水深计数器中的应用.pdf mcs51系列单片机双机并行互连的实现方法.pdf mcu控制的太阳能电池最大功率...
它能够对时,分,秒进行精确计时,它与单片机的接口使用同步串行通信,仅用3条线与之相连接,就可以实现MCS-51单片机对其进行读写操作,把读出的时间数据送到LCD1602上显示。程序运行时,必须先对LM044L进行初始设置...
比较全的MCS51试验电路板 基本把51所具备的功能都包含了 调试正确(温度监测、USB通信、存储、串行通信、I2C通信、矩阵键盘、液晶显示、数码显示、蜂鸣器、等)
单片机万年历单片机万年历程序电子书手册源码CSDN 下载频道. ... 使用C52单片机sst89e564rd写的万年历程序,时钟芯片是ds1302,液晶显示模块主控芯片是东芝
3.2.5 在mcs-51单片机中软件模拟iic总线的方法 3.3 dallas公司的单总线 3.3.1 硬件结构和连接 3.3.2 单总线的工作原理 3.3.3 单总线通信协议 3.3.4 单总线命令编程 3.4 spi总线 3.4.1 spi总线的接口信号 ...
单片机综述全文共6页,当前为第1页。单片机综述全文共6页,当前为第1页。 单片机综述全文共6页,当前...MCS-51 系列及其兼容机型 :ATMEL、PHILIPS、WINBOND 是MCS-51单片机生产的老牌厂家,ST 新推出的μPSD系列等;MO