电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 17826|回复: 59

用DVD显示屏做一个电子钟。

  [复制链接]
发表于 2011-8-7 18:28:23 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
一个DVD拆机显示屏(7个8字),用的是SM1628驱动。想制作一个具有实时钟的显示屏,CPU打算用AT89S52,晶体用20M,实时钟用HT1380。今天有空焊好线路,把SM1628的时钟线接89S52的P3.5,数据线接P3.6,复位线接P3.7。HT1380时钟线接P1.0,数据线接P1.1复位线接P1.2。由于对SM1628不太熟透,在今后制作时,我想把随着制作的进度整个过程写出来,并希望得到各大师傅指点。
发表于 2011-8-7 19:53:44 | 显示全部楼层
好创意!我也想了解下,学习,学习!
发表于 2011-8-7 21:58:33 | 显示全部楼层
好创意!我也想了解下,学习,学习!
 楼主| 发表于 2011-8-8 14:26:13 | 显示全部楼层
本人是汇编语言的爱好者,只能用汇编语言编写一些简单的程序。
经过查看SM1628的资料,1628原说明用于共阴极的驱动,但经过试验,拆机显示屏是共阳极,由于本人是菜鸟想了很久,觉得比较困难,原说明共阴极LED是位扫描方式,现LED共阳极要段扫描方式。
原本共阴极的字模,还得要经过一段转换子程序才能实现。HT1380时钟由于本人以前用过,读写子程序可以抄以前的。
 楼主| 发表于 2011-8-10 14:31:48 | 显示全部楼层
汇编程序如下:

ORG 0000H ;有按键蜂鸣声,调按键有纠错功能。
ajmp start
ORG 000BH
AJMP YS200
ORG 0030h
start:
clr p1.2
setb p1.3;蜂鸣器。
MOV IE,#82H
MOV TMOD,#11H
MOV IP,#00H
MOV TH0,#00H
MOV TL0,#0F5H
SETB TR0 ;定时器0廷时子程序。
MOV 30H,#00H

MOV R1,#00H;在7位LED模块显示转灯,12:34:56
mov 2eh,#00h;按键暂处理。
MOV 78H,#00H
mov 3ch,#00h;调时用闪烁位。
setb p3.7  ; SM1628复位线。
clr p3.5    ;SM1628时钟线
acall aa000

ab000:
acall cc  ;读时钟HT1380。
acall cc0;分解1380数字
acall aa001;取模转换。
acall aa003;发送数据到SM1628显示储存RAM地址中。
ACALL key ;调时钟按键处理。
ACALL keyss ;按键送到显示测试。
acall aa004 ;转灯处理。

ACALL KEYSL
ajmp ab000

aa000:
MOV 6FH,#80H
MOV 34H,#00H
mov 60h,#04h
mov 61h,#03h
mov 62h,#01h
mov 63h,#0ah ;试按键显示。
MOV 64H,#05H
mov 65h,#06h
MOV 66H,#0AH
mov 67h,#0ah
mov 68h,#02h
MOV 69H,#0AH
MOV 70H,#0FFH
ret
aa001:

MOV A,32H ;调时间用闪烁位。
cjne a,#01h,uu0 ;第一位闪烁处理。
jb 2fh.6,bs
mov 63h,#0ah
uu0:

cjne a,#02h,uu1
jb 2fh.6,bs
mov 62h,#0ah

uu1:
cjne a,#03h,uu2
jb 2fh.6,bs
mov 68h,#0ah
uu2:
cjne a,#04h,uu3
jb 2fh.6,bs
mov 61h,#0ah
uu3:
cjne a,#05h,uu4
jb 2fh.6,bs
mov 60h,#0ah
uu4:
cjne a,#06h,uu5
jb 2fh.6,bs
mov 64h,#0ah
uu5:
cjne a,#07h,bs
jb 2fh.6,bs
mov 65h,#0ah

bs:
VV:
MOV R0,#70H
MOV R1,#60H
MOV DPTR,#TAB
AA1:
MOV A,@R1
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC R1
CJNE R1,#6AH,AA1
MOV 20h,#00h
mov 21h,#00h
mov 22h,#00h
mov 23h,#00h
mov 24h,#00h
mov 25h,#00h
mov 26h,#00h
mov 27h,#00h
mov 28h,#00h
mov 29h,#00h
mov 2ah,#00h
mov 2bh,#00h
mov 2ch,#00h
mov 2dh,#00h
KEY2:

