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

📄 lab5.asm

📁 51单片机上开发的电子时钟送LED显示时分秒
💻 ASM
字号:
;--------------------------------------------------------------
;               存储分配,R3显示秒位,R2显示分,R1显示时
;--------------------------------------------------------------
;--------------------------------------------------------------
;               伪指令定义区
;--------------------------------------------------------------
                
                ph_1     equ 75h
                second_1 equ 76h
                second_2 equ 77h
                minute_1 equ 78h   
                minute_2 equ 79h
                hour_1   equ 7ah
                hour_2   equ 7bh
                tmp      equ 7eh
                key      equ 7fh
                org 0000h
                ljmp main
                org 000bh
                ljmp int0
                org 0030h
;--------------------------------------------------------------
;               程序初始化
;--------------------------------------------------------------
                main:
                clr f0
                mov r1,#00h
                mov dptr,#rank_one
                mov tmp,#00h
                mov hour_1,#00h
                mov second_1,#00h
                mov minute_1,#00h
                mov hour_2,# 00h
                mov second_2,#00h
                mov minute_2,#00h
                mov p1,#00h
                mov r3,#200
                mov ph_1,#0feh
                mov p1,#0feh
                mov p0,#00h
                mov sp,#30h
                mov p2,#0ffh
                clr ea
                mov tmod,#01h
                mov th0,#0fcH
                mov tl0,#18h
                setb et0
                setb ea
                setb tr0
;--------------------------------------------------------------
                start:
                call scan_key
                ;jnb f0,rel
                ;mov p0,a
                ;rel:
                ;clr f0
                ljmp start
;--------------------------------------------------------------
;               键盘扫描函数
;--------------------------------------------------------------
                scan_key:
                mov p2,#0ffh
                mov P2,#0fh
                mov a,P2
                cjne a,#0fh,key_close
                ljmp  scan_key
                key_close:
                call delay              ;抗抖动
                cjne a,p2,scan_key
                mov r7,a
                mov P2,#0ffh
                mov P2,#0f0h
                nop
                nop
                mov a,P2
                cjne a,#0f0h,check
                ljmp scan_key
                check:
                cjne r7,#0eh,rank_2
                mov  key,#00h
                ljmp com
                rank_2:
                cjne r7,#0dh,rank_3
                mov key,#04h
                ljmp com
                rank_3:
                cjne r7,#0bh,rank_4
                mov key,#08h
                ljmp com
                rank_4:
                mov key,#0c0h
                com:
                cjne a,#0e0h,colo_2
                mov  a,#00h
                ljmp add_all
                colo_2:
                cjne a,#0d0h,colo_3
                mov  a,#01h
                ljmp add_all
                colo_3:
                cjne a,#0b0h,colo_4
                mov  a,#02h
                ljmp add_all
                colo_4:
                mov  a,#03h
                add_all:
                add a,key
                mov key,a
;--------------------------------------------------------------
;              功能按键检测,并且将设置的时分存入
;--------------------------------------------------------------
                xrl a,#0ah
                jnz number11
                mov a,tmp
                mov r0,#78h             ;minute_1地址
                xchd a,@r0
                inc r0
                swap a
                xchd a,@r0
                ljmp over
                number11:
                mov a,key
                xrl a,#0bh
                jnz number_key
                mov a,tmp
                mov r0,#7ah
                xchd a,@r0              ;hour_1地址
                swap a
                inc r0
                xchd a,@r0
                ljmp over
;--------------------------------------------------------------
;               数值按键存入
;--------------------------------------------------------------
                number_key:
                mov a,tmp
                swap a
                anl a,#0f0h
                orl a,key
                mov tmp,a
;--------------------------------------------------------------
;               以下供测试所用
;--------------------------------------------------------------             
                mov a,#0fh
                anl a,tmp
                movc a,@a+dptr
                setb f0   
                over:
                ret
;--------------------------------------------------------------
;               LED显示
;--------------------------------------------------------------
;--------------------------------------------------------------
;               延时函数
;--------------------------------------------------------------
                delay:
                mov r6,#1;
                loop0:mov r5,#250
                loop:
                mov r4,#250
                loop1:
                djnz r4,loop1
                djnz r5,loop
                djnz r6,loop0
                ret
                delay1:
                mov r6,#100;
                djnz r6,$
                ret
;--------------------------------------------------------------
;               定时中断,需要使用到R3
;--------------------------------------------------------------
 int0:
                push psw
                push a
                mov th0,#0f2h
                mov tl0,#018h
                clr tr0
                mov p1,ph_1
                djnz r3,rel
                inc second_1
                mov r3,#200
                rel:
                mov a,second_1
                xrl a,#0ah
                jnz zero
                mov second_1,#00h
                inc second_2
                zero:
;----------------------------------------------
                mov a,second_2
                xrl a,#06h
                jnz minute
                mov second_2,#00h
                inc minute_1
                minute:
;--------------------------------------------------------
                mov a,minute_1
                xrl a,#0ah
                jnz minute_two
                mov minute_1,#00h
                inc minute_2
                minute_two:
                mov a,minute_2
                xrl a,#06h
                jnz hour
                mov minute_2,#00h
                inc hour_1
                hour:
                mov a,hour_1
                xrl a,#0ah
                jnz hour_two
                mov hour_1,#00h
                inc hour_2
                hour_two:
                mov a,hour_2
                xrl a,#06h
                jnz hour_over
                mov minute_two,#00h
;-----------------------------------------------------------------
                hour_over:                              
                cjne r1,#5,one
                mov a,second_1
                movc a,@a+dptr
                mov ph_1,#07fh
                mov r1,#0ffh
                ljmp  here
                one:
                cjne r1,#4,two
                mov a,second_2
                movc a,@a+dptr
                ljmp  here
                two:
                cjne r1,#3,three
                mov a,minute_1
                movc a,@a+dptr
                ljmp  here
                three:
                cjne r1,#2,four
                mov a,minute_2
                movc a,@a+dptr
                ljmp  here
                four:
                cjne r1,#1,five
                mov a,hour_1
                movc a,@a+dptr
                ljmp  here
                five:
                mov a,hour_2
                movc a,@a+dptr
;----------------------------------------------
                here:
                mov p0,a 
                mov a,ph_1
                rl a
                mov ph_1,a
                inc r1
                pop a
                pop psw
                setb tr0
                reti
;--------------------------------------------------------------
;               定义LED编码表,该编码遵从行线接低,列线接高
; 0 1 2 3 4 5 6 7 8 9 hour  minute enter
;
;
;--------------------------------------------------------------
                rank_one:
                db 3fh,06h,5bh,4fh
                rank_two:
                db 66h,6dh,7dh,07h
                rank_three:
                db 0ffh,6fh,11h,22h
                rank_four:
                db 033h,0ffh,0ffh,0ffh
;--------------------------------------------------------------
;              2008-11-29   肖波
;--------------------------------------------------------------
                end

⌨️ 快捷键说明

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