欢迎使用CSDN-markdown编辑器

来源:互联网 发布:java set用法 编辑:程序博客网 时间:2024/06/14 08:03

【开头】

学习智能硬件是我自己的一个目标。随着技术的发展,智能硬件将会有很好的市场前景。所以,这方面的学习可以让我预见未来,也为以后找工作打点基础。

【关于51单片机】
这个接触有两年了,但一直没开始正经的学习。最近在认真的看,也写程序练手。但发现很快就忘记了,这方面的内容理解起来不难,但零碎内容多,需要多接触才能记住。所以,我个人觉得把自己的学习过程记录下来,一方面有利于自己的复习回看,一方面可以给刚开始学习的人做个简单的参考。

今天就先来说说LCD1602。
首先,液晶显示屏缩写是LCD,数字1602代表每行显示16个字符,可显示2行。
液晶屏分为字符型和点阵型,字符型只能显示ASCII码字符如:数字、字母、各种符号等;点阵型通过点亮的点来显示图形。
使液晶显示的操作有并行和串行两种方式。今天提到的1602属于并行方式。
下面我们上图认识一下LCD1602:

正面照

反面照

可以看到,1602背面接口有16个,我们接下来介绍一下每个接口的作用,并以此为基础来操作点亮屏幕显示一些内容。

这里写图片描述

当然仅仅知道接口内容时无法操作屏幕显示的,我们需要了解它的初始化方式和指令代码。

这里写图片描述

我们初始化1602的程序也都是采用这些指令:

void init() //初始化函数
{
lcde=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
可以对照指令集,看一下都设置了那些项目。

除此之外,我们数据的显示还要求有初始地址的指定。而其控制器内部设有一个数据地址指针,用户可以通过它们访问内部的全部80KB的RAM。
数据指针设置

所以数据0x80在这里就是指屏幕第一行的第一个地址;0x80+0x40代表第二行开始的地址。

到目前为止,我们基本介绍了点亮1602屏幕的全部内容,下面我们就简单梳理一下:

液晶的1、2端口为电源;
液晶的15、16端口为背光电源;
3端口是液晶对比调节端;
4端口是向液晶控制器写数据/写命令选择端;
5端口为读写端口,由于我们都是向屏幕写内容,所以该端口常为写端口,接低电平。
6端口为使能端口,是操作必需的信号;
D0~D7即是指令码的入口,也是数据地址和数据的入口。

这些基本内容在加上你自己具备的一些C语言知识,写出一个显示字符的程序并不难。

下面是我自己练习的内容,在买的板子上通过实验成功显示。

#include<reg51.h>#define uchar unsigned char#define uint  unsigned intuchar code table1[]="BRICS IN XIAMEN";uchar code table2[]="2017-9.1-9.6";sbit lcde=P2^7;sbit lcdrs=P2^6;sbit lcdrw=P2^5;uchar num;void delay(uint c)    //延时函数{   uint a,b;   for(a=c;a>0;a--)      for(b=110;b>0;b--);}void write_com(uchar com)  //写命令函数(command){   lcdrs=0;   P0=com;   delay(5);   lcde=1;   delay(5);   lcde=0;}void write_data(uchar date)  //写数据函数(data){   lcdrs=1;   P0=date;   delay(5);   lcde=1;   delay(5);   lcde=0;}void init()                 //初始化函数{   lcde=0;   lcdrw=0;                // rw是读写端口,写模式选择低电平,才能将数据显示。   write_com(0x38);   //设置16*2显示,5*7点阵,8位数据接口   write_com(0x0c);   //设置开显示,不显示光标   write_com(0x06);  //写一个字符后地址指针加1   write_com(0x01);  //显示清0,数据指针清0}void main(){   init();   write_com(0x80);                                 //指向第一行开头   for(num=0;num<15;num++)           //第一行15个字节可用   {      write_data(table1[num]);      delay(5);   }   write_com(0x80+0x40);            //指向第二行开头   for(num=0;num<12;num++)          //第二行12个字节可用   {      write_data(table2[num]);      delay(5);   }   while(1);                       }

到这就结束了,这是我的第一篇学习日志。又帮我回顾了一遍学习内容,也希望看到这篇内容的你能留言说出你的想法和我交流。

原创粉丝点击