UU:

MOV 76H,#0CH

MOV 77H,36H

MOV R1,#6FH
AA0:
MOV R0,#20H
AA2:
MOV A,@R1
CLR C
RLC A
MOV @R1,A
MOV A,@R0
RLC A


MOV @R0,A
INC R0
INC R0
CJNE R0,#2EH,AA2
INC R1
CJNE R1,#77H,AA0

MOV R1,#77H
AA3:
MOV R0,#21H
AA4:
MOV A,@R1
CLR C
RLC A
MOV @R1,A
MOV A,@R0
RLC A
MOV @R0,A
INC R0
INC R0
CJNE R0,#02FH,AA4
INC R1
CJNE R1,#79H,AA3
ret

YS200:
MOV TH0,#00H
MOV TL0,#00H
PUSH ACC
PUSH PSW

INC 30H
MOV A,30H
CJNE A,#08H,YS1;调闪烁位时间。
MOV 30H,#00H
cpl 2fh.6
INC 31H
MOV A,31H
CJNE A,#08H,YS1
MOV 31H,#00H


YS1:
jc ys2
mov 31h,#00h
ys2:

POP PSW
POP ACC
RETI







RET
aa003:
clr p3.7
nop
nop
mov a,#03h ;设定7位10段显示模式。
acall ss
setb p3.7
nop
nop
nop
nop
clr p3.7
mov a,#40h ;写显示RAM,地址由00H--0DH中。地址自动加一。
acall ss
setb p3.7
nop
nop
nop
nop
clr p3.7
nop
nop
mov a,#0c0h;写显示RAM,地址由00H起。
acall ss
mov r0,#20h
aa:
mov a,@r0
acall ss ;发送数据到SM1628中。
inc r0
cjne r0,#2Eh,aa
setb p3.7
nop
nop
nop
nop
nop
clr p3.7
mov a,#8fh
acall ss
setb p3.7
ret

aa004:
;转灯处理,廷时处理。

AB1:




MOV DPTR,#TAB2
MOV A,31H  ;30H由中断定时器计数得来。
MOVC A,@A+DPTR
MOV 6FH,A
CLR C
RRC A
CLR A
MOV ACC.7,C
MOV 36H,A    ;试转灯第八段。

AB3:
ret




AJMP VV
TAB:
DB 07eH 0cH 0b6H 9eH 0ccH 0daH 0faH 0EH 0FEH 0deH 00H
TAB2:
DB 0C7H 067H 02FH 03BH 0B9H 0F8H 0DCH 0D6H
ss: ;发送字节到SM1628中。
mov 4eh,#08h
bb:
rrc a
mov p3.6,c
nop
nop
setb p3.5
nop
nop
nop
nop
nop
clr p3.5
djnz 4eh,bb
ret
CC:
MOV A,#8EH  ;读HT1380时钟数据,读出放在50-50H中
MOV 5CH,#01H ;50h=秒,51H=分钟,52=小时。53H=日期。
MOV 5DH,#00H  ;54H=月分,55H=星期,56H=年份。
MOV R0,#5DH   ;57H=写保护。
ACALL FS1
MOV R0,#50H
MOV A,#0BFH
MOV 5CH,#08H
ACALL FS2
MOV A,50H
JNB ACC.7,fh
MOV A,#080H

mov r0,#5Dh
MOV 5CH,#01H
MOV 5DH,#00H
ACALL FS1
fh:
RET
ww1380:
mov a,#0beh
mov r0,#50h
mov 5ch,#08h
acall fs1






ret
FS1:
CLR P1.2;时钟=P1.0,数据=P1.1,复位=P1.2。
nop
nop
nop
nop
CLR P1.0
NOP
NOP
NOP
SETB P1.2
MOV R5,#08H
FASONG:
NOP
RRC A
MOV P1.1,C
NOP
NOP
SETB P1.0
NOP
NOP
NOP
NOP
NOP
CLR P1.0
DJNZ R5,FASONG
NOP
NOP
ZIESOU:
MOV A,@R0
MOV R5,#08H
NOP
NOP
fs08H:
RRC A
NOP
MOV P1.1,C
NOP
NOP
SETB P1.0
NOP
NOP
NOP
NOP
CLR P1.0
DJNZ R5,fs08h
NOP
INC R0
DJNZ 5CH,ZIESOU
NOP
CLR P1.2
RET

