单片机:LCD1602 的应用实验

一、实验目的:
(一)熟悉 LCD1602 与单片机的电路连接;
(二)熟悉 LCD1602 的引脚功能;
(三)掌握 LCD1602 的时序;
(四)掌握单片机对 LCD1602 的控制方法。
二、主要仪器设备及耗材:
(一)电脑一台;
(二)单片机开发板一套。
三、实验原理
(一)控制器接口说明
1.基本操作时序
(1)读状态:输入:RS=L,RWH,E=H 输出:D0~D7=状态字
(2)写指令:输入:RS=L,RW=L,D0D7=指令码,E=高脉沖输出:无
(3)读数据:输入:RSH,RW=H,E=H 输出:D0~D7=数据
(4)写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲输出:无 2.RAM 地址映射图 控制器內部带有 80X8 位(80 字节)的 RAM 缓沖区,对应关系如图 7.1 所 示
在这里插入图片描述
(二)LCD1602 电路原理图 LCD1602 电路原理图如图 7.2 所示。
在这里插入图片描述
四、实验内容及步骤
(一)实验内容 利用所学的单片机知识LCD1602的知识及电路知识编程实现单片机I/O 口 LCD1602 的显示。
编程实现 LCD1602 第一行显示“My name is XXX”,第 二行示“Number:XXX”。
(二)实验步骤 1.根据电路原理图编写 C 程序,调试并烧写入单片机;
在这里插入图片描述

#include <reg51.h>
/*
 
  1.基本操作时序
(1) 读状态:输入:RS=L, RW=H, E=H 输出:D0~D7=状态字
(2) 写指令:输入:RS=L, RW=L, D0D7=指令码, E=高脉沖	输出:无
(3) 读数据:输入:RS=H, RW=H, E=H 输出:D0~D7=数据
(4) 写数据:输入:RS=H, RW=L, D0~D7=数据, E=高脉冲	输出:无
*/
//编程实现 LCD1602 第一行显示“My name is XXX” ,第二行显示“Number:XXX” 	

//sbit DB=P0 不可以这样定义
//sbit是C51扩展的变量类型
//sbit特殊功能寄存器的一个位的声明,如:sbit LED0=P2^0; 类似于变量 int LED0=9; 是可以赋值的
//如:sbit LED0=P2^0;  要是想对P2^0这个引脚进行高低电平的赋值,不能直接 P2^2=1或P2^2=0;这样赋值
//															要通过sbit特殊功能寄存器位声明后在赋值
//首先,sbit led = P2,这个写法是错误的,虽然编译时不报错,但编译后执行程序时却是错误的。
//sbit 是定义一个引脚的,注意,只是定义一个引脚,而 P2是一个并行口,有8个引脚,是不能sbit 来定义的
//#define 并不是定义引脚的,也不是定义并行口,只是一个宏替换,就是程序中的led 换成P2后再编译。

#define DB P0
sbit RS=P2^6;//数据/命令选择端
sbit RW=P2^5;//读/写选择端
sbit EN=P2^7;//使能端


char table_1[] = " My name is YCB";
char table_2[] = " Number: 113506";

void delay(unsigned int ms)
{
	char i;
 	while(ms--)
		for(i=0; i<110; i++);
}

void write_com(char data_)//写指令
{
 	 EN=0;
	 RS=0;	//1表示数据,0表示指令,通过芯片告诉LCD1602,我要使用指令了 	 
	 RW=0;	//1表示读取,0表示写入,在告诉LCD1602,我要用写的方式使用指令了,即写入指令
	 //LCD1602,收到指令没有立即执行,还要等另外一个信号,就是EN使能信号
	 DB=data_; //写入指令
	 //delay(5); 
	 EN=1;	 
	 delay(5); //给予EN 5ms的脉冲宽度,LCD1602才开始执行
	 EN=0;	   //置零
}

void write_data(char data_)
{
	EN=0;
	RS=1;	//1表示数据,0表示指令,通过芯片告诉LCD1602,我要使用数据了 	 
	RW=0;	//1表示读取,0表示写入,在告诉LCD1602,我要用写的方式使用数据了,即写入数据
	//LCD1602,收到指令没有立即执行,还要等另外一个信号,就是EN使能信号
	DB=data_; //写入指令
	//delay(5); 
	EN=1;	 
	delay(5); //给予EN 5ms的脉冲宽度,LCD1602才开始执行
	
	EN=0;	   //置零
}


void init()
{
	write_com(0x38);  //设置16*2显示,5*7点阵,8位数据接口
	write_com(0x0c);  //
	write_com(0x06);  //读写一个字符后,地址指针+1,光标+1,右移	
    write_com(0x01);  //清屏
	
}

int main()
{
	char i;
 	init();
	write_com(0x80);  	 //从第一行左边开始写入数据
	for(i=0; i<15; i++)
	{
	 	write_data(table_1[i]);
		delay(500);//延迟函数,可在屏幕上看到显示的字符逐个出现
	}
	write_com(0x80+0x40);//从第二行左边开始写入数据
	for(i=0; i<15; i++)
	{
	 	write_data(table_2[i]);
		delay(500);//延迟函数,可在屏幕上看到显示的字符逐个出现
	}
	while(1);
}
  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值