最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

多功能电子钟

来源:动视网 责编:小OO 时间:2025-09-28 12:35:55
文档

多功能电子钟

预定义部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;预定义用来显示小时、分钟、秒钟的存储单元secLequ30h;秒的十位secHequ31h;秒的个位minLequ32h;minHequ33h;hourLequ34h;hourHequ35h;dayLequ36hdayHequ37hmonLequ38hmonHequ39hyearLequ3ahyearHequ3bhals_lequ40h;als_hequ41h;alm_lequ42h;alm_hequ43h;alh_lequ44
推荐度:
导读预定义部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;预定义用来显示小时、分钟、秒钟的存储单元secLequ30h;秒的十位secHequ31h;秒的个位minLequ32h;minHequ33h;hourLequ34h;hourHequ35h;dayLequ36hdayHequ37hmonLequ38hmonHequ39hyearLequ3ahyearHequ3bhals_lequ40h;als_hequ41h;alm_lequ42h;alm_hequ43h;alh_lequ44
预定义部分;;;;;;;; ;;;;;;;;;;;;;;;;;;;

;预定义用来显示小时、分钟、秒钟的存储单元secL equ 30h;秒的十位

secH equ 31h;秒的个位

minL equ 32h;

minH equ 33h;

hourL equ 34h;

hourH equ 35h;

dayL equ 36h

dayH equ 37h

monL equ 38h

monH equ 39h

yearL equ 3ah

yearH equ 3bh

als_l equ 40h;

als_h equ 41h;

alm_l equ 42h;

alm_h equ 43h;

alh_l equ 44h;

alh_h equ 45h;

xsbz equ 50h;

shanshou equ 51h;

mao_sfw equ 5ah;秒的十分位

mao_bfw equ 5bh;秒的百分位

mao_sw equ 5ch;秒的十位

mao_gw equ 5dh; 秒的各位

mao_qw equ 5eh;qianwei

mao_bw equ 5fh;baiwei

org 0000h;复位入口

ljmp main

org 000bh;定时器T0入口

ljmp time0

org 0003h;外部中断0入口

reti;

org 0013h;外部中断1入口

retiorg 001bh;定时器T1入口

ljmp time1;

org 0023h;串行中断入口

reti ;;;;;;;;;;;;;;;;;;;;;;

;主程序入口;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;

main:

;放置初始值,H表示低地址,L表示高地址mov secH,#0h

mov secL,#5h

mov minH,#9h

mov minL,#5h

mov hourH,#2h

mov hourL,#1h

mov yearH,#8h

mov yearL,#0h

mov monH,#1h

mov monL,#1h

mov dayH,#0h

mov dayL,#2h

mov als_l,#3h;

mov als_h,#1h;

mov alm_l,#3h;

mov alm_h,#0h;

mov alh_l,#1h;

mov alh_h,#2h;

mov mao_sfw ,#00h;秒的十分位

mov mao_bfw ,#00h;秒的百分位

mov mao_sw,#00h ;秒的十位

mov mao_gw,#00h ; 秒的各位

mov mao_qw,#00h;

mov mao_bw,#00h;

mov 50h,#00h;

mov 51h,#00h;

clr p3.2;

MOV SCON,#90H;串行口工作于方式2;定时器T0,T1设置

mov TMOD,#11H;设置T0与T1为16位定时器mov TL0,#0b0h;

mov TH0,#3ch;T0初值为3cb0h定时50ms mov TL1,#0f0h;

mov TH1,#0d8h;T1初值为fc18h定时10ms setb pt0;

setb EA;总中断允许

setb et0;

setb TR0;开启T0中断开始记时

mov r4,#20;定时次数,刚好1s

mov 60h,#0ah;定时器1定时次数10次start:

lcall display;

jnb P0.7,k0;

jnb p0.6,k1;

jnb p0.5,k3;

jnb p0.4,k4;

lcall naoling1;

lcall zhengdi

jmp start;

k0: lcall chxianshi;

k1: lcall k2

k4: ljmp jimiao; ;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;闪烁位加一;;;;;;;;;;;;;;;;;;;;;;;;;

k3: lcall dl30ms;

jb p0.5,outout;

set12: jnb p0.5,set12;

lcall chuan;

mov a,50h;

cjne a,#01h,sjiantz;

mov a,51h;

cjne a,#01h,zhwei;

mov r1,#dayH;

lcall add1;mov a,r3;

cjne a,#32h,ftiao;分若小于则转退出 mov dayH,#01h;否则清0

mov dayL,#00h;

ftiao: ljmp outout;

zhwei: cjne a,#02h,gwei;

mov r1,#monH;

lcall add1;

mov a,r3;

cjne a,#13h,outout;

mov monH,#01h;

mov monL,#00h;

ljmp outout;

