EDN首页   博客首页

日志档案

发表于 2008-9-30 19:53:08

1

标签: 1602  51单片机  

1602液晶初学试用

今日无事,就把1602液晶试着跟这教程走了一遍

边抄边自己写  写了一点代码 感觉目前按模块来学习51还是蛮轻松的,这种学习效率也挺高的。不说了,先从原理图和1602的datasheet开始了

本人的开发板是从同学那拿来的,算是一个精简的51开发板吧 先看看关于1602的连接方式信号定义

点击开大图

这里提一下,板上已经将5脚直接接地了,根据管脚信号定义可知5脚是读写控制端,接地就是意味着液晶就只能是写数据而不能读数据  这个没啥太大的关系,初学嘛,写就行了  3脚接了可变电阻用来调节亮度

下面查看一下datasheet的操作指令部分和读写操作部分

点击开大图

在根据时序图可以看出 针对本开发板  RW==0

写指令的时候,RS=0,需要写入指令先建立好,然后EN来个高脉冲(这个高脉冲有持续时间要求)就可以把指令写入LCD

写数据的过程和以上过程类似,就是RS=1罢了

点击开大图

点击开大图

下面根据上图总结一下基本操作指令

显示模式指令0x38    显示开关指令一般用0x0f或者0x0e(开显示,显示不闪烁光标)

之后的光标移动方向指令一般用0x06(写入字符后指针+1光标+1)

另外一个整屏移动指令0x18要在英文datasheet中才有,这个中文datasheet省略了

(这个指令主要针对的是写入的字符逐渐从右“飞入”显示屏)

地址指针指令:0x80+(0x00~0x27)   第一行

                            0x80+(0x40~0x67)   第二行

清屏指令:0x01

好了,了解了以上这些,可以开始试用了

 

下面是代码

 

/*################# 开发板说明:R/W读写使能端已经接地,说明该液晶的功能已经限定了只能写入#########*/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs="P2"^0;
sbit lcden="P2"^1;
uchar table1[]="I love Nightwish";
uchar table2[]="dnchina.com";
uchar i,l1,l2;

void delay(uchar z)         //延时函数

{
 uint a,b;
 for(a=100;a>0;a--)
  for(b=z;b>0;b--);
}
void writedata(uchar dat)                
{
lcdrs=1;
 P0=dat;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0; 
}
void writecode(uchar cod)
{
 lcdrs=0;
 P0=cod;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}
void initlcd()                    //液晶初始化函数
{
 lcden=0;
 writecode(0x38);
 writecode(0x0e);
 writecode(0x06);
 writecode(0x01);
 writecode(0x80+0x10);


}
void main()
{
 initlcd();
 l1=strlen(table1);
 l2=strlen(table2);
 for(i=0;i<l1;i++)
 { 
  writedata(table1[i]);
  delay(30);
 }
 writecode(0x80+0x50);
 delay(5);
 for(i=0;i<l2;i++)
 {
  writedata(table2[i]);
  delay(10); 
 }
 for(i=0;i<16;i++)
 {
  writecode(0x18);
  delay(40);
 } 
 while(1);                                //不明白,不加个while(1)的话蜂鸣器居然会启动? 
}

不行了,代码贴上去本来还想加一点注释,没想到添的几个字把后面的字都覆盖了,暂时也不知道怎么解决就干脆不加注释了

从函数名就可以看出那几个函数是干什么的

另外非常搞不明白,不插LCD的时候把程序写入单片机居然蜂鸣器会启动,我真的是想不同,控制蜂鸣器的三极管开关是P2.2口,这里根本就没碰过P2.2,居然会有频率的发出声音,我真的见鬼了,还希望大侠给点解释。

烧入程序后,呵呵,字符就从右边飞入屏幕了,1602的初试成功啦

还有就是如果你想居中显示的,你要调整一下初始的指针地址就可以了  自己试试吧

还有,一开始我居然把液晶插反了,程序烧都烧不进去。。。

第一篇很二百五的日志,记录自己做的整个过程而已,学在其中,乐在其中~~

系统分类: 单片机   |   用户分类: 51单片机   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(165)    回复(1)  

投一票您将和博主都有获奖机会!

  • ilove314

    2008-10-4 7:41:42

    很多开发软件和keilC一样,对中文支持不好,所以它的一个汉字都是占两个字节的,所以删除一个汉字的时候记得要两次backspace