FS2:
CLR P1.2
NOP
NOP
CLR P1.0
NOP
NOP
NOP
NOP
SETB P1.2
NOP
NOP
NOP
MOV R5,#08H
NOP
NOP
ZSOU:
RRC A
MOV P1.1,C
NOP
NOP
SETB P1.0
NOP
NOP
NOP
NOP
NOP
CLR P1.0
DJNZ R5,ZSOU
NOP
NOP
NOP
CLR A
CLR C
ZSOU1:
MOV R5,#08H
NOP
ZSOU2:
NOP
MOV C,P1.1
RRC A
NOP
SETB P1.0
NOP
NOP
NOP
NOP
CLR P1.0
DJNZ R5,ZSOU2
NOP
MOV @R0,A
INC R0
DJNZ 5CH,ZSOU1
NOP
CLR P1.2
RET
cc0:
MOV R0,#50H  ;分解时钟。
MOV A,@R0
MOV R1,#65H
XCHD A,@R1
SWAP A
MOV R1,#64H
XCHD A,@R1
INC R0
MOV A,@R0
MOV R1,#60H
XCHD A,@R1
SWAP A
MOV R1,#61H
XCHD A,@R1
INC R0
MOV A,@R0
MOV R1,#68H
XCHD A,@R1
SWAP A
MOV R1,#62H
XCHD A,@R1
mov a,62h ;消除无效10时位零。
jnz zzz
mov 62h,#0ah
zzz:
mov 63h,#0ah ;前一位不显示。
RET
key:;按键处理。

mov r0,#37h

clr p3.7
nop
nop
mov a,#42h  ;读键命令发送。
acall ss

nop
nop
nop
nop
nop
nop
setb p3.6;置高数据线,等待读键。
clr a
dzb0:
nop
mov r5,#08h
dzb1:
nop
nop
nop
mov c,p3.6
rrc a

setb p3.5
nop
nop
nop
nop
nop
nop
clr p3.5
nop
nop
nop

djnz r5,dzb1
mov @r0,a
inc r0
cjne r0,#3ch,dzb0
setb p3.7
ret
keyss:;按键显示测试。
mov r0,#37h ;37H-3BH为按键暂存RAM。
mov a,@r0


mov c,acc.0
mov 2eh.0,c
mov c,acc.1
mov 2eh.1,c
mov c,acc.3
mov 2eh.2,c
mov c,acc.4
mov 2eh.3,c

ret
ys10ms: ;廷时10MS子程序。
mov 3eh,#0aah
ys10ms1:
mov 3fh,#0aah
djnz 3fh,$
djnz 3eh,ys10ms1
ret
keykz:  ;按键放开处理子程序。
acall key
acall keyss
mov a,2eh
acall ys10ms;廷时10MS。
cjne a,#00h,keykz
ret
ZSS0:;暂时处理显示。
MOV 40H,63H
MOV 41H,62H
MOV 42H,68H
MOV 43H,61H
MOV 44H,60H
MOV 45H,64H
MOV 46H,65H
RET
zss1:
mov 63h,40h
mov 62h,41h
mov 68h,42h
mov 61h,43h
mov 60h,44h
mov 64h,45h
mov 65h,46h
ret
KEYSL: ;按键处理子程序。

mov 4fh,#0ffh  ;廷时后退出寄存器。
mov a,2eh
cjne a,#01h,key3

acall ys10ms
acall key;  读键一次。
acall keyss;把键值放在2EH中。
MOV A,2EH
JZ KEY3
CJNE A,#01H,KEY3
acall fm;蜂鸣一次。
mov 2eh,#00h
acall cc0;分解时钟一次。
MOV A,62H
CJNE A,#0AH,KEY1;恢复十位0。
MOV 62H,#00H
KEY1:
mov 63h,#00h
acall zss0 ;保护好要显示的数据。

mov 32h,#01h;闪烁第一位。


acall keykz;松开调时间按键后进入。

;廷时退回主程序。
KEY5:;进入按键处理子程序。
ysts:

djnz 4fh,key4   ;廷时退回主程序
ysts1:
;djnz 3dh,ysts
;djnz 3ch,ysts1

