一、实验目的: (一)熟悉 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 程序,调试并烧写入单片机; ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201024125325242.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NjY3MTY1,size_16,color_FFFFFF,t_70#pic_center)
#include
/*
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
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
write_data(table_2[i]);
delay(500);//延迟函数,可在屏幕上看到显示的字符逐个出现
}
while(1);
}
|