周丹基于红外遥控的时钟1602显示Word格式文档下载.docx
《周丹基于红外遥控的时钟1602显示Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《周丹基于红外遥控的时钟1602显示Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
图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);
允许写保护