⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 源程序.asm

📁 51单片机的电子钟 显示时间 年月日 闹钟 整点报时 秒表 硬件原理图 仿真结果都有
💻 ASM
📖 第 1 页 / 共 2 页
字号:

;;;;;;;;;;;;;;;;;;;
;预定义部分;;;;;;;;
;;;;;;;;;;;;;;;;;;;

;预定义用来显示小时、分钟、秒钟的存储单元
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入口
reti
org 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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -