|
原贴在这里http://www.crystalradio.cn/bbs/thread-53935-1-1.html
代代拉拉的用了一个多月的时间作了一个12时制的数字钟。其实最难的还是写程序,这个是我第一次写带有中断的程序,说实在的,真的费了我好多的时间啊。
先来一张作完的成品照

大家猜猜,壳是用什么做的?

里面的结构

背面

变压器是以前一个随身听上的,初级绕组烧掉了,后来重绕了一下,结果用的漆包线较粗,只绕了一半就绕不下了,所以就串了个电容降压使用。

来几张加电后的效果图


关灯之后的

以下是以前在试验阶段拍的几张照片









下面是电路图

程序- ;简单的89C2051时钟程序
- ;显示方式为.12:34
- ;P1口输出段数据,P3口输出位数据
- ;P1.7为秒点,P3.7为PM输出
- ;P3.4校时,P3.5校分
- ;晶振12MHz
- ;作者:李树雨 E-mail:nnn2688@163.com
- flash equ 31h
- sec equ 32h ;定义秒存储位置
- min equ 33h ;定义分存储位置
- hour equ 34h
- hourk bit p3.4 ;调时按钮
- mink bit p3.5 ;调分按钮
- pm bit p3.7 ;PM输出端
- org 0000h
- ajmp start
- org 000bh
- ajmp int_t0
- org 0100h
- start: mov a,#00h ;清0
- mov 30h,a
- mov flash,a
- mov sec,a ;秒清0
- mov min,#00 ;分清0
- mov hour,#12
- mov sp,#60h ;重设堆栈指针
- setb pm ;PM清0
- mov p1,#0ffh
- mov p3,#0ffh
- mov tmod,#01h ;设定定时器0工作于方式1
- mov tl0,#0b0h ;设定定时初始值50ms
- mov th0,#3ch
- setb ea ;启动定时
- setb et0
- setb tr0
- key: lcall disp ;按键处理子程序
- jb hourk,mmm
- hhh: lcall disp
- jnb hourk,hhh
- inc hour ;时加1
- mov a,hour
- cjne a,#12,ppp
- cpl pm ;PM取反
- ppp: cjne a,#13,key
- mov hour,#01h ;12小时到,清零.
- mmm: jb mink,key
- nnn: lcall disp
- jnb mink,nnn
- inc min
- mov a,min
- cjne a,#60,key
- mov min,#00h ;一小时时间到
- ajmp key
- int_t0:push acc ;保护现场
- mov tl0,#0b0h ;赋定时初值
- mov th0,#3ch
- inc 30h ;20H地址加1
- mov a,30h
- cjne a,#10,reti1
- mov 30h,#00h ;半秒钟时间到
- inc flash ;半秒加1
- mov a,flash
- cjne a,#2,reti1
- mov flash,#00h
- inc sec ;秒加1
- mov a,sec
- cjne a,#60,reti1
- mov sec,#00h ;一分钟时间到
- inc min ;分加1
- mov a,min
- cjne a,#60,reti1
- mov min,#00h ;一小时时间到
- inc hour ;时加1
- mov a,hour
- cjne a,#12,cont
- cpl pm ;PM取反
- cont: cjne a,#13,reti1
- mov hour,#01h ;12小时到,清零.
- reti1: pop acc ;恢复现场
- reti ;中断返回
- disp: mov a,#10
- mov b,a
- mov a,hour
- div ab
- cjne a,#01,zero
- jmp normal
- zero: mov a,#10 ;消隐无效零
- normal:mov dptr,#tab
- movc a,@a+dptr
- mov p1,a
- clr p3.0
- lcall dely
- setb p3.0
- mov a,b
- mov dptr,#tab
- movc a,@a+dptr
- mov p1,a
- clr p3.1
- lcall dely
- setb p3.1
- mov a,#10
- mov b,a
- mov a,min
- div ab
- mov dptr,#tab
- movc a,@a+dptr
- mov p1,a
- clr p3.3
- lcall dely
- setb p3.3
- mov a,b
- mov dptr,#tab
- movc a,@a+dptr
- mov p1,a
- clr p3.2
- lcall dely
- setb p3.2
- mov a,flash
- cjne a,#00,light
- setb p1.7
- lcall dely
- jmp over
- light: clr p1.7
- lcall dely
- over: ret ;子程序返回
- tab: db 88h,0afh,91h,0a1h,0a6h,0e0h,0c0h,0adh,80h,0a0h,0ffh;共阳段码表0123456789不亮
- dely: mov r6,#10
- d1: mov r7,#20
- d2: djnz r7,d2
- djnz r6,d1
- ret
- end
复制代码 |
评分
-
1
查看全部评分
-
|