工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->光电电路图->其他光电实用电路图->电子时钟日历制作原理图

电子时钟日历制作原理图

作者:dolphin时间:2016-09-14

电子时钟日历制作原理图、参考电路图、和应用程序、液晶屏选用的是HD61202芯片,128*64点阵。

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


程序如下:

time0equ32;53ms
time1equ187;10s
sel0equ0feh;秒低位
sel1equ0fdh;秒高位
sel2equ0fbh;分低位
sel3equ0f7h;分高位
sel4equ0efh;时低位
sel5equ0dfh;时高位
sel6equ0bfh;日低位
sel7equ07fh;日高位
sel8equ0feh;月低位
sel9equ0fdh;月高位
sel10equ0fbh;年低位
sel11equ0f7h;年高位
selnoequ0ffh
;---------------------
outPortdatap0
selPort0datap2
selPort1datap1 second0data08h
second1data09h
minute0data0ah
minute1data0bh
hour0data0ch
hour1data0dh
date0data0eh
date1data0fh
month0data10h
month1data11h
year0data12h
year1data13h selLEDdata30h;led动态扫描计数
sELDatadata31h;修改时选择项目
key0Datadata32h;按键状态
key1Datadata33h
key2Datadata34h
key3Datadata35h
timsdata36h
tims0data37h
;---------------------
rstbitp3.0
iobitp3.1
sclkbitp3.2
key0PINbitp1.4
key1Pinbitp1.5
key2Pinbitp1.6
key3Pinbitp1.7
;---------------------
chgModebit20h.0;修改状态或平常状态
sel0Dotbit21h.0;小数点状态
sel1Dotbit21h.1
sel2Dotbit21h.2
sel3Dotbit21h.3
sel4Dotbit21h.4
sel5Dotbit21h.5
sel6Dotbit21h.6
sel7Dotbit21h.7
sel8Dotbit22h.0
sel9Dotbit22h.1
sel10Dotbit22h.2
sel11Dotbit22h.3
;---------------------
org0
ljmpmain
org0bh
;----------------------------------------
tim0:movth0,#0f2h;24M-1666us,50Hz刷新率
movtl0,#0fch;3332
pushacc
pushpsw
push00h mova,selled
rla
jmp@a+dptr
selLab:ajmpsel0do
ajmpsel1do
ajmpsel2do
ajmpsel3do
ajmpsel4do
ajmpsel5do
ajmpsel6do
ajmpsel7do
ajmpsel8do
ajmpsel9do
ajmpsel10do
;ajmpsel11do
sel11do:movselled,#0ffh
movc,sel11Dot
movselPort1,#sel11
ajmpsel10a
sel0do:movselPort0,#sel0
movc,sel0Dot
ajmpsel7a
sel1do:movselPort0,#sel1
movc,sel1Dot
ajmpsel7a
sel2do:movselPort0,#sel2
movc,sel2Dot
ajmpsel7a
sel3do:movselPort0,#sel3
movc,sel3Dot
ajmpsel7a
sel4do:movselPort0,#sel4
movc,sel4Dot
ajmpsel7a
sel5do:movselPort0,#sel5
movc,sel5Dot
ajmpsel7a
sel6do:movselPort0,#sel6
movc,sel6Dot
ajmpsel7a
sel7do:movselPort0,#sel7
movc,sel7Dot
sel7a:movselPort1,#selno
ajmp_tim0a
sel8do:movselPort1,#sel8
movc,sel8Dot
ajmpsel10a
sel9do:movselPort1,#sel9
movc,sel9Dot
ajmpsel10a
sel10do:movselPort1,#sel10
movc,sel10Dot
sel10a:movselPort0,#selno
;ajmp_tim0a
_tim0a:movf0,c
mova,selled
adda,#second0
movr0,a
mova,@r0
adda,#2
movca,@a+pc
sjmp_tim0b
NUMLAB:;共阳
db0C0H;NUM_0
db0F9H;NUM_1
db0A4H;NUM_2
db0B0H;NUM_3
db99H;NUM_4
db92H;NUM_5
db82H;NUM_6
db0F8H;NUM_7
db80H;NUM_8
db90H;NUM_9
;db88H;NUM_A
;db83H;NUM_B
;db0C6H;NUM_C
;db0A1H;NUM_D
;db86H;NUM_E
;db8EH;NUM_F
_tim0b:movc,f0
movacc.7,c
movoutPort,a
incselled djnztims,_tim0c
movtims,#time0
acallread1302;读1302/53ms
jnbchgMode,_tim0c
djnztims0,_tim0c
clrchgMode;修改模式结束
mova,#0ffh
mov21h,a
mov22h,a
_tim0c:mova,tims
anla,#7
jnz_tim0d
acallkey0;按键扫描
acallkey1
acallkey2
acallkey3
_tim0d:pop00h
poppsw
popacc
reti
;----------------------------------------
main:movsp,#3fh
movtmod,#01h
setbtr0
movie,#82h
clra
movselled,a
movseldata,a
mov21h,a
mov22h,a
clrchgMode
movtims,#time0
movdptr,#selLab
sjmp$
;----------------------------------------
_Key0Do:;up
acall_keyIn
jnc_Key0Do0
ajmpinc_vale
_Key0Do0:
ret
;----------------------------------------
_Key1Do:;down
acall_keyIn
jnc_Key0Do0
ajmpdec_vale
;----------------------------------------
_Key2Do:;left
acall_keyIn
jnc_Key3Do0;第一次进入修改模式,不修改内容
incseldata
mova,seldata
cjnea,#6,_Key3Do0
clra;秒-0,分-1,时-2,日-3,月-4,年-5
sjmp_Key3Do2
;----------------------------------------
_Key3Do:;right
acall_keyIn
jnc_Key3Do0;第一次进入修改模式,不修改内容
decseldata
mova,seldata
cjnea,#0ffh,_Key3Do0
mova,#5;秒-0,分-1,时-2,日-3,月-4,年-5
_Key3Do2:
movseldata,a
_Key3Do0:
mova,seldata
cjnea,#4,$+3
jnc_Key3Do1
mov22h,#0ffh
mov21h,#0fch
jz_Key3Do0a
movb,a
mova,21h
rla
rla
djnzb,$-2
mov21h,a
_Key3Do0a:
ret
_Key3Do1:
clracc.2;subba,#4
mov21h,#0ffh
mov22h,#0fch
jz_Key3Do1a
movb,a
mova,22h
rla
rla
djnzb,$-2
mov22h,a
_Key3Do1a:
ret
;----------------------------------------
_keyIn:
movc,chgMode
jc_keyIn0
setbchgMode;第一次进入修改模式
_keyIn0:movtims0,#time1
ret
;----------------------------------------
read1302:
movr1,#second1+1
movb,#81h;second
acallread1302a
movb,#83h;minute
acallread1302a
movb,#85h;hour
acallread1302a
movb,#87h;date
acallread1302a
movb,#89h;month
acallread1302a
movb,#8dh;year
acallread1302a
ret
;----------------------------------------
read1302a:
setbrst
mova,b
acallwr_1302
acallrd_1302
clrrst
movb,a
anla,#0fh
decr1
mov@r1,a
xcha,b
swapa
anla,#07h
decr1
mov@r1,a
ret
;---------------------------
wr_cmd:
setbrst
pushacc
mova,b
acallwr_1302
popacc
acallwr_1302
clrrst
ret
;---------------------------
wr_1302:
movb,#8
wr_1302_0:
rrca
movio,c
setbsclk
sjmp$+2
clrsclk
djnzb,wr_1302_0
ret
;---------------------------
rd_1302:
movb,#8
rd_1302_0:
setbsclk
setbio
movc,io
clrsclk
rrca
djnzb,rd_1302_0
ret
;---------------------------
key0:jbKey0Pin,$+8
movKey0Data,#0
sjmp$+21h;无键按下,跳
mova,Key0Data
cjnea,#0c0h,$+3
jnc$+0dh
adda,#40h
movKey0Data,a
cjnea,#0c0h,$+14
acall_Key0Do;第一次
sjmp$+0fh
anla,#3fh
djnzacc,$+7;第二次1.3s
acall_Key0Do
mova,#10;连键,200ms
orla,#0c0h
movKey0Data,a
ret
;----------------------------------------
key1:jbKey1Pin,$+8
movKey1Data,#0
sjmp$+21h;无键按下,跳
mova,Key1Data
cjnea,#0c0h,$+3
jnc$+0dh
adda,#40h
movKey1Data,a
cjnea,#0c0h,$+14
acall_Key1Do;第一次
sjmp$+0fh
anla,#3fh
djnzacc,$+7;第二次1.3s
acall_Key1Do
mova,#10;连键,200ms
orla,#0c0h
movKey1Data,a
ret
;----------------------------------------
key2:jbKey2Pin,$+8
movKey2Data,#0
sjmp$+21h;无键按下,跳
mova,Key2Data
cjnea,#0c0h,$+3
jnc$+0dh
adda,#40h
movKey2Data,a
cjnea,#0c0h,$+14
acall_Key2Do;第一次
sjmp$+0fh
anla,#3fh
djnzacc,$+7;第二次1.3s
acall_Key2Do
mova,#10;连键,200ms
orla,#0c0h
movKey2Data,a
ret
;----------------------------------------
key3:jbKey3Pin,$+8
movKey3Data,#0
sjmp$+21h;无键按下,跳
mova,Key3Data
cjnea,#0c0h,$+3
jnc$+0dh
adda,#40h
movKey3Data,a
cjnea,#0c0h,$+14
acall_Key3Do;第一次
sjmp$+0fh
anla,#3fh
djnzacc,$+7;第二次1.3s
acall_Key3Do
mova,#10;连键,200ms
orla,#0c0h
movKey3Data,a
ret
;----------------------------------计算
inc_vale:mova,seldata
cjnea,#5,inc_vale_1
incyear0
mova,year0
cjnea,#10,inc_vale_0a
movyear0,#0
incyear1
mova,year1
cjnea,#10,inc_vale_0a
movyear1,#0
inc_vale_0a:
mova,year1
swapa
orla,year0
movb,#8ch
acallwr_cmd
ajmpinc_vale_end
inc_vale_1:
cjnea,#4,inc_vale_2
mova,month1
jnzinc_vale_1b
incmonth0
mova,month0
cjnea,#10,inc_vale_1a
movmonth0,#0
movmonth1,#1
ajmpinc_vale_1a
inc_vale_1b:
incmonth0
mova,month0
cjnea,#3,inc_vale_1a
movmonth0,#1
movmonth1,#0
inc_vale_1a:
mova,month1
swapa
orla,month0
movb,#88h
acallwr_cmd
ajmpinc_vale_end
inc_vale_2:
cjnea,#3,inc_vale_3
mova,date1
cjnea,#3,inc_vale_2b
incdate0
mova,date0
cjnea,#2,inc_vale_2a
movdate0,#1
movdate1,#0
sjmpinc_vale_2a
inc_vale_2b:
incdate0
mova,date0
cjnea,#10,inc_vale_2a
movdate0,#0
incdate1
inc_vale_2a:
mova,date1
swapa
orla,date0
movb,#86h
acallwr_cmd
ajmpinc_vale_end
inc_vale_3:
cjnea,#2,inc_vale_4
mova,hour1
cjnea,#2,inc_vale_3b
inchour0
mova,hour0
cjnea,#4,inc_vale_3a
movhour0,#0
movhour1,#0
ajmpinc_vale_3a
inc_vale_3b:
inchour0
mova,hour0
cjnea,#10,inc_vale_3a
movhour0,#0
inchour1
inc_vale_3a:
mova,hour1
swapa
orla,hour0
movb,#84h
acallwr_cmd
ajmpinc_vale_end
inc_vale_4:
cjnea,#1,inc_vale_5
incminute0
mova,minute0
cjnea,#10,inc_vale_4a
movminute0,#0
incminute1
mova,minute1
cjnea,#6,inc_vale_4a
movminute1,#0
inc_vale_4a:
mova,minute1
swapa
orla,minute0
movb,#82h
acallwr_cmd
ajmpinc_vale_end
inc_vale_5:
incsecond0
mova,second0
cjnea,#10,inc_vale_5a
movsecond0,#0
incsecond1
mova,second1
cjnea,#6,inc_vale_5a
movsecond1,#0
inc_vale_5a:
mova,second1
swapa
orla,second0
movb,#80h
acallwr_cmd
inc_vale_end:
ret
;--------------------------------------------
dec_vale:mova,seldata
cjnea,#5,dec_vale_1
decyear0
mova,year0
cjnea,#0ffh,dec_vale_0
movyear0,#9
decyear1
mova,year1
cjnea,#0ffh,dec_vale_0
movyear1,#9
dec_vale_0:
ajmpinc_vale_0a
dec_vale_1:
cjnea,#4,dec_vale_2
decmonth0
mova,month0
jnzdec_vale_1a
mova,month1
jnzdec_vale_1b
movmonth0,#2
movmonth1,#1
ajmpinc_vale_1a
dec_vale_1b:
decmonth1
movmonth0,#9
dec_vale_1a:
ajmpinc_vale_1a
dec_vale_2:
cjnea,#3,dec_vale_3
mova,date1
jnzdec_vale_2b
decdate0
mova,date0
cjnea,#0,dec_vale_2a
movdate0,#1
movdate1,#3
sjmpdec_vale_2a
dec_vale_2b:
decdate0
mova,date0
cjnea,#0ffh,dec_vale_2a
movdate0,#9
decdate1
dec_vale_2a:
ajmpinc_vale_2a
dec_vale_3:
cjnea,#2,dec_vale_4
dechour0
mova,hour0
cjnea,#0ffh,dec_vale_3a
movhour0,#9
dechour1
mova,hour1
cjnea,#0ffh,dec_vale_3a
movhour0,#3
movhour1,#2
dec_vale_3a:
ajmpinc_vale_3a
dec_vale_4:
cjnea,#1,dec_vale_5
decminute0
mova,minute0
cjnea,#0ffh,dec_vlae_4a
movminute0,#9
decminute1
mova,minute1
cjnea,#0ffh,dec_vlae_4a
movminute1,#5
dec_vlae_4a:
ajmpinc_vale_4a
dec_vale_5:
incsecond0
mova,second0
cjnea,#0ffh,dec_vlae_5a
movsecond0,#9
decsecond1
mova,second1
cjnea,#0ffh,dec_vlae_5a
movsecond1,#5
dec_vlae_5a:
ajmpinc_vale_5a
;--------------------------------------------
;说明:本程序应网友slaoliu所做,没有经过电路试验和调试,有不对之处欢迎指正。
;LED显示分布:
;年(高低)月(高低)日(高低)时(高低)分(高低)秒(高低)
;sl11sl10sl9sl8sl7sl6sl5sl4sl3sl2sl1sl0
;平常状态:小数点不显示。
;修改状态:小数点显示正被修改的数据。
;key0:被修改的数据增加。
;key1:被修改的数据减少。
;key2:左循环选择要修改的项目。
;key3:右循环选择要修改的项目。



评论

技术专区