周丹基于红外遥控的时钟1602显示文档格式.docx

上传人:b****5 文档编号:20461549 上传时间:2023-01-23 格式:DOCX 页数:22 大小:1.51MB
下载 相关 举报
周丹基于红外遥控的时钟1602显示文档格式.docx_第1页
第1页 / 共22页
周丹基于红外遥控的时钟1602显示文档格式.docx_第2页
第2页 / 共22页
周丹基于红外遥控的时钟1602显示文档格式.docx_第3页
第3页 / 共22页
周丹基于红外遥控的时钟1602显示文档格式.docx_第4页
第4页 / 共22页
周丹基于红外遥控的时钟1602显示文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

周丹基于红外遥控的时钟1602显示文档格式.docx

《周丹基于红外遥控的时钟1602显示文档格式.docx》由会员分享,可在线阅读,更多相关《周丹基于红外遥控的时钟1602显示文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

周丹基于红外遥控的时钟1602显示文档格式.docx

图7红外发射芯片

Ccs:

用户码选择输入端

KL0-KL7:

键盘输入

KL/Oo-KL/O7:

键盘输入输出

LMP:

指示灯输出

OSCI、OSCO:

晶振输入输出端

REM:

远程输出端

SEL:

SELinput扩展编码口

VDD:

电源正

VSS:

电源地

Upd6121使用的载波波形:

使用455KHz晶体,经内部分频电路,信号被调制在37.91KHz,占空比为3分之1。

如下如图所示。

调制频率(晶振使用455KHz时)

fCAR=1/Tc=fOSC/12≈38KHz

fOSC是晶振频率

占空比=T1/Tc=1/3

图8占空比

 

使用455KHz晶振时各代码所占的时间如图所示。

图9红外发射代码所占用的时间

uPD6121G按键输出有二种方式:

一种是每次按键都输出完整的一帧数据;

另一种是按下相同的按键后每发送完整的一帧数据后,再发送重复码,再到按键被松开。

本实验采用NEC的uPD6121G组成发射电路,其电路图如图所示。

图10uPD6121的发射电路

图11红外发射器的详细编码

(二)红外接收部分

红外接收电路选择IR1838一体化接收头,并通过中断的方式进行接收,解码采用89C52单片机进行解码,其中断方式为下降沿触发。

其电路为下如图所示。

图12红外接收一体头电路

红外遥控一体化接收头的种类很多,引脚定义也不相同,一般有三个引脚,包括供电脚、接地和信号输出引脚。

根据发射端调制载波的不同应选用相应解调频率的接收头。

在接收头内部放大的增益很大,很容易引起干扰,因此在接收头的供电引脚上必须加上滤波电容,一般在22UF以上。

有的厂家建议在供电引脚和电源之间接入330欧姆电阻,进一步降低电源干扰。

注意:

在这里特别说明:

红外遥控中断信号是进行了反向处理的,也就是说高电平变成低电平,低电平变成高电平。

例如发射的引导码:

9ms的高电平和4.5ms的低电平,待红外一体化接收头接收放大之后的信号变成:

9ms的低电平和4.5ms的高电平。

这里是我们编程的时候要特别注意的地方。

(三)时钟显示部分

1、时钟部分

时钟芯片采用DS1302,该芯片是一种高性能、低功耗的时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

工作电压宽达2.5~5.5V。

采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。

DS1302的外部引脚分配如图所示

图13时钟芯片DS1302外部引脚图

各引脚的功能为:

Vcc1:

主电源;

Vcc2:

备份电源。

当Vcc2>

Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2<

Vcc1时,由Vcc1向DS1302供电。

SCLK:

串行时钟,输入,控制数据的输入与输出;

I/O:

三线接口时的双向数据线;

CE:

输入信号,在读、写数据期间,必须为高。

该引脚有两个功能:

第一,CE开始控制字访问移位寄存器的控制逻辑;

其次,CE提供结束单字节或多字节数据传输的方法。

DS1302有下列几组寄存器:

①DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器

(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图所示

图14DS1302控制寄存器

DS1302有关日历、时间的寄存器

小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。

当为高时,选择12小时模式。

在12小时模式时,位5是,当为1时,表示PM。

在24小时模式时,位5是第二个10小时位。

秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。

当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;

当该位置为0时,时钟开始运行。

控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。

在任何的对时钟和RAM的写操作之前,WP位必须为0。

当WP位为1时,写保护位防止对任一寄存器的写操作。

②DS1302有关RAM的地址

DS1302中附加31字节静态RAM的地址如图所示。

图15静态ram地址

③DS1302的工作模式寄存器

所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。

突发模式寄存器如图所示。

图16工作模式寄存器

④此外,DS1302还有充电寄存器等。

读写时序说明:

DS1302是SPI总线驱动方式。

它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。

要想与DS1302通信,首先要先了解DS1302的控制字。

DS1302的控制字如图所示。

图17DS1302控制字

控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中;

位6:

如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;

位5至位1(A4~A0):

指示操作单元的地址;

位0(最低有效位)):

如为0,表示要进行写操作,为1表示进行读操作。

控制字总是从最低位开始输出。

在控制字指令输入后的下一个

SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。

同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。

数据读写时序如图所示。

图18数据读写时序

电路原理图:

电路原理图如图19,DS1302与单片机的连接也仅需要3条线:

CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。

图19DS1302与单片机的电路连接

2、显示部分

