1。电源vcc为5v,至少提供200ma。(可以用3w6v的变压器整流滤波再通过7805稳压获得。)
2。j1为液晶屏的接口,图中液晶屏选用的是hd61202芯片,128*64点阵,网友购买时需向供货商索要相关资料及接口定义。液晶屏的接口定义已实现标准化,但引脚分布可能不同,此千万要注意。如果购买时能测试液晶屏的好坏最好。

程序如下:
time0 equ 32 ;53ms
time1 equ 187 ;10s
sel0 equ 0feh ;秒低位
sel1 equ 0fdh ;秒高位
sel2 equ 0fbh ;分低位
sel3 equ 0f7h ;分高位
sel4 equ 0efh ;时低位
sel5 equ 0dfh ;时高位
sel6 equ 0bfh ;日低位
sel7 equ 07fh ;日高位
sel8 equ 0feh ;月低位
sel9 equ 0fdh ;月高位
sel10 equ 0fbh ;年低位
sel11 equ 0f7h ;年高位
selno equ 0ffh
;---------------------
outport data p0
selport0 data p2
selport1 data p1
second0 data 08h
second1 data 09h
minute0 data 0ah
minute1 data 0bh
hour0 data 0ch
hour1 data 0dh
date0 data 0eh
date1 data 0fh
month0 data 10h
month1 data 11h
year0 data 12h
year1 data 13h
selled data 30h ;led动态扫描计数
seldata data 31h ;修改时选择项目
key0data data 32h ;按键状态
key1data data 33h
key2data data 34h
key3data data 35h
tims data 36h
tims0 data 37h
;---------------------
rst bit p3.0
io bit p3.1
sclk bit p3.2
key0pin bit p1.4
key1pin bit p1.5
key2pin bit p1.6
key3pin bit p1.7
;---------------------
chgmode bit 20h.0 ;修改状态或平常状态
sel0dot bit 21h.0 ;小数点状态
sel1dot bit 21h.1
sel2dot bit 21h.2
sel3dot bit 21h.3
sel4dot bit 21h.4
sel5dot bit 21h.5
sel6dot bit 21h.6
sel7dot bit 21h.7
sel8dot bit 22h.0
sel9dot bit 22h.1
sel10dot bit 22h.2
sel11dot bit 22h.3
;---------------------
org 0
ljmp main
org 0bh
;----------------------------------------
tim0: MOV th0,#0f2h ;24m-1666us,50hz刷新率
MOV tl0,#0fch ;3332
push acc
push psw
push 00h
MOV a,selled
rl a
jmp @a+dptr
sellab: ajmp sel0do
ajmp sel1do
ajmp sel2do
ajmp sel3do
ajmp sel4do
ajmp sel5do
ajmp sel6do
ajmp sel7do
ajmp sel8do
ajmp sel9do
ajmp sel10do
;ajmp sel11do
sel11do:MOV selled,#0ffh
MOV c,sel11dot
MOV selport1,#sel11
ajmp sel10a
sel0do: MOV selport0,#sel0
MOV c,sel0dot
ajmp sel7a
sel1do: MOV selport0,#sel1
MOV c,sel1dot
ajmp sel7a
sel2do: MOV selport0,#sel2
MOV c,sel2dot
ajmp sel7a
sel3do: MOV selport0,#sel3
MOV c,sel3dot
ajmp sel7a
sel4do: MOV selport0,#sel4
MOV c,sel4dot
ajmp sel7a
sel5do: MOV selport0,#sel5
MOV c,sel5dot
ajmp sel7a
sel6do: MOV selport0,#sel6
MOV c,sel6dot
ajmp sel7a
sel7do: MOV selport0,#sel7
MOV c,sel7dot
sel7a: MOV selport1,#selno
ajmp _tim0a
sel8do: MOV selport1,#sel8
MOV c,sel8dot
ajmp sel10a
sel9do: MOV selport1,#sel9
MOV c,sel9dot
ajmp sel10a
sel10do:MOV selport1,#sel10
MOV c,sel10dot
sel10a: MOV selport0,#selno
;ajmp _tim0a
_tim0a:MOV f0,c
MOV a,selled
add a,#second0
MOV r0,a
MOV a,@r0
add a,#2
MOVc a,@a+pc
sjmp _tim0b
numlab: ;共阳
db 0c0h ;num_0
db 0f9h ;num_1
db 0a4h ;num_2
db 0b0h ;num_3
db 99h ;num_4
db 92h ;num_5
db 82h ;num_6
db 0f8h ;num_7
db 80h ;num_8
db 90h ;num_9
;db 88h ;num_a
;db 83h ;num_b
;db 0c6h ;num_c
;db 0a1h ;num_d
;db 86h ;num_e
;db 8eh ;num_f
_tim0b:MOV c,f0
MOV acc.7,c
MOV outport,a
inc selled
djnz tims,_tim0c
MOV tims,#time0
acall read1302 ;读1302/53ms
jnb chgmode,_tim0c
djnz tims0,_tim0c
clr chgmode ;修改模式结束
MOV a,#0ffh
MOV 21h,a
MOV 22h,a
_tim0c:MOV a,tims
anl a,#7
jnz _tim0d
acall key0 ;按键扫描
acall key1
acall key2
acall key3
_tim0d:pop 00h
pop psw
pop acc
reti
;----------------------------------------
main: MOV sp,#3fh
MOV tmod,#01h
setb tr0
MOV ie,#82h
clr a
MOV selled,a
MOV seldata,a
MOV 21h,a
MOV 22h,a
clr chgmode
MOV tims,#time0
MOV dptr,#sellab
sjmp $
;----------------------------------------
_key0do: ;up
acall _keyin
jnc _key0do0
ajmp inc_vale
_key0do0:
ret
;----------------------------------------
_key1do: ;down
acall _keyin
jnc _key0do0
ajmp dec_vale
;----------------------------------------
_key2do: ;left
acall _keyin
jnc _key3do0 ;第一次进入修改模式,不修改内容
inc seldata
MOV a,seldata
cjne a,#6,_key3do0
clr a ;秒-0,分-1,时-2,日-3,月-4,年-5
sjmp _key3do2
;----------------------------------------
_key3do: ;right
acall _keyin
jnc _key3do0 ;第一次进入修改模式,不修改内容
dec seldata
MOV a,seldata
cjne a,#0ffh,_key3do0
MOV a,#5 ;秒-0,分-1,时-2,日-3,月-4,年-5
_key3do2:
MOV seldata,a
_key3do0:
MOV a,seldata
cjne a,#4,$+3
jnc _key3do1
MOV 22h,#0ffh
MOV 21h,#0fch
jz _key3do0a
MOV b,a
MOV a,21h
rl a
rl a
djnz b,$-2
MOV 21h,a
_key3do0a:
ret
_key3do1:
clr acc.2 ;subb a,#4
MOV 21h,#0ffh
MOV 22h,#0fch
jz _key3do1a
MOV b,a
MOV a,22h
rl a
rl a
djnz b,$-2
MOV 22h,a
_key3do1a:
ret
;----------------------------------------
_keyin:
MOV c,chgmode
jc _keyin0
setb chgmode ;第一次进入修改模式
_keyin0:MOV tims0,#time1
ret
;----------------------------------------
read1302:
MOV r1,#second1+1
MOV b,#81h ;second
acall read1302a
MOV b,#83h ;minute
acall read1302a
MOV b,#85h ;hour
acall read1302a
MOV b,#87h ;date
acall read1302a
MOV b,#89h ;month
acall read1302a
MOV b,#8dh ;year
acall read1302a
ret
;----------------------------------------
read1302a:
setb rst
MOV a,b
acall wr_1302
acall rd_1302
clr rst
MOV b,a
anl a,#0fh
dec r1
MOV @r1,a
xch a,b
swap a
anl a,#07h
dec r1
MOV @r1,a
ret
;---------------------------
wr_cmd:
setb rst
push acc
MOV a,b
acall wr_1302
pop acc
acall wr_1302
clr rst
ret
;---------------------------
wr_1302:
MOV b,#8
wr_1302_0:
rrc a
MOV io,c
setb sclk
sjmp $+2
clr sclk
djnz b,wr_1302_0
ret
;---------------------------
rd_1302:
MOV b,#8
rd_1302_0:
setb sclk
setb io
MOV c,io
clr sclk
rrc a
djnz b,rd_1302_0
ret
;---------------------------
key0: jb key0pin,$+8
MOV key0data,#0
sjmp $+21h ;无键按下,跳
MOV a,key0data
cjne a,#0c0h,$+3
jnc $+0dh
add a,#40h
MOV key0data,a
cjne a,#0c0h,$+14
acall _key0do ;第一次
sjmp $+0fh
anl a,#3fh
djnz acc,$+7 ;第二次1.3s
acall _key0do
MOV a,#10 ;连键,200ms
orl a,#0c0h
MOV key0data,a
ret
;----------------------------------------
key1: jb key1pin,$+8
MOV key1data,#0
sjmp $+21h ;无键按下,跳
MOV a,key1data
cjne a,#0c0h,$+3
jnc $+0dh
add a,#40h
MOV key1data,a
cjne a,#0c0h,$+14
acall _key1do ;第一次
sjmp $+0fh
anl a,#3fh
djnz acc,$+7 ;第二次1.3s
acall _key1do
MOV a,#10 ;连键,200ms
orl a,#0c0h
MOV key1data,a
ret
;----------------------------------------
key2: jb key2pin,$+8
MOV key2data,#0
sjmp $+21h ;无键按下,跳
MOV a,key2data
cjne a,#0c0h,$+3
jnc $+0dh
add a,#40h
MOV key2data,a
cjne a,#0c0h,$+14
acall _key2do ;第一次
sjmp $+0fh
anl a,#3fh
djnz acc,$+7 ;第二次1.3s
acall _key2do
MOV a,#10 ;连键,200ms
orl a,#0c0h
MOV key2data,a
ret
;----------------------------------------
key3: jb key3pin,$+8
MOV key3data,#0
sjmp $+21h ;无键按下,跳
MOV a,key3data
cjne a,#0c0h,$+3
jnc $+0dh
add a,#40h
MOV key3data,a
cjne a,#0c0h,$+14
acall _key3do ;第一次
sjmp $+0fh
anl a,#3fh
djnz acc,$+7 ;第二次1.3s
acall _key3do
MOV a,#10 ;连键,200ms
orl a,#0c0h
MOV key3data,a
ret
;----------------------------------计算
inc_vale:MOV a,seldata
cjne a,#5,inc_vale_1
inc year0
MOV a,year0
cjne a,#10,inc_vale_0a
MOV year0,#0
inc year1
MOV a,year1
cjne a,#10,inc_vale_0a
MOV year1,#0
inc_vale_0a:
MOV a,year1
swap a
orl a,year0
MOV b,#8ch
acall wr_cmd
ajmp inc_vale_end
inc_vale_1:
cjne a,#4,inc_vale_2
MOV a,month1
jnz inc_vale_1b
inc month0
MOV a,month0
cjne a,#10,inc_vale_1a
MOV month0,#0
MOV month1,#1
ajmp inc_vale_1a
inc_vale_1b:
inc month0
MOV a,month0
cjne a,#3,inc_vale_1a
MOV month0,#1
MOV month1,#0
inc_vale_1a:
MOV a,month1
swap a
orl a,month0
MOV b,#88h
acall wr_cmd
ajmp inc_vale_end
inc_vale_2:
cjne a,#3,inc_vale_3
MOV a,date1
cjne a,#3,inc_vale_2b
inc date0
MOV a,date0
cjne a,#2,inc_vale_2a
MOV date0,#1
MOV date1,#0
sjmp inc_vale_2a
inc_vale_2b:
inc date0
MOV a,date0
cjne a,#10,inc_vale_2a
MOV date0,#0
inc date1
inc_vale_2a:
MOV a,date1
swap a
orl a,date0
MOV b,#86h
acall wr_cmd
ajmp inc_vale_end
inc_vale_3:
cjne a,#2,inc_vale_4
MOV a,hour1
cjne a,#2,inc_vale_3b
inc hour0
MOV a,hour0
cjne a,#4,inc_vale_3a
MOV hour0,#0
MOV hour1,#0
ajmp inc_vale_3a
inc_vale_3b:
inc hour0
MOV a,hour0
cjne a,#10,inc_vale_3a
MOV hour0,#0
inc hour1
inc_vale_3a:
MOV a,hour1
swap a
orl a,hour0
MOV b,#84h
acall wr_cmd
ajmp inc_vale_end
inc_vale_4:
cjne a,#1,inc_vale_5
inc minute0
MOV a,minute0
cjne a,#10,inc_vale_4a
MOV minute0,#0
inc minute1
MOV a,minute1
cjne a,#6,inc_vale_4a
MOV minute1,#0
inc_vale_4a:
MOV a,minute1
swap a
orl a,minute0
MOV b,#82h
acall wr_cmd
ajmp inc_vale_end
inc_vale_5:
inc second0
MOV a,second0
cjne a,#10,inc_vale_5a
MOV second0,#0
inc second1
MOV a,second1
cjne a,#6,inc_vale_5a
MOV second1,#0
inc_vale_5a:
MOV a,second1
swap a
orl a,second0
MOV b,#80h
acall wr_cmd
inc_vale_end:
ret
;--------------------------------------------
dec_vale:MOV a,seldata
cjne a,#5,dec_vale_1
dec year0
MOV a,year0
cjne a,#0ffh,dec_vale_0
MOV year0,#9
dec year1
MOV a,year1
cjne a,#0ffh,dec_vale_0
MOV year1,#9
dec_vale_0:
ajmp inc_vale_0a
dec_vale_1:
cjne a,#4,dec_vale_2
dec month0
MOV a,month0
jnz dec_vale_1a
MOV a,month1
jnz dec_vale_1b
MOV month0,#2
MOV month1,#1
ajmp inc_vale_1a
dec_vale_1b:
dec month1
MOV month0,#9
dec_vale_1a:
ajmp inc_vale_1a
dec_vale_2:
cjne a,#3,dec_vale_3
MOV a,date1
jnz dec_vale_2b
dec date0
MOV a,date0
cjne a,#0,dec_vale_2a
MOV date0,#1
MOV date1,#3
sjmp dec_vale_2a
dec_vale_2b:
dec date0
MOV a,date0
cjne a,#0ffh,dec_vale_2a
MOV date0,#9
dec date1
dec_vale_2a:
ajmp inc_vale_2a
dec_vale_3:
cjne a,#2,dec_vale_4
dec hour0
MOV a,hour0
cjne a,#0ffh,dec_vale_3a
MOV hour0,#9
dec hour1
MOV a,hour1
cjne a,#0ffh,dec_vale_3a
MOV hour0,#3
MOV hour1,#2
dec_vale_3a:
ajmp inc_vale_3a
dec_vale_4:
cjne a,#1,dec_vale_5
dec minute0
MOV a,minute0
cjne a,#0ffh,dec_vlae_4a
MOV minute0,#9
dec minute1
MOV a,minute1
cjne a,#0ffh,dec_vlae_4a
MOV minute1,#5
dec_vlae_4a:
ajmp inc_vale_4a
dec_vale_5:
inc second0
MOV a,second0
cjne a,#0ffh,dec_vlae_5a
MOV second0,#9
dec second1
MOV a,second1
cjne a,#0ffh,dec_vlae_5a
MOV second1,#5
dec_vlae_5a:
ajmp inc_vale_5a
;--------------------------------------------
;说明:本程序应网友slaoliu所做,没有经过电路试验和调试,有不对之处欢迎指正。
;led显示分布:
; 年(高低) 月(高低) 日(高低) 时(高低) 分(高低) 秒(高低)
; sl11 sl10 sl9 sl8 sl7 sl6 sl5 sl4 sl3 sl2 sl1 sl0
;平常状态:小数点不显示。
;修改状态:小数点显示正被修改的数据。
;key0:被修改的数据增加。
;key1:被修改的数据减少。
;key2:左循环选择要修改的项目。
;key3:右循环选择要修改的项目。