51单片机入门之六:1602液晶显示
2016-02-23 22:03
477 查看
本文旨在介绍单片机入门的基础知识,为初接触或即将接触单片的新手提供一个入门指导。本文章会陆续推出,隔几天一个章节。所使用单片机为ATMEL公司的AT89C52,软件为PROTEUS和KEIL;只提供原理图和KEIL环境下的注释,希望对广大即将接触单片机的人有所帮助,如果有错误欢迎回帖指出或加入QQ群143586739.
微信公众号:micropoint8.
本部分主要介绍1602液晶显示,显示内容为“Hello,Welcome to my site,my friends.”。
原理图如下:
程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P3^0; //数据/命令选择端(H/L)
sbit EN=P3^2; //使能端
sbit RW=P3^1; //读/写选择端(H/L),本文章只写,所以该端口供低电平
sbit wela=P3^3;//锁存器位选信号
uchar table1[]="Hello,Welcome to my ";//字符表1
uchar table2[]="site,my friends.";//字符表2
void delay(uint x) //延时函数
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void delay1(uint x) //延时函数
{
uint a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_com(uchar com) //写命令函数
{
wela=1; //锁存器位选打开
P2=com; //向P2口写命令
wela=0; //锁存器位选关闭
RS=0; //以下部分跟据1602手册的时序图写出
EN=0;
RW=0;
delay(10);
EN=1;
delay(10);
EN=0;
}
void write_date(uchar date) //写数据函数
{
wela=1;
P2=date;
wela=0;
RS=1;
EN=0;
RW=0;
delay(10);
EN=1;
delay(10);
EN=0;
}
void init() //初始化函数
{
write_com(0x38); //显示模式设置
delay(20);
write_com(0x0f);//显示开/关及光标设置
delay(20);
write_com(0x06);//当写一个字符后地址指针加一,光标加一
delay(20);
}
void main() //主函数
{
uchar a;
init();
write_com(0x80); //第一行起始地址
delay(20);
for(a=0;a<25;a++)
{
write_date(table1[a]);//读取字符表
delay(20);
}
write_com(0xc0); //第二行起始地址
delay(20);
for(a=0;a<17;a++)
{
write_date(table2[a]);//读取字符表
delay(20);
}
while(1); //保持显示
}
试验结果如下:
1602手册相关内容:
时序图如下:
更多电子知识请关注微信公众号:
微信公众号:micropoint8.
本部分主要介绍1602液晶显示,显示内容为“Hello,Welcome to my site,my friends.”。
原理图如下:
程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P3^0; //数据/命令选择端(H/L)
sbit EN=P3^2; //使能端
sbit RW=P3^1; //读/写选择端(H/L),本文章只写,所以该端口供低电平
sbit wela=P3^3;//锁存器位选信号
uchar table1[]="Hello,Welcome to my ";//字符表1
uchar table2[]="site,my friends.";//字符表2
void delay(uint x) //延时函数
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void delay1(uint x) //延时函数
{
uint a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_com(uchar com) //写命令函数
{
wela=1; //锁存器位选打开
P2=com; //向P2口写命令
wela=0; //锁存器位选关闭
RS=0; //以下部分跟据1602手册的时序图写出
EN=0;
RW=0;
delay(10);
EN=1;
delay(10);
EN=0;
}
void write_date(uchar date) //写数据函数
{
wela=1;
P2=date;
wela=0;
RS=1;
EN=0;
RW=0;
delay(10);
EN=1;
delay(10);
EN=0;
}
void init() //初始化函数
{
write_com(0x38); //显示模式设置
delay(20);
write_com(0x0f);//显示开/关及光标设置
delay(20);
write_com(0x06);//当写一个字符后地址指针加一,光标加一
delay(20);
}
void main() //主函数
{
uchar a;
init();
write_com(0x80); //第一行起始地址
delay(20);
for(a=0;a<25;a++)
{
write_date(table1[a]);//读取字符表
delay(20);
}
write_com(0xc0); //第二行起始地址
delay(20);
for(a=0;a<17;a++)
{
write_date(table2[a]);//读取字符表
delay(20);
}
while(1); //保持显示
}
试验结果如下:
1602手册相关内容:
时序图如下:
更多电子知识请关注微信公众号:
相关文章推荐
- Java.concurrent.locks(2)-ReentrantLock
- 1044. 火星数字
- PAT1032挖掘机技术哪家强
- bzoj:3224: Tyvj 1728 普通平衡树
- 8. redis的主从复制和sentinal
- 相机
- Android序列化之Serializable和Parcelable
- SCOI2007[蜥蜴]
- Associative机制使用场景
- android开源框架之PullToRefresh概述
- css属性选择器
- python之Hello World
- 一般信道容量的计算
- C++面向对象编程<十>:虚函数与多态
- 使用eclipse 做嵌入式开发
- C++远航2
- 二叉树镜像,对称二叉树的判断-symmetric Tree
- 求二叉树最远距离两个点
- 老男孩27期学员-我的目标
- MYSQL日常