显示部分采用最为常用的液晶显示器1602,该显示器具有功耗低,使用方便,运用在各个领域。

如图所示

图201602液晶显示器

LCD1602主要技术参数:

显示容量:

16×

2个字符

芯片工作电压:

4.5—5.5V

工作电流:

2.0mA(5.0V)

模块最佳工作电压:

5.0V

字符尺寸:

2.95×

4.35(W×

H)mm

引脚功能说明:

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表

编号

符号

引脚说明

1

VSS

9

D2

数据

2

VDD

电源正极

10

D3

3

VL

液晶显示偏压

11

D4

4

RS

数据/命令选择

12

D5

5

R/W

读/写选择

13

D6

6

E

使能信号

14

D7

7

D0

15

BLA

背光源正极

8

D1

16

BLK

背光源负极

 

表1引脚接口说明表

第1脚:

VSS为地电源。

第2脚:

VDD接5V正电源。

第3脚:

VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:

R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

第15脚:

背光源正极。

第16脚:

背光源负极。

其与单片机的连接如下图所示

图211602与单片机的链接

1602液晶模块内部的控制器共有11条控制指令,如下表所示

序号

指令

清显示

光标返回

*

置输入模式

I/D

S

显示开/关控制

D

C

B

光标或字符移位

S/C

R/L

置功能

DL

N

F

置字符发生存贮器地址

字符发生存贮器地址

置数据存贮器地址

显示数据存贮器地址

读忙标志或地址

BF

计数器地址

写数到CGRAM或DDRAM)

要写的数据内容

从CGRAM或DDRAM读数

读出的数据内容

表二

1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。

(说明1为高电平,0为低电平)

指令1:

清显示,指令码01H,光标复位到地址00H位置

指令2:

光标复位,光标返回到地址00H

指令3:

光标和显示位置设置I/D,光标移动方向,高电平右移,低电平左移,S:

屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。

指令4:

显示开关控制。

D:

控制整体的显示开与关,高电平表示开显示,低电平表示关显示。

C:

控制光标的开与关,高电平表示有光标,低电平表示无光标B:

控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:

光标或显示移位S/C:

高电平时显示移动的文字,低电平时移动光标

指令6:

功能设置命令DL:

高电平时为4位总线,低电平时为8位总线N:

低电平时为单行显示,高电平时为双行显示,F:

低电平时显示5X7的点阵字符,高电平时显示5X10的显示字符。

指令7:

字符发生器RAM地址设置。

指令8:

DDRAM地址设置。

指令9:

读忙信号和光标地址BF:

忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。

与HD44780相兼容的芯片时序表如下:

读状态

输入

RS=L,R/W=H,E=H

输出

D0—D7=状态字

写指令

RS=L,R/W=L,D0—D7=指令码,E=高脉冲

读数据

RS=H,R/W=H,E=H

D0—D7=数据

写数据

RS=H,R/W=L,D0—D7=数据,E=高脉冲

表三:

基本操作时序表

读写操作时序如图所示

图22读操作时序

图23写操作时序

7:

1602LCD的RAM地址映射及标准字库表

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。

要显示字符时要先输入显示字符地址,也就是告诉模块在,哪里显示字符,图是1602的内部显示地址。

图24LCD1602内部显示地址

例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?

这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。

在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。

每次输入指令前都要判断液晶模块是否处于忙的状态。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:

阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

二、软件

程序编写

/寄存器宏定义

#defineWRITE_SECOND0x80

#defineWRITE_MINUTE0x82

#defineWRITE_HOUR0x84

#defineREAD_SECOND0x81

#defineREAD_MINUTE0x83

#defineREAD_HOUR0x85

#defineWRITE_PROTECT0x8E

//位寻址寄存器定义

sbitACC_7=ACC^7;

//管脚定义

sbitSCLK=P3^5;

//DS1302时钟信号

7脚

sbitDIO=P3^6;

//DS1302数据信号

6脚

sbitCE=P3^7;

//DS1302片选

5脚

//地址、数据发送子程序

voidWrite1302(unsignedcharaddr,dat)

{

unsignedchari,temp;

CE=0;

//CE引脚为低,数据传送

中止

SCLK=0;

//清零时钟总线

CE=1;

//CE引脚为高,逻辑控制有效

//发送地址

for(i=8;

i>

0;

i--)//循环8次移位

SCLK=0;

temp=addr;

DIO=(bit)(temp&

0x01);

//每次传输低字

addr>

>

=1;

//右移一位

SCLK=1;

}

//发送数据

i--)

CE=0;

temp=dat;

dat>

SCLK=1;

//数据读取子程序

unsignedcharRead1302(unsignedcharaddr)

unsignedchari,temp,dat1,dat2;

CE=0;

CE=1;

节移一位

//右

//读取数据

}CE=0;

ACC_7=DIO;

ACC>

=1;

SCLK=0;

dat1=ACC;

dat2=dat1/16;

//数据进制转换

dat1=dat1%16;

//十六进制转十进制

dat1=dat1+dat2*10;

return(dat1);

//初始化DS1302

voidInitial(void)

Write1302(WRITE_PROTECT,0X00);

//禁止写保

Write1302(WRITE_SECOND,0x56);

//秒位初始化

Write1302(WRITE_MINUTE,0x34);

//分钟初始化

Write1302(WRITE_HOUR,0x12);

//

小时初始化

Write1302(WRITE_PROTECT,0x80);

允许写保护

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1