acall wz1380;写入1380一次。
AJMP KEY3;返回主程序。
KEY4:

acall s1628
mov a,2eh
cjne a,#01h,key12
acall ys10ms
acall key
acall keyss
mov a,2eh
cjne a,#01h,key12
mov 4fh,#0ffh;增加廷时。
acall fm;蜂鸣一下。
inc 32h
mov a,32h
cjne a,#08h,key12
mov 32h,#01h


key12:
mov a,2eh
cjne a,#02h,key13 ;处理闪烁位加一。
ajmp jy ;转到加一子程序中。
key13:

acall keykz  ;松开?
key11:

AJMP KEY5
KEY3: ;返回主程序。

mov 32h,#00h

RET
jy:;闪烁位加一子程序。
acall ys10ms
acall  KEY

acall keyss
mov a,2eh
cjne a,#02h,zy09
acall fm;蜂鸣一次。

mov 4fh,#0ffh ;增加廷时时间。
acall keykz;放开按键了?

mov a,32h
cjne a,#01h,zy00
inc 40h
mov a,40h
cjne a,#0ah,zy091;处理
MOV 40H,#00H
AJMP ZY09
ZY091:
JC ZY09
MOV 40H,#00H
AJMP ZY09;如果40H大于0A就放入#00H。
zy00:
cjne a,#02h,zy01
inc 41h
mov a,41h
cjne a,#0ah,zy092
mov 41h,#00h
ajmp zy09
ZY092:
JC ZY09
MOV 41H,#00H
AJMP ZY09
zy01:
cjne a,#03h,zy02
inc 42h
mov a,42h
cjne a,#0ah,zy093
mov 42h,#00h
ajmp zy09
ZY093:
JC ZY09
MOV 42H,#00H
AJMP ZY09
zy02:
cjne a,#04h,zy04
inc 43h
mov a,43h
cjne a,#0ah,zy094
mov 43h,#00h
ajmp zy09
ZY094:
JC ZY09
MOV 43H,#00H
AJMP ZY09

zy04:
cjne a,#05h,zy05
inc 44h
mov a,44h
cjne a,#0ah,zy095
mov 44h,#00h
ajmp zy09
ZY095:
JC ZY09
MOV 44H,#00H
AJMP ZY09

ZY09:
AJMP ZY099

zy05:
cjne a,#06h,zy06
inc 45h
mov a,45h
cjne a,#0ah,zy096
mov 45h,#00h
ajmp zy09
ZY096:
JC ZY09
MOV 45H,#00H
AJMP ZY09

zy06:
cjne a,#07h,zy07
inc 46h
mov a,46h
cjne a,#0ah,zy097
mov 46h,#00h
AJMP ZY09
ZY097:
JC ZY09
MOV 46H,#00H

zy07:

zy099:
acall s1628
mov 31h,#0e0h
ajmp key5;返回加闪烁位子程序。
s1628:


acall zss1 ;恢复送1628显示数据。
acall key     ;读SM1628按键子程序。
acall keyss  ;按键处理。

ACALL aa001  ;取模转换成1628显示字模。
acall aa003   ;发送到1628中。
ret
wz1380: ;调好后回写一次HT1380时钟数据。
mov a,45h
swap a
add a,46h
mov 50h,a
mov a,43h
swap a
add a,44h
mov 51h,a
mov a,41h
swap a
add a,42h
mov 52h,a
acall ww1380
acall fm;蜂鸣一次.
ret
fm:
MOV R2,#088H
FM1:
clr  P1.3

FM0:

MOV r3,#0a0H
DJNZ r3,$

cpl P1.3
fm2:


DJNZ R2,FM0
setb p1.3
RET


end

发表于 2011-8-12 23:31:25 | 显示全部楼层
太复杂了,还是不做了。
发表于 2011-9-17 00:46:49 | 显示全部楼层
太复杂了,还是不做了
发表于 2011-9-29 19:39:44 | 显示全部楼层
好创意,谢谢分享!
发表于 2011-10-3 21:20:59 | 显示全部楼层
都是人才啊
发表于 2011-10-9 11:38:55 | 显示全部楼层
不知楼主的钟运行得怎样?
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-12-4 16:55 , Processed in 0.059149 second(s), 4 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表