




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机应用技术传感器测试系统的数据显示与报警(1)数字时钟(LCD+DS1302)1.数字时钟(定时器中断+LCD显示)2.数字时钟(DS1302+LCD显示)案例1:利用单片机的定时器功能实现数字时钟,并用LCD显示出来。1.数字时钟(LCD+定时器中断)1.1 用LCD显示数字9LM016L型(字符型)1.1.1 LCD液晶简介 LCD(Liquid Crystal Display)液晶液晶显显示器,示器,显显示方式可分示方式可分为两种为两种: 文字型文字型LCD 绘图绘图型型LCD 常常见见文字型文字型LCD有有16字字X2列、列、20字字X2列、列、40字字X2列列U?LCDDB714
2、DB613DB512DB411DB310DB29DB18DB07E6R/W5RS4VL3VCC2GND1液晶显示的原理是利用液晶的物理特性,通过电压对液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显其显示区域进行控制,有电就有显示,这样即可以显示出图形。示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、应用在便携式电脑、数字摄像机、PDA移动通信工具移动通信工具等众多领域。等众多
3、领域。号号引脚引脚功能功能1Vcc电电源源 +5V2GND接地接地 3VLLCD亮度亮度调整电压输调整电压输入入 4RS暂存器选择暂存器选择 : 0:指令指令暂暂存器,存器,1:资料暂资料暂存器存器 5R/W读取读取取取/写写入入选择选择: 1:READ,0:WRITE 6E读写使能读写使能714DB0DB7八位元的八位元的双双向向资料资料 U?LCDDB714DB613DB512DB411DB310DB29DB18DB07E6R/W5RS4VL3VCC2GND1 HD44780 是集驱动器与控制器于一体,专用于字符显示的液晶显示控制驱动集成电路。16*2 字符型液晶显示模块的内部结构字符型液
4、晶显示模块的内部结构此时书中使用的LM016L使用了HD44780.HD44780内部组成结构内部组成结构1.1.2 如何控制如何控制LCD的显示数据的显示数据关键点:(1)LCD初始化(2)如何写地址到LCD中去(3)如何写数据到LCD中去图1 1602型LCD的驱动程序流程图调用调用LCDLCD初始化初始化函数。函数。调用写入显示地调用写入显示地址的函数址的函数调用写入数据的调用写入数据的函数函数该该操操作作重重复复设设置置3遍遍图2 1602型LCD初始化流程图指令设置指令设置(1)LCD初始化/*函数功能:对LCD的显示模式进行初始化设置*/void LcdInitiate(void)
5、 delay(15); /延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0 x38); /显示模式设置:162显示,57点阵,8位数据接口delay(5); /延时5msWriteInstruction(0 x38);delay(5);WriteInstruction(0 x38);delay(5);WriteInstruction(0 x0c); /显示模式设置:显示开,有光标,光标闪烁(D,C,B)delay(5);WriteInstruction(0 x06); /显示模式设置:光标右移,字符不移(N,S)delay(5);WriteInstr
6、uction(0 x01); /清屏幕指令,将以前的显示内容清除delay(5); 如何写命令字?RSR/WE00高脉冲D7D6D5D4D3D2D1D0001DLNF*00001DCB0000000CMD000001NS1显示地址(2)写指令到LCD中去指令设置指令设置图3 1602型LCD写指令流程图除了初始化的时候不用检测除了初始化的时候不用检测忙信号,其他时候对忙信号,其他时候对LCD进进行操作均需要进行忙信号检行操作均需要进行忙信号检测。测。/函数功能:写指令到LCD中去/入口参数: dictate,需要写入的命令字节/返回参数:无void WriteInstruction (unsi
7、gned char dictate) while(BusyTest()=1); /如果忙就等待 RS=0; /根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置0 _nop_(); _nop_(); /空操作两个机器周期,给硬件反应时间 P0=dictate; /将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(
8、); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令 (3)如何写数据到LCD中去如何写数据?RSR/WE10高脉冲D7D6D5D4D3D2D1D0 xxxxxxxx状态、数据选择读、写图4 1602型LCD写数据流程图/函数功能:写数据到LCD中去/入口参数:y ,需要显示的数据的ASCII/返回参数:无void WriteData(unsigned char y) while(BusyTest()=1); RS=1; /RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0; /E置低电平(根据表8-6,写指令时
9、,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置0 P0=y; /将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令 1.2 如何在LCD上显示字符9设定LCD使用模式为16X2显示,8位元5X7点阵设定屏幕与光标状态清除屏幕(CMD=1)设定定显示位址将A写入资料暂存器(1)初始化设置(2)设
10、置显示位地址80H81H82H83H90H91H92H93HC0HC1HC2HC3HD0HD1HD2HD3H基基址址(3)LCD上显示9 LcdInitiate(); /调用LCD初始化函数 WriteAddress(0 x07); /将显示地址指定为第0行第8列 WriteData(9); /将字符常量A写入液晶模块1.3 定时器中断控制LCD显示案例:控制LCD显示一个十六进制的数字,该数字以500ms的时间间隔自增,从0F循环。任务分析:(1)LCD如何显示一个数字;(2)如何实现500ms;(3)如何自增加电路设计(1)元器件选取(2)元器件连接程序设计(流程图)(1)主程序设计(2)
11、显示数字程序设计 (3)定时器中断子程序设计1.4 经典案例: 数字时钟(LCD)案例:控制LCD显示数字时钟。任务分析:(1)LCD如何显示成如下所示;(2)如何显示中文字符;(3)如何实现1s,如何每秒加1,每分钟加1,每小时加1,如何请零电路设计(1)元器件选取(2)元器件连接程序设计(流程图)(1)主程序设计(2)显示日期的设计(3)显示时间”秒、分、小时”的设计 (4)定时器中断子程序设计实验内容1.编程控制LCD,实现秒表;2.编程控制LCD,实现数字时钟;3.编程控制LCD,显示自定义的字符到LCD上;4.编程控制LCD,实现万年历;5.编程控制LCD,实现可调数字时钟。2.数字
12、时钟(DS1302+LCD)案例2:读取时钟芯片DS1302的秒钟信息显示在实验板的数码管上。(DS1302模块、LCD显示模块)2.1 DS1302简单介绍时钟计数功能,年计数可达2100。DS1302包括时钟/日历寄存器和31字节的数据暂存寄存器。DS1302寄存器与控制命令2.2 如何将年月日写入DS1302中(1)如何将数据写入DS1302;(2)如何将秒值写入DS1302;(3)如何写入出年月日;(1)如何将数据写入DS1302;DS1302写时序 DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。 数据在时钟(SC
13、LK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。(1)如何将数据写入DS1302(地址) #define SCK_SET P1 |= (1 (P15) #define RST_SET P1 |= (1 (P17)) RST_SET;/*启动DS1302总线*/*写入目标地址:addr*/addr = addr & 0 xFE;/*最低位置零*/for (i = 0; i 1; (1)如何将数据写入DS1302 #define SCK_CLRP1 &= (1 (P15) #define IO_CLRP1 &
14、amp;= (1 (P16) #define IO_SETP1 |= (1 (P16) ) /*写入数据:d*/ for (i = 0; i 1;RST_CLR;/*停止DS1302总线*/(2)如何将秒值写入DS1302;DS1302寄存器与控制命令为0时为写入(2)如何将秒值写入DS1302 void ds1302_write_time(void) ds1302_write_byte(ds1302_control_add,0 x00); /关闭写保护 ds1302_write_byte(ds1302_sec_add,0 x80);/暂停 ds1302_write_byte(ds1302_s
15、ec_add,time_buf6);/秒ds1302_write_byte(ds1302_day_add,time_buf7);/周 ds1302_write_byte(ds1302_control_add,0 x80);/打开写保护 (2)如何将秒值写入DS1302;#define ds1302_sec_add 0 x80n /秒数据地址地址偶数为写、奇数为读(2)如何将秒值写入DS1302DS1302寄存器与控制命令CH为1时,内部时钟不工作,暂停(3)如何将年月日写入DS1302DS1302寄存器与控制命令(3)如何将年月日写入DS1302 void ds1302_write_time(
16、void) ds1302_write_byte(ds1302_control_add,0 x00); /关闭写保护 ds1302_write_byte(ds1302_sec_add,0 x80); /暂停 ds1302_write_byte(ds1302_year_add,time_buf1);/年 ds1302_write_byte(ds1302_month_add,time_buf2);/月 ds1302_write_byte(ds1302_date_add,time_buf3);/日 ds1302_write_byte(ds1302_day_add,time_buf7);/周 ds130
17、2_write_byte(ds1302_hr_add,time_buf4);/时 ds1302_write_byte(ds1302_min_add,time_buf5);/分ds1302_write_byte(ds1302_sec_add,time_buf6);/秒ds1302_write_byte(ds1302_day_add,time_buf7);/周 ds1302_write_byte(ds1302_control_add,0 x80);/打开写保护 2.3 如何将DS1302中的年月日读出来(1)如何从DS1302中读出数据;(2)如何将秒从DS1302中读出;(3)如何显示出年月日;
18、(1)如何从DS1302中读出数据DS1302读时序(1)如何从DS1302中读出数据RST_SET;/*启动DS1302总线*/*写入目标地址:addr*/addr = addr | 0 x01;/*最低位置高*/for (i = 0; i 1;(1)如何从DS1302中读出数据/*输出数据:temp*/for (i = 0; i 1;if (IO_R) temp |= 0 x80;else temp &= 0 x7F;SCK_SET;SCK_CLR;RST_CLR;/*停止DS1302总线*/return temp;(2)如何从DS1302中读出秒#define ds1302_se
19、c_add 0 x80 /秒数据地址地址偶数为写、奇数为读(2)如何从DS1302中读出秒DS1302寄存器与控制命令(2)如何从DS1302中读出秒void ds1302_read_time(void) time_buf6=(ds1302_read_byte(ds1302_sec_add)&0 x7F;(2)如何从DS1302中读出秒DS1302寄存器与控制命令(2)如何从DS1302中读出秒?如果显示秒,我们应该怎么写代码? time_buf6=(ds1302_read_byte(ds1302_sec_add)&0 x7F;/存放秒钟的值;(3)如何显示出年月日;显示年:t
20、ime_buf1=ds1302_read_byte(ds1302_year_add);显示月: time_buf2=ds1302_read_byte(ds1302_month_add);显示日:思考?2.3 应用案例:数字时钟案例2:读取时钟芯片DS1302的秒钟信息显示在实验板的数码管上。任务分析:(1)时钟芯片如何连接;(2)怎么从DS1302获得时钟信息,需不需要初始化时间;(3)LCD显示电路设计(1)元器件选取(2)元器件连接程序设计(流程图)(1)主程序设计(2)显示日期的设计(3)显示时间”秒、分、小时”的设计 (4)定时器中断子程序设计DS1302内部RAM DS1302内部的
21、RAM分为两类一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制字为COHFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。1602命令字 指令指令1:清屏显示,光标复位到地址00H位置。 指令指令2:光标复位,光标返回到地址00H。 指令指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控
22、制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。R/L,高向左,低向右。 指令指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。(有些模块是 DL:高电平时为8位总线,低电平时为4位总线) 指令指令7:字符发生器RAM地址设置,地址:字符地址*8+字符行数。(将一个字符分成5*8点阵,一次写入一行,8行就组成一个字符) 指令指令8:置显示
23、地址,第一行为:00H0FH,第二行为:40H4FH。 指令指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令指令10:写数据。 指令指令11:读数据。RSR/WE011状态、数据选择读、写D7D6D5D4D3D2D1D0BF计数器地址图5 检测忙信号时,引脚设置及信息图LCD检查忙信号图6 1602型LCD读状态流程图/函数功能:函数功能:判断当前判断当前LCD是否忙是否忙/入口参数:无入口参数:无/返回参数:返回参数:result,为为1时表示忙,为时表示忙,为0/时表示空闲可以操作时表示空闲可以操作bit busytest(void)bit result;RS=0; R/W=1;E=1; /读状态读状态_nop_();_nop_();_nop_();_nop_(); /机器反应时间机器反应时间result=D7;E=0; /执行命令执行命令return result;#includeLCD的简单介绍
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 杭州健康证考试题及答案
- 消费电子盖板玻璃产线项目经济效益和社会效益分析报告
- 废矿石废矿产品综合利用项目社会稳定风险评估报告
- 2025年全国道路运输从业人员真题及答案
- 2025年机动车授权签字人考试题库及答案
- 2025年安全生产月竞赛题(含答案)
- 资本市场生态构建-洞察与解读
- 综合客运枢纽建设项目技术方案
- 2025年食品安全考试题库(含答案)
- 2025贵州省专业技术人员公需科目大数据培训考试答案
- 洁净灯具行业跨境出海战略研究报告
- 碳酸钙在生物医药中的应用-洞察分析
- 项目公司廉政风险点及防范措施
- 无人驾驶车辆在医疗物资运输中的应用研究-洞察分析
- 暴雨过后工地复工复产方案
- TNBSIA 001-2024 建筑设备一体化管控平台建设技术要求
- JT-T-848-2013公路用复合隔离栅立柱
- 《客舱安全与应急处置》-课件:其他辅助设备
- chap5-高性能混凝土的性能-物理力学性能
- 县河长制方案
- 基于韧性原则的乡村低密度住宅规划体系构建
评论
0/150
提交评论