原作者:江湖大佬
一直想DIY台19寸机架来集中放置我那一堆零零散散音响器材。最先考虑的就是这电源总控盘。网购了个1U机盒要动手时,望着空空荡荡的多余空间,想起怎不再DIY上时钟更养眼呢。说干就干了。
设计特点:
硬件:这类时钟我们DIY时候可以校的很准,但因这类廉价晶震与温度有较大关联。但误差也应该在30″/月内。为实用考虑设计了只+/-30秒修正按键。凡秒未到30秒按下修正键,时:分不变,秒清零,简单。过了29秒按键就麻烦些,要考虑到23:59时候的按键进位处理哦,秒当然也清零。俺常理不出特别故障,这时间不会丢失,设计就将这时间调准按键放在机盒里。外部有只这+/-30妙按键就ok了。再加只总电源轻触控制开关。面板就简洁明快。
八只外AC输出开关插座选用40A固态开关,经软件使得同一枚按键相同操作呈现兵乓状态。按下=开;再按下=关。上电初始化=关。
软件:因为配置有实时时钟芯片DS1302。考虑了这芯片第一回上电与如遇掉电后时钟数据是否有效判别程序。如芯片是第一回上电或遇掉电,程序进入设置状态,屏幕出经典的0.5″亮0.5″灭。设置好正确时间后才呈常亮。如开机经4X8比特对比都正确,即进入调取DS1302芯片时间数据后进入正常显示程序。
就整一块,全部手工DIY跳线连接,比画Protel排版腐蚀工艺省事多多?要不是为参赛,我连电路图都不需画出。这样工艺是否属于更有DIY味道?
1U全铝机盒。
也是网上当垃圾价码来的,拆下8X8六块。
硬件主控选用8951。有4X8=32个I/O端口提供使用。细算下来这作品实时时钟DS1302=3;LED横向=8;纵向=40(虽然LED 6X8=48根,但没个显示字与时:分:妙间的间隔不必去控制它。省了8根);功能按键=3;控制固态开关输出=1。一共最少需要55根I/O线才满足。选用了74154二片。电路图画了整整一天,少作手生了。本很懒得去画电子版电路图。为了参赛规则呢就服从服从。
DIY进行时一。
DIY进行时二。DS1302实时芯片程序已先调通。
DIY进行时三。
DIY进行时四。
电路板软件编制 + 调试完好后总装开始。
总装结束状态。
前后图。后部发烧级插座价码不菲啊!
待入19寸机架的器件其中二件。
软件清单:
1 ; 2010shizhong.ASM 2010/08/10 shantou lishuzhuang zhongqu 13 204
2 ; XiaoXiaoChun LED384 DS1302
3 ;===============================================
4 ;DS1302 RESET
0020 5 czws data 20h ;串行操作位计数
0021 6 czzj data 21h ;串行操作字节数
0022 7 czzl data 22h ;操作指令地址
0023 8 xrsjdz data 23h ;写数据地址
0026 9 dcsjdz data 26h ;读数据地址
10 ;R0=写入操作数据间址
11 ;R1=读出操作数据间址
00B0 12 DS1302clk bit P3.0
00B1 13 DS1302io bit P3.1
00B2 14 DS1302rst bit p3.2
15 ;***********************************************
007F 16 intasj bit 2fh.7 ;7fh
007E 17 pd_dykg bit 2fh.6 ;7eh
0009 18 xsdw equ 09h
0010 19 xsout equ 10h
0012 20 xssj equ 12h
0013 21 a_tbj equ 13h
0014 22 a_tcbj equ 14h
0015 23 a_30bj equ 15h
0016 24 a_dybj equ 16h
0017 25 ms equ 17h
0018 26 s equ ms+1
0019 27 m equ s+1
001A 28 t equ m+1
0030 29 xst equ 30h
0036 30 xt equ xst+06h
003C 31 xdw1 equ xt+06h
003E 32 xsm equ xdw1+02h
0044 33 xm equ xsm+06h
004A 34 xdw2 equ xm+06h
004C 35 xss equ xdw2+02h
0052 36 xs equ xss+06h
00B3 37 a_30 bit p3.3
00B4 38 a_t bit p3.4
00B5 39 a_dykg bit p3.5
00B6 40 dykg bit p3.6
41 ;---------------------------------------
0000 42 org 0000h
0000 011D 43 ajmp ks_setint
44 ;----------------------------------------
000B 45 org 000bh
000B 758A07 46 mov tl0,#007h
000E 758CDC 47 mov th0,#0dch ;10ms ( CPU=11.0592M )
0011 D27F 48 setb intasj
0013 32 49 reti
50 ;----------------------------------------
001B 51 org 001bh
001B 014C 52 ajmp intb
53 ;----------------------------------------
001D 7FFF 54 ks_setint: mov R7,#0ffh
001F 7EFF 55 cs0: MOV r6,#0ffh
0021 00 56 cs1: nop
0022 00 57 nop
0023 00 58 nop
0024 DEFB 59 djnz r6,cs1
0026 DFF7 60 djnz r7,cs0
0028 D288 61 setb it0 ;IT0='1'
002A 758901 62 mov tmod,#01H ;T0=16wjs T1=13wjs
002D 758A00 63 mov tl0,#00h
0030 758C00 64 mov th0,#00h
0033 758167 65 mov sp,#067h
0036 D28C 66 setb tr0
0038 D2A9 67 setb et0
003A C2B9 68 clr pt0
003C 758D00 69 mov th1,#00h
003F 758B00 70 mov tl1,#00h
0042 D28E 71 setb tr1
0044 D2AB 72 setb et1
0046 D2BB 73 setb pt1
0048 D2AF 74 setb ea
004A 0196 75 ajmp t2887
76 ;***************************************************
004C 758B00 77 intb: mov tl1,#00
004F 758DF3 78 mov th1,#0f3h ;( LED = 40 )
0052 C0E0 79 push acc
0054 C0D0 80 push psw
0056 C000 81 push 00h ;R0
0058 758000 82 mov p0,#00h
005B E509 83 mov a,xsdw
005D B4F116 84 cjne a,#0f1h,intb1
0060 A812 85 mov r0,xssj
0062 851090 86 mov p1,xsout
0065 8680 87 mov p0,@r0
0067 E510 88 mov a,xsout
0069 23 89 rl a
006A F510 90 mov xsout,a
006C 0512 91 inc xssj
006E B4FE1E 92 cjne a,#11111110b,intb3
0071 7509D0 93 mov xsdw,#0d0h
0074 018F 94 ajmp intb3
0076 7590FF 95 intb1: mov p1,#0ffh
0079 8509A0 96 mov p2,xsdw
007C A812 97 mov r0,xssj
007E 8680 98 mov p0,@r0
0080 0512 99 inc xssj
0082 0509 100 inc xsdw
0084 E509 101 mov a,xsdw
0086 B4F106 102 cjne a,#0f1h,intb3
0089 8509A0 103 mov p2,xsdw
008C 751230 104 mov xssj,#030h
008F 105 intb3: ; mov p0,xrsjdz
008F D000 106 pop 00h
0091 D0D0 107 pop psw
0093 D0E0 108 pop acc
0095 32 109 reti
110 ;------------------------------------
0096 7F50 111 t2887: mov r7,#50h
0098 7810 112 mov r0,#10h
009A 7600 113 t28870: mov @r0,#0h
009C 08 114 inc r0
009D DFFB 115 djnz r7,t28870
009F 7509F1 116 mov xsdw,#0f1h
00A2 751230 117 mov xssj,#030h
00A5 7510FE 118 mov xsout,#11111110b
00A8 7466 119 mov a,#66h ;显示 :
00AA 793C 120 mov r1,#xdw1
00AC F7 121 mov @r1,a
00AD 09 122 inc r1
00AE F7 123 mov @r1,a
00AF 794A 124 mov r1,#xdw2
00B1 F7 125 mov @r1,a
00B2 09 126 inc r1
00B3 F7 127 mov @r1,a
00B4 3156 128 acall reset1302
00B6 11D4 129 acall bcd
00B8 307FFD 130 t2887a: jnb intasj,t2887a
00BB C27F 131 clr intasj
00BD 5189 132 acall aj1
00BF 0517 133 inc ms
00C1 E517 134 mov a,ms
00C3 B464F2 135 cjne a,#100,t2887a
00C6 751700 136 mov ms,#0h
00C9 5101 137 acall dc1302cz
00CB 11D4 138 acall bcd
00CD 80E9 139 jmp t2887a
00CF E512 140 t2887d: mov a,xssj
00D1 B430FB 141 cjne a,#030h,t2887d
142 ;-----------------------------------
00D4 90010B 143 bcd: mov dptr,#sj
00D7 7952 144 mov r1,#xs
00D9 E518 145 mov a,s
00DB 540F 146 anl a,#0fh
00DD 3147 147 acall lde384ss
00DF 794C 148 mov r1,#xss
00E1 E518 149 mov a,s
00E3 C4 150 swap a
00E4 540F 151 anl a,#0fh
00E6 3147 152 acall lde384ss
00E8 7944 153 mov r1,#xm
00EA E519 154 mov a,m
00EC 540F 155 anl a,#0fh
00EE 3147 156 acall lde384ss
00F0 793E 157 mov r1,#xsm
00F2 E519 158 mov a,m
00F4 C4 159 swap a
00F5 540F 160 anl a,#0fh
00F7 3147 161 acall lde384ss
00F9 7936 162 mov r1,#xt
00FB E51A 163 mov a,t
00FD 540F 164 anl a,#0fh
00FF 3147 165 acall lde384ss
0101 7930 166 mov r1,#xst
0103 E51A 167 mov a,t
0105 C4 168 swap a
0106 540F 169 anl a,#0fh
0108 3147 170 acall lde384ss
010A 22 171 ret
010B 7EFF8181 172 sj: db 07EH,0FFH,081H,081H,0FFH,07EH ;0
010F FF7E
0111 0082FFFF 173 db 000H,082H,0FFH,0FFH,080H,000H ;1
0115 8000
0117 C6E7B199 174 db 0C6H,0E7H,0B1H,099H,08FH,0C6H ;2
011B 8FC6
011D 42C38989 175 db 042H,0C3H,089H,089H,0FFH,076H ;3
0121 FF76
0123 382CA6FF 176 db 038H,02CH,0A6H,0FFH,0FFH,0A0H ;4
0127 FFA0
0129 4FCF8989 177 db 04FH,0CFH,089H,089H,0F9H,071H ;5
012D F971
012F 7EFF8989 178 db 07EH,0FFH,089H,089H,0FBH,072H ;6
0133 FB72
0135 0303F9FF 179 db 003H,003H,0F9H,0FFH,007H,001H ;7
0139 0701
013B 76FF8989 180 db 076H,0FFH,089H,089H,0FFH,076H ;8
013F FF76
0141 4EDF9191 181 db 04EH,0DFH,091H,091H,0FFH,07EH ;9
0145 FF7E
182 ;--------------------------------------------
0147 75F006 183 lde384ss: mov b,#06h
014A A4 184 mul ab
014B FE 185 mov R6,a
014C 7F06 186 mov r7,#06h
014E 93 187 lde384r7: movc a,@a+dptr
188 ; cpl a
014F F7 189 mov @r1,a
0150 0E 190 inc r6
0151 09 191 inc r1
0152 EE 192 mov a,r6
0153 DFF9 193 djnz r7,lde384r7
0155 22 194 ret
195 ;====== 判断DS1302芯片是否掉电 D1=07 D3=08 D5=09 ===
0156 196 reset1302:
0156 7522D1 197 mov czzl,#0d1h
0159 752101 198 mov czzj,#01h
015C 7926 199 mov r1,#dcsjdz
015E 5155 200 acall DS1302dc
0160 B4071D 201 cjne a,#07h,resetDS1302
0163 7522D3 202 mov czzl,#0d3h
0166 752101 203 mov czzj,#01h
0169 7926 204 mov r1,#dcsjdz
016B 5155 205 acall DS1302dc
016D B40810 206 cjne a,#08h,resetDS1302
0170 7522D5 207 mov czzl,#0d5h
0173 752101 208 mov czzj,#01h
0176 7926 209 mov r1,#dcsjdz
0178 5155 210 acall DS1302dc
017A B40903 211 cjne a,#09h,resetDS1302
017D 5101 212 acall dc1302cz
017F 22 213 ret
214 ;=============== DS1302 初始化 ==================
0180 215 resetDS1302:
0180 31C7 216 acall jcDS1302
0182 00 217 nop
218 ;--------------------DS1302涓流禁止--------------
0183 752290 219 mov czzl,#90h
0186 752101 220 mov czzj,#01h
0189 7823 221 mov r0,#xrsjdz
018B 752300 222 mov xrsjdz,#00h
018E 5123 223 acall DS1302xr
0190 00 224 nop
225 ;======= 写入DS1302芯片是否掉电判断数据 ==========
226 ; D0=07 D2=08 D4=09
0191 7522D0 227 mov czzl,#0d0h
0194 752101 228 mov czzj,#01h
0197 7823 229 mov r0,#xrsjdz
0199 752307 230 mov xrsjdz,#07h
019C 5123 231 acall DS1302xr
019E 00 232 nop
019F 7522D2 233 mov czzl,#0d2h
01A2 752101 234 mov czzj,#01h
01A5 7823 235 mov r0,#xrsjdz
01A7 752308 236 mov xrsjdz,#08h
01AA 5123 237 acall DS1302xr
01AC 00 238 nop
01AD 7522D4 239 mov czzl,#0d4h
01B0 752101 240 mov czzj,#01h
01B3 7823 241 mov r0,#xrsjdz
01B5 752309 242 mov xrsjdz,#09h
01B8 5123 243 acall DS1302xr
01BA 00 244 nop
245 ;============== 写入 12:00:00 ==============
01BB 752312 246 mov xrsjdz,#12h
01BE 752400 247 mov xrsjdz+1,#00h
01C1 752500 248 mov xrsjdz+2,#00h
01C4 31D5 249 acall xr1302zj
01C6 22 250 ret
251 ;************** 解除DS1302写保护 ***********
01C7 252 jcDS1302:
01C7 75228E 253 mov czzl,#8eh
01CA 752101 254 mov czzj,#01h
01CD 7823 255 mov r0,#xrsjdz
01CF 752300 256 mov xrsjdz,#00h
01D2 5123 257 acall DS1302xr
01D4 22 258 ret
259 ;============== 写入时,分,秒 =============
01D5 260 xr1302zj:
01D5 752284 261 mov czzl,#84h ;写时
01D8 752101 262 mov czzj,#01h
01DB 7823 263 mov r0,#xrsjdz
01DD 5123 264 acall DS1302xr
01DF 08 265 inc r0
01E0 00 266 nop
01E1 752282 267 mov czzl,#82h ;写分
01E4 752101 268 mov czzj,#01h
01E7 5123 269 acall DS1302xr
01E9 08 270 inc r0
01EA 00 271 nop
01EB 752280 272 mov czzl,#80h ;写秒
01EE 752101 273 mov czzj,#01h
01F1 5123 274 acall DS1302xr
275 ;============== 禁止DS1302写入 =================
01F3 75228E 276 mov czzl,#8eh
01F6 752101 277 mov czzj,#01h
01F9 7823 278 mov r0,#xrsjdz
01FB 752380 279 mov xrsjdz,#80h
01FE 5123 280 acall DS1302xr
0200 00 281 nop
282 ;=============== 读出DS1302时,分,秒 ===========
0201 283 dc1302cz:
0201 752285 284 mov czzl,#85h
0204 752101 285 mov czzj,#01h
0207 791A 286 mov r1,#t
0209 5155 287 acall DS1302dc
020B 00 288 nop
020C 752283 289 mov czzl,#83h
020F 752101 290 mov czzj,#01h
0212 7919 291 mov r1,#m
0214 5155 292 acall DS1302dc
0216 00 293 nop
0217 752281 294 mov czzl,#81h
021A 752101 295 mov czzj,#01h
021D 7918 296 mov r1,#s
021F 5155 297 acall DS1302dc
0221 00 298 nop
0222 22 299 ret
300 ;*********** DS1302写入程序 *****************
0223 301 DS1302xr:
0223 C2B2 302 clr DS1302rst
0225 00 303 nop
0226 C2B0 304 clr DS1302clk
0228 00 305 nop
0229 D2B2 306 setb DS1302rst
022B 00 307 nop
022C E522 308 mov a,czzl ;送操作指令
022E 752008 309 mov czws,#08h
0231 310 DS1302xrl:
0231 13 311 rrc a
0232 92B1 312 mov DS1302io,c
0234 00 313 nop
0235 D2B0 314 setb DS1302clk
0237 00 315 nop
0238 C2B0 316 clr DS1302clk
023A D520F4 317 djnz czws,DS1302xrl
023D 00 318 nop
023E 319 DS1302xr0:
023E E6 320 mov a,@r0 ;送写入数据
023F 752008 321 mov czws,#08h
0242 322 DS1302xr1:
0242 13 323 rrc a
0243 92B1 324 mov DS1302io,c
0245 00 325 nop
0246 D2B0 326 setb DS1302clk
0248 00 327 nop
0249 C2B0 328 clr DS1302clk
024B D520F4 329 djnz czws,DS1302xr1
330 ; inc r0
024E D521ED 331 djnz czzj,DS1302xr0
0251 00 332 nop
0252 C2B2 333 clr DS1302rst
0254 22 334 ret
335 ;*********** DS1302读出程序 ****************
0255 336 DS1302dc:
0255 C2B2 337 clr DS1302rst
0257 00 338 nop
0258 C2B0 339 clr DS1302clk
025A 00 340 nop
025B D2B2 341 setb DS1302rst
025D 00 342 nop
025E E522 343 mov a,czzl ;送操作指令
0260 752008 344 mov czws,#08h
0263 345 DS1302dcl:
0263 13 346 rrc a
0264 92B1 347 mov DS1302io,c
0266 00 348 nop
0267 D2B0 349 setb DS1302clk
0269 00 350 nop
026A C2B0 351 clr DS1302clk
026C D520F4 352 djnz czws,DS1302dcl
026F 00 353 nop
0270 354 DS1302dc0:
0270 E4 355 clr a
0271 C3 356 clr c
0272 752008 357 mov czws,#08h
0275 358 DS1302dc11: ;读出数据
0275 00 359 nop
0276 A2B1 360 mov c,DS1302io
0278 13 361 rrc a
0279 D2B0 362 setb DS1302clk
027B 00 363 nop
027C C2B0 364 clr DS1302clk
027E D520F4 365 djnz czws,DS1302dc11
0281 F7 366 mov @r1,a
367 ; inc r1
0282 D521EB 368 djnz czzj,DS1302dc0
0285 00 369 nop
0286 C2B2 370 clr DS1302rst
0288 22 371 ret
372 ;************* 按键处理 ****************
373 ;============= 时钟校准 ===========
0289 30B414 374 aj1: jnb a_t,aj12
028C 751300 375 mov a_tbj,#0
028F E514 376 mov a,a_tcbj
0291 6015 377 jz aj13
0293 751400 378 mov a_tcbj,#0
0296 31C7 379 acall jcDS1302
0298 51C1 380 acall sztz
029A 31D5 381 acall xr1302zj
029C 11D4 382 acall bcd
029E 41A8 383 ajmp aj13
02A0 0513 384 aj12: inc a_tbj
02A2 7813 385 mov r0,#a_tbj
02A4 7914 386 mov r1,#a_tcbj
02A6 51AA 387 acall ajc
02A8 41E3 388 aj13: ajmp aj2
389 ;---------- 长按键处理 ----------
02AA B61400 390 ajc: cjne @r0,#20,ajc0 ;@r0 > #20 cy='0'
02AD 4011 391 ajc0: jc ajcc ;cy='1' -> ajcc
02AF B63C0C 392 cjne @r0,#60,ajc1
02B2 7637 393 mov @r0,#55
02B4 31C7 394 acall jcDS1302
02B6 51C1 395 acall sztz
02B8 31D5 396 acall xr1302zj
02BA 11D4 397 acall bcd
02BC 8002 398 jmp ajcc
02BE 7714 399 ajc1: mov @r1,#20
02C0 22 400 ajcc: ret
401 ;--------- 时钟+1分 秒=0 -----------
02C1 752500 402 sztz: mov xrsjdz+2,#0
02C4 E51A 403 mov a,t
02C6 F523 404 mov xrsjdz,a
02C8 E519 405 mov a,m
02CA 2401 406 add a,#1
02CC D4 407 da a
02CD F524 408 mov xrsjdz+1,a
02CF B46010 409 cjne a,#60h,sztzc
02D2 752400 410 mov xrsjdz+1,#0
02D5 E51A 411 mov a,t
02D7 2401 412 add a,#1
02D9 D4 413 da a
02DA F523 414 mov xrsjdz,a
02DC B42403 415 cjne a,#24h,sztzc
02DF 752300 416 mov xrsjdz,#0
02E2 22 417 sztzc: ret
418 ;======== 时钟正负30秒调整 ==========
02E3 30B305 419 aj2: jnb a_30,aj21
02E6 751500 420 mov a_30bj,#0
02E9 611A 421 ajmp aj24
02EB E515 422 aj21: mov a,a_30bj
02ED 04 423 inc a
02EE B41427 424 cjne a,#20,aj23
02F1 751500 425 mov a_30bj,#00h
02F4 E518 426 mov a,s
02F6 B43000 427 cjne a,#30h,aj2pd
02F9 400A 428 aj2pd: jc aj22
429 ;-------------- 秒=0 分+1 ------------
02FB 31C7 430 acall jcDS1302
02FD 51C1 431 acall sztz
02FF 31D5 432 acall xr1302zj
0301 11D4 433 acall bcd
0303 611A 434 ajmp aj24
435 ;-------------- 秒清0 ------------------
0305 31C7 436 aj22: acall jcDS1302
0307 E51A 437 mov a,t
0309 F523 438 mov xrsjdz,a
030B E519 439 mov a,m
030D F524 440 mov xrsjdz+1,a
030F 752500 441 mov xrsjdz+2,#00h
0312 31D5 442 acall xr1302zj
0314 11D4 443 acall bcd
0316 611A 444 ajmp aj24
0318 F515 445 aj23: mov a_30bj,a
031A 611C 446 aj24: ajmp aj3
447 ;============ 总电源开关按键 ============
031C 30B507 448 aj3: jnb a_dykg,aj31
031F 751600 449 mov a_dybj,#0
0322 D27E 450 setb pd_dykg
0324 613A 451 ajmp aj34
0326 E516 452 aj31: mov a,a_dybj
0328 04 453 inc a
0329 B4140C 454 cjne a,#20,aj33
032C 751613 455 mov a_dybj,#19
032F 307E04 456 jnb pd_dykg,aj32
0332 C27E 457 clr pd_dykg
0334 B2B6 458 cpl dykg
0336 613A 459 aj32: ajmp aj34
0338 F516 460 aj33: mov a_dybj,a
033A 22 461 aj34: ret
462 ;******************************************
463 end
另外:玩着玩意库房翻出30来块带推动的显示板。
8X48=384粒。闲着也闲着。联想起将其配个控制板。销售后收些米看看有无可能。
并行输送方式与带三极管推动的板子现在已属过时落后了。
上述软件清单所列已移植完好。
板子已下单者二日可到手。
连电源100元。速递费按实计付。
原回复:
--- Signature ---
网络搬运工