gwei: cjne a,#03h,outout;

mov r1,#yearH;

lcall add1;

mov a,r3;

cjne a,#99h,outout;

mov yearH,#00h;

mov yearL,#00h;

ljmp outout;

outout: ljmp start; 跳出

sjiantz:cjne a,#00h,naozhtz;转闹钟调整

mov a,51h;

cjne a,#01h,zhwei2;

mov r1,#secH;

lcall add1;

mov a,r3;

cjne a,#60h,ftiao2;分若小于则转退出 mov secH,#00h;否则清0

mov secL,#00h;

ftiao2: ljmp outout;

zhwei2: cjne a,#02h,gwei2;

mov r1,#minH;

lcall add1;

mov a,r3;

cjne a,#60h,outout;mov minH,#00h;

mov minL,#00h;

ljmp outout;

gwei2: cjne a,#03h,outout;

mov r1,#hourH;

lcall add1;

mov a,r3;

cjne a,#24h,outout;

mov hourH,#00h;

mov hourL,#00h;

ljmp outout;

naozhtz:mov a,51h;

cjne a,#01h,zhwei3;

mov r1,#als_h;

lcall add1;

mov a,r3;

cjne a,#60h,ftiao3;分若小于则转退出 mov als_h,#00h;否则清0

mov als_l,#00h;

ftiao3: ljmp outout;

zhwei3: cjne a,#02h,gwei3;

mov r1,#alm_h;

lcall add1;

mov a,r3;

cjne a,#60h,outout;

mov alm_h,#00h;

mov alm_l,#00h;

ljmp outout;

gwei3: cjne a,#03h,outout;

mov r1,#alh_h;

lcall add1;

mov a,r3;

cjne a,#24h,outout;

mov alh_h,#00h;

mov alh_l,#00h;

ljmp outout; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;naoling ;;;;;;;;;;;;;;;;;;;;;;;;; naoling1:push acc;

setb p0.1

mov a,31h;

cjne a,41h,out6; mov a,30h;

cjne a,40h,out6; mov a,33h;

cjne a,43h,out6; mov a,32h;

cjne a,42h,out6; mov a,35h;

cjne a,45h,out6; mov a,34h;

cjne a,44h,out6; nao: clr P0.1

lcall display

jnb P0.4,stopnao sjmp nao stopnao: lcall dl30ms

mov P0,#0ffH

out6: pop acc;

lcall display;

ret; ;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;整点报时;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;; zhengdi: push acc;

mov a,31h;

cjne a,#00h,out7; mov a,30h;

cjne a,#00h,out7; mov a,33h;

cjne a,#00h,out7; mov a,32h;

cjne a,#00h,out7; mov a,#0ah;

clr p0.1;

clr p0.3

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

lcall display;

setb p0.1;

setb p0.3

out7: pop acc;

lcall display;

ret;;************************************************** ;函数名:

;功能: 串口发送数据函数

;传入参数: 无

;传出参数: A

;************************************************** chuan: MOV A,p0 ;读取P1口数据

MOV SBUF,A

JNB TI,$ ;等待发送完毕

CLR TI

lcall dl30ms;

wait: jnb ri,out9;

MOV A,SBUF

CLR RI

sjmp out10;

out9: lcall display;

jmp chuan;

out10: ret;

;************************************************** ;函数名:chxianshi

;功能: 显示调整函数

;传入参数: 无

;传出参数:

;************************************************** chxianshi: lcall dl30ms;

jb P0.7,set2;

set1: jnb p0.7,set1;

lcall chuan;

mov a,50h;

cjne a,#00h,nianfen

mov a,#01h;

mov 50h,a;;

sjmp set2;

nianfen: cjne a,#01h,naoling;

mov a,#02h;

mov 50h,a;sjmp set2;

naoling: cjne a,#02h,maobiao;

mov a,#03h;

mov 50h,a;

sjmp set2;

maobiao: mov a,#00h;

mov 50h,a;

set2: lcall display;

out: ret;

;************************************************** ;函数名:k2

;功能: 调整位移位函数

;传入参数: 无

;传出参数:

;************************************************** k2: lcall dl30ms;

jb P0.6,set11;判断是否有键按下

set10: jnb p0.6,set10;

lcall chuan;

mov a,51h;

cjne a,#00h,zliang

mov a,#01h;

mov 51h,a;;

sjmp set11;

zliang: cjne a,#01h,gliang;

mov a,#02h;

mov 51h,a;

sjmp set11;

gliang: cjne a,#02h,bliang;

mov a,#03h;

mov 51h,a;

sjmp set11;

bliang: cjne a,#03h,set11

mov a,#00h;

mov 51h,a;set11: lcall display;

ret;

;************************************************** ;函数名: jimiao

;功能: 计秒程序

;传入参数: 无

