原创 1602液晶初学试用

2008-9-30 19:53 4169 7 8 分类: MCU/ 嵌入式

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


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


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


点击开大图


9605c563-8dd1-44fb-b191-ea94ab50ea27.jpg


这里提一下,板上已经将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);
  delay(30);
 }
 writecode(0x80+0x50);
 delay(5);
 for(i=0;i<l2;i++)
 {
  writedata(table2);
  delay(10); 
 }
 for(i=0;i<16;i++)
 {
  writecode(0x18);
  delay(40);
 } 
 while(1);                                //不明白,不加个while(1)的话蜂鸣器居然会启动? 
}


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


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


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


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


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


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


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

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

ilove314_323192455 2008-10-4 07:41

很多开发软件和keilC一样,对中文支持不好,所以它的一个汉字都是占两个字节的,所以删除一个汉字的时候记得要两次backspace
相关推荐阅读
用户153164 2009-02-18 14:29
DS12887
用DS12887+1602液晶搞时钟出了问题uchar ds12887read(uchar addr){ uchar temp; CS=0; AS=0; DS=1; RW=1; AS=1; P0=ad...
用户153164 2009-02-07 14:33
继续学习51-搞个简单的方波
开年回来后,就折腾了这个小东西有人需要一个可调方波,很简单的花了2个晚上搭出来个用51单片机IO口输出的占空比和频率可调的方波 至于以后的完善当然是最好用单片机控制波形发生器芯片咯废话少说先看prot...
用户153164 2008-12-08 15:10
关于ifndef
千万不要忽略了头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明...
用户153164 2008-11-04 22:26
51开发板学习之定时器与电子钟
已经好久没有登陆EDN了最后一个51例程也在2个星期之前就做完了,这个时期也算是在调整吧加入的电子园的USB学习小组,也申请了免费PCB,并且两次跑到元器件市场终于买到了大部分的零件,下一个阶段就准备...
用户153164 2008-09-28 10:53
开博了
从今日开始技术类blog在Edn开博啦 我是个51单片机初学者  目前也刚进公司  什么都处于学习阶段请各位高手多多指点!...
EE直播间
更多
我要评论
1
7
关闭 站长推荐上一条 /3 下一条