内容正文:
任务3 显示模块设计与制作
单片机技术与应用
项目二 智能车间生产线计数系统设计与制作
任务3 显示模块设计与制作
三诺生物传感有限公司
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
【基础任务要求】利用红外光电传感器检测产品进行计数,当计数值达到3时报警,用LCD液晶屏显示产品数,并且每1秒钟信号灯闪烁一次。
任务3 显示模块设计与制作
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
任务实现四步骤
绘制控制电路图
搭接硬件电路
硬件设计
调试控制电路
调试控制程序
软硬件调试
仿真运行
实物运行
功能实现
绘制流程图
编程实现功能:用LCD液晶屏显示产品数
软件设计
01
02
03
04
重点、难点
难点
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
STC89C52
单片机
时钟电路
复位电路
电源电路
指示灯电路
系统框图
任务3 显示模块设计与制作
蜂鸣器电路
红外光电传感器
电路
显示电路
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
任务名:显示模块设计与制作
元件名称 图片 型号 数量 Proteus中的名称
单片机芯片 AT89C51 1 用AT89C51代替STC89C52
晶振 12MHZ 1 CRYSTAL
电容 22pF 2 CAP
电解电容 22μf/16V 1 CAP-ELEC
电阻 0.1KΩ 1 RES
电阻 470Ω 1 RES
电阻 10KΩ 1 RES
排阻 1 RESPACK-8
滑动电阻 POT
发光二极管 1 LED-RED
红外光电传感器 1 用按钮button代替
三极管 1 PNP
蜂鸣器 1 BUZZER
液晶屏 LCD1602 1 LM016L
元器件选型
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
LCD1602引脚
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
硬件电路图
任务3 显示模块设计与制作
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
硬件设计-绘电路
细致
规范
严谨
小锦囊
电路绘制规范:
用统一规定的元件符号
尽量避免导线的交叉
导线要求横平竖直
设置元器件参数
元件放在编辑区内
元器件之间要用导线连接
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
软件设计
1
如何用LCD1602液晶屏显示产品数?
重点、难点
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
1. LCD1602的基本操作
RS R/W 操作
0 0 写命令操作(初始化、光标定位等)
0 1 读状态操作(读忙标志)
1 0 写数据操作(要显示的内容)
1 1 读数据操作(可以把显示存储区中的数据反读出来)
使能端E引脚
下降沿时执行操作
四种操作
三种常用
单片机对LCD模块有四种基本操作:写命令、写数据、读状态和读数据
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
写命令操作是指给液晶模块写入命令字,也就是指令字。
读状态操作用来读入液晶模块的忙标志。
写数据操作用来给液晶模块写入显示的数据。
RS R/W 操作
0 0 写命令操作(初始化、光标定位等)
0 1 读状态操作(读忙标志)
1 0 写数据操作(要显示的内容)
1 1 读数据操作(可以把显示存储区中的数据反读出来)
四种操作
三种常用
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
一般一个独立的模块包括两个文件
1)头文件,它里面定义所有液晶显示需要的预定义和函数声明;
2)c程序源文件,液晶显示所需要的函数。
模块化程序设计
工程
主函数模块
main.c
液晶显示模块
lcd.h
lcd.c
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
定义lcd.h头文件
#ifndef __LCD_H_
#define __LCD_H_
包含头文件
#include<reg51.h>
重定义关键字
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
控制端口定义
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^2;
sbit LCD1602_RW=P2^1;
sbit LCD1602_RS=P2^0;
函数声明
void Lcd1602_Delay1ms(uint c);
void LcdWriteCom(uchar com); // 写命令函数
void LcdWriteData(uchar dat); //写数据函数
void LcdInit(); //初始化函数
#endif
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
控制接口定义
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^2;
sbit LCD1602_RW=P2^1;
sbit LCD1602_RS=P2^0;
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
在写操作时,使能信号E的下降沿有效。在软件设置顺序上,先设置RS和R/W状态,再设置数据,然后产生E信号的脉冲,最后复位RS和R/W状态。
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
lcd.c
#include"lcd.h"
void LcdWriteCom(uchar com)
{
LCD1602_E = 0;
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DATAPINS = com;
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
void Lcd1602_Delay1ms(uint c)
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
写命令函数
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void LcdWriteData(uchar dat)
{
LCD1602_E = 0;
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DATAPINS = dat;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
写数据函数
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void LcdInit() //LCD初始化
{
LcdWriteCom(0x38); //显示2行
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x06); //写一个指针加1,光标移动设置
LcdWriteCom(0x80); //设置数据指针起点
}
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
LCD初始
工作方式设置
显示状态设置
清屏
返回
输入方式设置
0 0 1 DL N F 0 0
DL:设置LCD的连接方式;DL=1:8位、DL=0:4位;
N:设置LCD显示的行数;N=1:2行、N=0:1行
F:用来设置LCD字符显示的点阵;F=1:5×10、F=0:5×7
例:设置数据位数8位,2行显示,5×7点阵字符
0 0 1 1 1 0 0 0
LcdWriteCom(0x38); //数据位数8位
//2行显示,5×7点阵字符
化
工作方式设置
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
LCD初始
工作方式设置
显示状态设置
清屏
返回
输入方式设置
0 0 0 0 1 D C B
D:整体显示开关,D=1,表示开显示,D=0,表示关显示
C:光标开关,C=1,表示有光标显示,C=0,表示没有光标显示
B:控制光标是否闪烁, B=1,光标闪烁,B=0,光标不闪烁
例如:设置开显示,没有光标,光标位字符不闪烁
0 0 0 0 1 1 0 0
LcdWriteCom(0x0C); //开显示,没有光标,光标位字符不闪烁
化
显示状态设置
试一试:写出设置开显示,有光标,光标位字符闪烁的命令字是什么呢?
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void LcdInit() //LCD初始化
{
LcdWriteCom(0x38); //显示2行
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x06); //写一个指针加1,光标移动设置
LcdWriteCom(0x80); //设置数据指针起点
}
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
LCD初始
工作方式设置
显示状态设置
清屏
返回
输入方式设置
LcdWriteCom(0x01);
//LCD清屏,同时光标定位在第1行,第1列
化
清屏命令
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void LcdInit() //LCD初始化
{
LcdWriteCom(0x38); //显示2行
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x06); //写一个指针加1,光标移动设置
LcdWriteCom(0x80); //设置数据指针起点
}
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
LCD初始化
工作方式设置
显示状态设置
清屏
返回
输入方式设置
0 0 0 0 0 1 I/D S
I/D:光标移动方向设置,I/D=1:增量方式右移、I/D=0:减量方式左移
S:控制屏幕上所有文字是否移动,S=1:移位、S=0:不移位
例如:设置光标增量方式右移,显示字符不移动
0 0 0 0 0 1 1 0
LcdWriteCom(0x06);
//光标增量方式右移,显示字符不移动
输入方式设置
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void LcdInit() //LCD初始化
{
LcdWriteCom(0x38); //显示2行
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x06); //写一个指针加1,光标移动设置
LcdWriteCom(0x80); //设置数据指针起点
}
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
(1)表中命令字以十六进制形式给出,该命令字就是与LCD显示位置相对应的DDRAM地址。
(2)第一行和第二行的命令字是不连续的。
LcdWriteCom(0x80); //光标定位在第1行第1列
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void LcdInit() //LCD初始化
{
LcdWriteCom(0x38); //显示2行
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x06); //写一个指针加1,光标移动设置
LcdWriteCom(0x80); //设置数据指针起点
}
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
LCD1602识别的是ASClI码,可以用ASCIl码直接赋值,在单片机编程中还可以用
字符型常量或变量赋值
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
进阶任务:LCD1602液晶屏显示
【任务要求】用单片机控制LCD1602液晶模块,在第1行显示姓名拼音“xiaoming”字符串。在第2行正中间显示“I Love China !”字符串。
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
每天学习一点点,变成更好的自己
单片机技术与应用
Lavf57.58.101
$$