- 积分
- 15
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
注解都在草稿上没有写上去。如果需要我加上。请教高手把这个语音报时在小8上实现。几点响几下。0点响12下,24点也响12下(响24下,大家都会晕吧。)最后一响时分同步变成00。
;ht1380,定闹钟 几点用几下嘀声报时.
;硬件定义:p1.4:数码管个位,p1.5管十位,P1.6:管百位,P1.7:管千位。P1.4-P1.7也是四个按键位
;ht1380:sck:p1.2,i\o:p1.3,rst:p3.5 beep:p3.4
;HT1380接收到的数据放入@R1所指定的内存单元中,而发送的数据在@R0所指定的内存单元中
;
ledg bit p1.4
leds bit p1.5
ledb bit p1.6
ledq bit p1.7
sclk bit p1.2
sdata bit p1.3
srst bit p3.5
beep bit p3.4
leddian bit 00h
beepbit bit leddian+1
m59 bit leddian+2
command equ 08h ;命令
bytecnt equ 09h ;发送或接收的字节数
bitcnt equ 0ah ;发送或接收的位数
whmsdata equ 40h ;写入1380的时,分,秒数据首址
rhmsdata equ 0eh ;读出1380的时,分,秒数据首址
org 00h
jmp main
org 0bh
jmp system
org 30h
main: mov sp,#70h
acall rest
acall rest1380
acall readhms
setb tr0
loop: acall display
jmp loop
rest: mov p3,#255
clr srst
mov p1,#255
mov scon,#0
mov r7,#200 ;1000MS用寄存器
mov r6,#30 ;30s,用于定时读取1380的数据
setb leddian ;秒点初始化
clr m59
clr beepbit
mov tmod,#1 ;定时器T0工作于模式1定时状态
mov th0,#0f6h
mov tl0,#3ch ;定时5MS的初值
setb ea
setb et0
ret
system: CLR TR0 ;语音报时
DJNZ R7,no1s
mov r7,#200
cpl leddian
jnb beepbit,s30
clr beep
jmp s30
no1s: cjne r7,#100,no1sout
cpl leddian
jnb beepbit,no1sout
setb beep
no1sout: mov th0,#0f6h
mov tl0,#49h
SETB TR0
RETI
s30: djnz r6,m59beep
setb beep
clr beepbit
acall readhms
mov a,#59h ;59分检测开始
clr c
cjne a,0fh,m59yesno
m59yesno:jc m59no
setb m59
mov r6,#60 ;修改R6为60秒
mov a,#240
anl a,0eh
swap a
mov b,#10
mul ab ;压缩bcd码转换成十进制
mov b,a
mov a,#15
anl a,0eh
add a,0f0h
inc a
cjne a,#25,h13_0
clr a
h13_0: jnz h13_1
mov r5,#48
jmp m59out
m59no: mov r6,#30
jmp no1sout
m59beep:jb beepbit,no1sout
jnb m59,no1sout
mov a,r5
cjne a,6h,no1sout
clr beep
setb beepbit
jmp no1sout
h13_1: clr c
cjne a,#13,h13_2
h13_2: jc h13_3
subb a,#12
h13_3: mov r5,a
mov a,#60
clr c
subb a,r5
mov r5,a
m59out: mov th0,#0f6h
mov tl0,#66h
SETB TR0
RETI |
|