;传出参数: 无

;************************************************** jimiao: push PSW;

push acc;

lcall dl30ms;

jb p0.4,out5;

jimao1:jnb p0.4,jimao1;第一次开中断计秒

mov a,50h;

cjne a,#03h,out5;

setb et1;

setb tr1;

jimao2:call display;第二次停止

jb p0.4,jimao2;

lcall display;

jb p0.4,out5;

jimao3:jnb p0.4,jimao3;

clr tr1;

clr et1;

jimao4:call display;第三次清0

jb p0.4,jimao4;

lcall display;

jb p0.4,out5;

jimao5:jnb p0.4,jimao5;

mov mao_sfw ,#00h;秒的十分位

mov mao_bfw ,#00h;秒的百分位

mov mao_sw,#00h ;秒的十位

mov mao_gw,#00h ; 秒的各位

mov mao_qw,#00h;

mov mao_bw,#00h;

out5: pop acc;

pop PSW;ljmp start;

;;*********************************************** ;函数名 time1

;功能: t1中断函数

;传入参数: 无

;************************************************ time1:

push PSW

push acc

mov TL1,#0f0h;

mov TH1,#0d8h;T1初值为fc18h定时1ms

mov r1,#mao_bfw;指向秒计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

cjne a,#99h,outT01;当秒到未到达60时跳出中断

mov 5ah,#00h

mov 5bh,#00h;将秒清零

mov r1,#mao_gw;指向分计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

cjne a,#60h,outT01;当分钟未到达60时跳出中断

mov 5ch,#00h;

mov 5dh,#00h;

mov r1,#mao_bw;指向小时计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

cjne a,#60h,outT0;当小时未到达60时跳出中断

mov 5eh,#00h;

mov 5fh,#00h;

outt01:

pop acc

pop psw;恢复现场

reti ;中断返回

;************************************************** ;函数名: time0

;功能: t0中断处理程序函数

;传入参数: 无;************************************************** time0:

push PSW

push acc

push b ;保护现场

push 02h

push 01h

clr ET0;关T0中断允许

clr TR0;关T0定时中断

mov th0,#3ch;

mov a,#0b0h

add a,TL0

mov TL0,a;给定时器重新装值

setb TR0;允许计时

djnz r4,outT0;定时没到1s就退出中断

mov r4,#20;给r0重新赋值

mov r1,#secH;指向秒计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

cjne a,#60h,outT0;当秒到未到达60时跳出中断addmin: ;否则分钟加1

mov secL,#0

mov secH,#0;将秒清零

mov r1,#minH;指向分计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

cjne a,#60h,outT0;当分钟未到达60时跳出中断addhour: ;否则小时加1

mov minL,#0

mov minH,#0;将分清零

mov r1,#hourH;指向小时计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

cjne a,#24h,outT0;当小时未到达60时跳出中断

lcall rili ;调用日历子程序

outT0:

pop 01h

pop 02h

pop b

pop acc

pop psw;恢复现场

setb ET0;开放中断

reti ;中断返回

;************************************************** ;函数名: rili

;功能: 日历处理程序函数

;传入参数: 无

;传出参数:

;************************************************** rili:

addday: mov hourL,#0

mov hourH,#0;将小时清零

mov r1,#dayH;指向天计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

day31:

cjne a,#32h,day30;看是不是31号

ajmp addmon;是的话,加月

day30:

mov r5,a

cjne a,#31h,day29;看是不是30号;是的话,处理

mov a,#0h

mov a,monL

swap a

orl a,monh;将月份放入a中

cjne a,#04h,outri;判断是不是4,6,9,11中的某一月cjne a,#06h,outri

cjne a,#09h,outri

cjne a,#11h,outri;不是的话跳出

ajmp addmon;是的话,加月

day29:

mov a,r5

cjne a,#30h,day28;看是不是29号

mov a,#0hmov a,monL

swap a

orl a,monH

cjne a,#02h,outri;是的话,看月份是不是2月

ajmp addmon

day28:

mov a,r5

cjne a,#29h,outri;看是不是28号,不是的话跳出

mov a,#0h

mov a,monL

swap a

orl a,monH

cjne a,#02h,outri;看月份是不是2月;是2月,则判断是不是润年mov a,#0h

mov a,yearL

swap a

orl a,yearH

da a

mov b,#04h

div ab

mov r5,b

cjne r5,#0h,outri

ajmp addmon

addmon: ;月加1

mov dayL,#0

mov dayH,#0;将天清零

mov r1,#monH;指向月计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

cjne a,#12h,outri;当月未到达12时

addyear: ;年加1

mov monL,#0

mov monH,#0;将月清零

mov r1,#yearH;指向年计时单元

lcall add1;调用加1程序

mov a,r2;将经过处理的数据放入a中

