毕业设计方案采用实时时钟芯片DS ATC的红外遥控LED电子钟.docx
《毕业设计方案采用实时时钟芯片DS ATC的红外遥控LED电子钟.docx》由会员分享,可在线阅读,更多相关《毕业设计方案采用实时时钟芯片DS ATC的红外遥控LED电子钟.docx(30页珍藏版)》请在冰豆网上搜索。
毕业设计方案采用实时时钟芯片DSATC的红外遥控LED电子钟
第1节引言…………………………………………………………………1
第2节电子钟硬件设计………………………………………………………2
2.1电子钟的工作原理……………………………………………………2
2.2电子钟的硬件电路……………………………………………………3
第3节系统软件设计…………………………………………………………5
一.引言
自制LED电子钟在很多电子报刊杂志上都可以见到,但大多数在断电后都要重新设置时间等参数,给使用带来很多不便。
也有用后备电池作为备用电源的,但往往体积较大。
本文介绍的LED电子钟克服了以往的弊端,而且采用了家电通用的红外遥控器进行控制,方便使用。
有一路闹铃输出,可以通过遥控器设置闹铃时间及允许与否。
二.电子钟硬件设计
电子钟的正面
电子钟的背面
一.工作原理
DS1302为达拉斯公司的一种实时时钟芯片,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。
采用普通32768Hz晶振。
AT89C2051作为主控芯片,一是对接收到的红外遥控编码进行判断识别,并执行相应的处理;第二就是定期的读取时钟芯片DS1302中的时间并把小时和肥以示在4位LED中;第三就是对设置的闹铃时间与实时时间进行比较,如果时间相同且闹铃允许,那么蜂鸣器就会以1秒的周期鸣响一分钟,提醒使用者。
如果要停止鸣闹,只要按遥控器相应键就可以关闭闹铃。
闹铃时间保存在DS1302自带的RAM中,不需要单独的EEPROM。
二.硬件电路
图一为电子钟的原理图,IC2为DS1302,电子爱好者可以向MAXIM公司索取免费样品。
Y2为32768Hz石英晶振,可以用普通电子表里的。
IC3为三脚的塑封一体化红外接收头。
LED1-4为高亮度共阳数码管。
89C2051所用的晶振Y1如果没有10MHz也可以用其他12M以内的代替,只要修改程序中YS1和YS2的延时参数,让其保持延时长度不变就行。
调整R2可以改变数码管亮度。
P1口接数码管的八字段。
数码管左两位显示小时,右两位显示分,当显示的是闹铃时间时闪动。
第二位和第三位的小数点作为秒闪动,注意第三位数码管按图一布好印制版后安装时要旋转180°,以便让时和分之间出现“:
”,最后一位小数点作为闹铃开关标志,亮表示闹铃开启。
蜂鸣器B2采用小型自带音源的。
要特别说明的是备用电源B1,可以用电池或者超级电容<10万uF以上)。
虽然DS1302在主电源掉电后,耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。
可以用老式电脑主板上的那种3.6V充电电池。
如果断电时间较短<几小时或几天)时,就可以用漏电较小的普通电解电容代替。
100uF就可以保证1小时的正常走时。
DS1302在第一次加电后,须进行初始化操作。
初始化后就可以按正常方法调整时间及闹铃。
三.软件
软件部分的重点是对DS1302的操作以及红外遥控的解码。
单片机解码可参看其他文章,这里主要对设置部分作一些说明:
遥控器采用长虹彩电K11F型遥控器,遥控器按照16位地址码,8位数据码以及8位数据码的反码发送。
表一列出了各按键的编码及本电子钟对应的动作。
如果采用其他遥控器,需对程序相应部分的编码作修改。
操作方法中,任意是指该键第一次按后,进入该状态,再次按后退出该状态。
时间设置:
按“菜单”键进入设置状态,LED只显示正常时间的小时,按“↑↓”键调整数值,按“←“、”→”键可在闹铃与正常时间之间移动。
任意时刻再次按“菜单”键就退出设置。
闹铃设置:
闹铃时间在时间设置中进行。
闹铃允许和取消可在任意时刻按“静音”键。
显示开关:
可在任意时刻按“显示”键开启和关闭显示器。
初始化:
在按“菜单”键进入设置状态后任意时刻按“日历”键,初始化后的时间为
2002/12/1/12:
00:
00
。
DS1302+AT89C2051的LED钟
。
遥控器各按键数据码,可根据不同的遥控器修改对应的键码
muteMEQU10h。
静音键闹铃开/关
timerTEQU0Ch。
菜单键进入/退出设置状态
leftLEQU46h。
左移键
rightREQU47h。
右移键
upUEQU19h。
增加键
downDEQU1dh。
减少键
d_offEQU16H。
显示键LED数码管显示/关闭
recallEQU44H。
日历键DS1302初始化操作
K_onBITP3.0。
闹铃输出
LED1BITP3.3
LED2BITP3.4
LED3CLKBITP3.5。
DS1302
LED4IOBITP3.7
RSTBITP3.1
SECONDEQU60H
。
60H秒
。
61h分
。
62h时
。
63h日
。
64h月
。
65hDAY
。
66h年
。
6Ah闹分from00(1302>
。
6BH闹时from01(1302>
ORG0000H
AJMPSTART
ORG0003H
LJMPS_INT。
IRF
ORG000BH。
200Us
LJMPP_INT。
ORG001BH。
displayLED
LJMPDISPLAY
。
mainprogram
ORG0030H
START:
CLRRST
MOVSP,#2AH
SETB05H
CLR06H
SETB07H。
CLR07H
CLR08H
CLR09H
CLR0AH
CLR0BH
CLR0CH
SETB0DH
CLR0EH
CLR0FH
CLR10H
CLR11H
MOVR2,#00H。
MOVR3,#00H。
MOVTMOD,#12H
MOVTL1,#0e5H。
wait
MOVTH1,#0BeH
MOVTH0,#3FH。
200uS3f
MOVTL0,#3FH
SETBET0
SETBET1
setbpt0
SETBTR0
SETBTR1
SETBIT0。
SETBEX0。
CLRPX0
。
LCALLSET1302。
初始化
MOVR1,#0C1H。
取定时参数从1302中
acallT_6061
MOV6AH,A。
M
MOVR1,#0C3H
ACALLT_6061
MOV6BH,A。
H
MOV61H,#0
MOV62H,#0
SETBEA
sjmp$
DISPLAY:
PUSHACC
PUSHPSW
MOVTL1,#0e0H。
waithowlongtodisplay(20ms>
MOVTH1,#0b0H
movdptr,#tab1
JB0EH,DIS2
JB0FH,DIS3
JB10H,DIS4
JB11H,DIS5
JNB0DH,D_OUT
JNB08H,D_GO。
定时到时,显示闪烁
JNB07H,D_OUT
D_GO:
MOVDPTR,#TAB1
MOVA,62H
ANLA,#0FH
MOVB,A
MOVA,62H
SWAPA
ANLA,#07H
MOVCA,@A+DPTR
MOVP1,A
CLRLED1
LCALLDL2M
SETBLED1
MOVA,B
MOVCA,@A+DPTR
MOVC,07H
MOVacc.7,C。
秒灯闪烁
MOVP1,A
CLRLED2
LCALLDL2M
SETBLED2
movdptr,#tab2。
倒装LED字段表
MOVA,61H
ANLA,#0FH
MOVB,A
MOVA,61H
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVC,07H
MOVacc.6,C。
秒灯闪烁
MOVP1,A
CLRLED3CLK
LCALLDL2M
SETBLED3CLK
movdptr,#tab1
MOVA,B
MOVCA,@A+DPTR
MOVC,06H
cplc
MOVacc.7,C。
闹铃指示灯
MOVP1,A
CLRLED4IO
LCALLDL2M
SETBLED4IO
D_OUT:
SETBTR1
POPPSW
POPACC
RETI
DIS2:
AJMPDIS_2
DIS3:
AJMPDIS_3
DIS4:
AJMPDIS_4
DIS5:
AJMPDIS_5
DIS_2:
movdptr,#tab1。
显示设置小时
MOV6FH,62H
ACALLBCD_HEX
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP1,A
CLRLED1
LCALLDL2M
SETBLED1
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
CLRLED2
LCALLDL2M
SETBLED2
SETBTR1
POPPSW
POPACC
RETI
DIS_3:
MOVDPTR,#TAB2。
显示设置分
MOV6FH,61H
ACALLBCD_HEX
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP1,A
CLRLED3CLK
LCALLDL2M
SETBLED3CLK
MOVA,B
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP1,A
CLRLED4IO
LCALLDL2M
SETBLED4IO
SETBTR1
POPPSW
POPACC
RETI
DIS_4:
movdptr,#tab1。
显示设置闹时
JNB07H,D4_OUT。
显示时闪烁
MOVA,6BH
MOVB,#0AH
DIVAB
MOVCA,@A+DPTR
MOVP1,A
CLRLED1
LCALLDL2M
SETBLED1
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
CLRLED2
LCALLDL2M
SETBLED2
D4_OUT:
SETBTR1
POPPSW
POPACC
RETI
DIS_5:
MOVDPTR,#TAB2
JNB07H,D5_OUT。
显示时闪烁
MOVA,6AH。
显示设置闹分
MOVB,#0AH
DIVAB
MOVCA,@A+DPTR
MOVP1,A
CLRLED3CLK
LCALLDL2M
SETBLED3CLK
MOVDPTR,#TAB1
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
CLRLED4IO
LCALLDL2M
SETBLED4IO
D5_OUT:
SETBTR1
POPPSW
POPACC
RETI
DL2M:
MOV43H,#14H。
everyLED(2ms>
DL2:
MOV44H,#14H
DL1:
NOP
NOP
DJNZ44H,DL1
DJNZ43H,DL2
RET
。
************************定时读取1302时间及判断闹铃时间是否到*******
P_INT:
PUSHACC
PUSHPSW
INCR2
CJNER2,#250D,P_OUT
MOVR2,#00H
INCR3
CJNER3,#10D,P_OUT
MOVR3,#00H
CPL07H
MOVP1,#0FFH
ACALLR_1302
OUT:
JNB06H,P_OUT
MOVA,6BH
MOVB,#10
DIVAB
SWAPA
ADDA,B
CJNEA,62H,PP_OUT
MOVA,6AH
MOVB,#10
DIVAB
SWAPA
ADDA,B
CJNEA,61H,PP_OUT
SETB08H。
定时到标志
MOVC,07H
cplc
MOVK_ON,C
P_OUT:
POPPSW
POPACC
RETI
PP_OUT:
SETBK_ON
CLR08H
POPPSW
POPACC
RETI
。
************************有接收到遥控器信号*******
S_INT:
CLREA
PUSHACC
PUSHPSW
PUSHDPH
PUSHDPL
PUSH02H
PUSH03H
MOVR6,#10D。
SB:
ACALLYS1
JBP3.2,EXIT
DJNZR6,SB
JNBP3.2,$。
ACALLYS2。
JBP3.2,EXIT
MOVR1,#1AH。
MOVR2,#4D
PP:
MOVR3,#8D
JJJJ:
JNBP3.2,$
ACALLYS1
MOVC,P3.2
JNCUUU
JBP3.2,$
UUU:
MOVA,@R1
RRCA
MOV@R1,A
DJNZR3,JJJJ
INCR1
DJNZR2,PP
。
-------------------------------------
MOVA,1AH。
XRLA,#40h。
判断1AH的值是否等于遥控器低8位地址<40h)
JNZEXIT。
MOVA,1bH
XRLA,#0bfh。
再判断高8位地址是否正确<0bfh)
JNZEXIT
MOVA,1CH
CPLA
XRLA,1DH。
将1CH的值取反后和1DH比较不同则无效丢弃<核对数据是否准确)
JNZEXIT
ACALLDO。
相应按键的处理
EXIT:
SETBEA
POP03H
POP02H
POPDPL
POPDPH
POPPSW
POPACC
RETI
。
--------------------delay-----------------------
YS1:
MOV70H,#16D。
延时1
D1:
MOV71H,#21D
DJNZ71H,$
DJNZ70H,D1
RET
YS2:
MOV70H,#09D。
延时2
D2:
MOV71H,#220D
DJNZ71H,$
DJNZ70H,D2
RET
。
---------------------------------------------------------
TAB:
DB00H,01H,02H,03H,04H,05H,06H,07H,08H,09H。
TAB1LED数码管显示表TAB遥控器键值表<未用)
。
TAB1:
DB3FH,11H,5EH,5BH,71H,6BH,6FH,19H,7FH,7bH,77H,7CH,39H,5EH,79H,71H
tab1:
DB0C0H,0F9H,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0a7h,0a1h,86h,8EH
TAB2:
DB0c0H,0f9H,64H,70H,59H,52H,42H。
倒装LED段码表
。
0CH为设置标志,0DH为全显示标志,0EH为显示设置小时标志,0FH为显示设置分标志
。
10H为显示设置闹时标志,11H为显示设置闹分标志
。
增加闹时静音功能
。
mute-10h,timer-0eh,left-46h,right-47h,up-19h,down-1dh
DO:
MOVA,1CH
CJNEA,#TIMERT,REDO。
代码不是设置/退出键
JNB0CH,SET1。
是,则进入
CLR0CH。
是,已经进入,则退出
SETB0DH。
恢复正常显示
CLR0EH
CLR0FH
CLR10H
CLR11H
RET
SET1:
SETB0CH
SETB0EH
CLR0DH
CLR0FH
CLR10H
CLR11H
RET
REDO:
CJNEA,#MUTEM,REDO1。
不是设置键的处理REDO1,2,3,4...
LJMPMUTE。
MUTE?
REDO1:
CJNEA,#D_OFF,DO_SET2
LJMPDIS_OFF。
关闭显示
DO_SET2:
JB0CH,SET2。
时间设置的处理
RET
SET2:
CJNEA,#UPU,SET2A
LJMPINC1。
+加(^>
SET2A:
CJNEA,#DOWND,SET2B
LJMPDEC2。
-减
SET2B:
CJNEA,#RIGHTR,SET2C
LJMPRIGHT。
RIGHT右移(>>
SET2C:
CJNEA,#LEFTL,SET2D
LJMPLEFT。
LEFT左移(<>
SET2D:
CJNEA,#RECALL,SET2EXT。
DS1302初始化
LJMPSET1302
SET2EXT:
RET
。
--------------------------------INC------------------------
INC1:
JB0EH,INCH
JB0FH,INCM
JB10H,INC_H
JB11H,INC_M
RET
INC_H:
INC6BH。
闹钟小时增加
MOVA,6BH
CJNEA,#24D,INCH3
MOV6BH,#0
INCH3:
MOVR1,#0C2H
MOVR0,6BH
ACALLSETONE。
写入DS1302
RET
INC_M:
INC6AH。
闹钟分增加
MOVA,6AH
CJNEA,#60D,INCH4
MOV6AH,#0
INCH4:
MOVR1,#0C0H
MOVR0,6AH
ACALLSETONE。
RET
INCH:
。
INC62H。
MOV6FH,62H
ACALLBCD_HEX
INCA
CJNEA,#24D,INCH1
MOVA,#0
INCH1:
MOV6FH,A
ACALLHEX_BCD
MOV62H,A
MOVR1,#84H
MOVR0,62H
ACALLSETONE。
RET
INCM:
。
INC61H。
MOV6FH,61H
ACALLBCD_HEX
INCA
CJNEA,#60D,INCH2
MOVA,#0
INCH2:
MOV6FH,A
ACALLHEX_BCD
MOV61H,A
MOVR1,#82H
MOVR0,61H
ACALLSETONE。
RET
。
----------------------------------DEC----------------------
DEC2:
JB0EH,DECH
JB0FH,DECM
JB10H,DEC_H
JB11H,DEC_M
RET
DECH:
MOV6FH,62H
ACALLBCD_HEX
DECA
CJNEA,#0FFH,DECH1
MOVA,#23
DECH1:
MOV6FH,A
ACALLHEX_BCD
MOV62H,A
MOVR1,#84H
MOVR0,62H
ACALLSETONE
RET
DECM:
MOV6FH,61H
ACALLBCD_HEX
DECA
CJNEA,#0FFH,DECM1
MOVA,#59
DECM1:
MOV6FH,A
ACALLHEX_BCD
MOV61H,A
MOVR1,#82H
MOVR0,61H
ACALLSETONE
RET
DEC_H:
DEC6BH
MOVA,6BH
CJNEA,#0FFH,DECH3
MOV6BH,#23D
DECH3:
MOVR1,#0C2H
MOVR0,6BH
ACALLSETONE
RET
DEC_M:
DEC6AH
MOVA,6AH
CJNEA,#0FFH,DECH4
MOV6AH,#59D
DECH4:
MOVR1,#0C0H
MOVR0,6AH
ACALLSETONE
RET
。
--------------------------------RIGHT----------------------
RIGHT:
JB0EH,RIGHT1
JB0FH,RIGHT2
JB10H,RIGHT3
JB11H,RIGHT4
RET。
右移
RIGHT1:
CLR0EH
SETB0FH
RET
RIGHT2:
CLR0FH
SETB10H
RET
RIGHT3:
CLR10H
SETB11H
RET
RIGHT4:
CLR11H
SETB0EH
RET
。
--------------------------------LEFT-----------------------
LEFT:
JB0EH,LEFT1
JB0FH,LEFT2
JB10H,LEFT3
JB11H,LEFT4
RET。
左移
LEFT1:
SETB11H
CLR0EH
RET
LEFT2:
SETB0EH
CLR0FH
RET
LEFT3:
SETB0FH
CLR10H
RET
LEFT4:
SETB10H
CLR11H
RET
。
------------------------------MUTE--------------
MUTE:
setbk_ON
CPL06H。
静音
CLR08H
RET
。
-----------------------------DISPLAYOFF--------
DIS_OFF:
CLRET1
CPL05H
JNB05H,REDORE
SETBET1
REDORE:
RET
。
------------------------------------初始化1302-------------------------
SET1302:
CLRRST。
2002年1月1日12:
00:
00
CLRLED3CLK
MOVSECOND,#0
MOV61H,#