outri:ret

;**************************************************

;函数名: add1

;功能: 加一函数

;传入参数: r1存的是地址指针

;r2存的是返回的处理数据

;**************************************************

add1:

mov a,#0;对a进行清零

dec r1;指向高四位数据地址

mov a,@r1;将高四位移入a

inc r1;指向低四位

swap a;a中高四位与低四位互换

orl a,@r1;将低四位显示数据放入a中

add a,#01h;

da a;对a中数据进行加1,并作十进制调整

mov r2,a;将处理后的数据移入r2中,注意r2中存的是十进制对应的bcd码

mov r3,a;下面是将a中然数据恢复为高位与低位

anl a,#0f0h;取高四位

swap a

dec r1;

mov @r1,a;将高四位移入低位地址中

mov a,r3;将暂存数据移回

anl a,#0fh;取其低四位

inc r1;指针指向高四位地址

mov @r1,a;将低四位移到高位地址中

ret ;子程序返回

;**************************************************

;函数名: display

;功能: 显示处理程序函数

;传入参数: 无

;传出参数:

;************************************************** display:mov a,50h;

cjne a,#00H,dat;00h是时间显示不等则转到年份显示

timdis: mov r0,#secL;dat: cjne a,#01h,ala;若为01h则显示年份,否则显示闹钟 mov r0,#dayL;

sjmp aa;

ala: cjne a,#02h,mbiao

mov r0,#als_l;

sjmp aa;

mbiao: mov r0,#mao_sfw;

nop;

aa: mov p2,#0ffh;

mov a,@r0

mov dptr,#TAB

movc a,@a+dptr;

mov p1,a;

mov a,51h;

cjne a,#01h,aa01;

mov a,r4;

rrc a;

jnc aa02;

aa01: mov p2,#0feh;

aa02: lcall dl5ms;

lcall dl5ms;

mov p2,#0FFh;

inc r0;

mov a,@r0

mov dptr,#TAB

movc a,@a+dptr;

mov p1,a;

mov a,51h;

cjne a,#01h,bb01;

mov a,r4;

rrc a;

jnc bb02;

bb01: mov p2,#0fdh;

bb02: lcall dl5ms;

lcall dl5ms;

mov p2,#0ffh;mov a,@r0

mov dptr,#TAB

movc a,@a+dptr;

mov p1,a;

mov a,51h;

cjne a,#02h,cc01;

mov a,r4

rrc a;

jnc cc02

cc01: mov p2,#0fbh; cc02: lcall dl5ms; lcall dl5ms;

mov p2,#0ffh;

inc r0;

mov a,@r0

mov dptr,#TAB

movc a,@a+dptr;

mov p1,a;

mov a,51h;

cjne a,#02h,dd01;

mov a,r4

rrc a;

jnc dd02

dd01: mov p2,#0f7h; dd02: lcall dl5ms; lcall dl5ms;

mov p2,#0ffh;

inc r0;

mov a,@r0

mov dptr,#TAB

movc a,@a+dptr;

mov p1,a;

mov a,51h;

cjne a,#03h,ee01;

mov a,r4

rrc a;jnc ee02

ee01: mov p2,#0efh; ee02: lcall dl5ms; lcall dl5ms;

mov p2,#0ffh;

inc r0;

mov a,@r0

mov dptr,#TAB

movc a,@a+dptr;

mov p1,a;

mov a,51h;

cjne a,#03h,ff01;

mov a,r4

rrc a;

jnc ff02

ff01: mov p2,#0dfh; ff02: lcall dl5ms; lcall dl5ms;

ret; ;;;;;;;;;;;;

;延时程序;;;

;1ms延时;;;; ;;;;;;;;;;;;

delay1ms:

mov R6,#14H

dl1:mov R7,#19H

dl2:djnz R7,dl2

djnz R6,dl1

ret

dl5ms: mov 55h,#03h; d2: mov 56h,#0fh; d1: djnz 56h,d1; djnz 55h,d2;

ret;

dl30ms: lcall dl5ms;

lcall dl5ms;

lcall dl5ms;

lcall dl5ms;

lcall dl5ms;

lcall dl5ms;

ret;

dl20ms: lcall dl5ms;

lcall dl5ms;

lcall dl5ms;

lcall dl5ms;

ret;

TAB:DB 0C0H,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h; end

文档

多功能电子钟

预定义部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;预定义用来显示小时、分钟、秒钟的存储单元secLequ30h;秒的十位secHequ31h;秒的个位minLequ32h;minHequ33h;hourLequ34h;hourHequ35h;dayLequ36hdayHequ37hmonLequ38hmonHequ39hyearLequ3ahyearHequ3bhals_lequ40h;als_hequ41h;alm_lequ42h;alm_hequ43h;alh_lequ44
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top