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

📄 程序2.txt

📁 教学打铃系统 变量定义 scl bit p3.3 sda bit p3.2 time0 equ 30H 秒Y time1 equ 31H 时Y time2 equ 32H 分Y tim
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;*************************************************************
;         教学打铃系统*04级********编写
;*************************************************************
;***********************数据处理*****************************
;变量定义
scl      bit p3.3
sda      bit p3.2
time0    equ 30H;秒Y
time1    equ 31H;时Y
time2    equ 32H;分Y
time3    equ 33H;十毫秒次数控制Y
disp_t00 equ 35H;秒个位Y(右)
disp_t01 equ 36H;秒十位
disp_t10 equ 37H;分个位
disp_t11 equ 38H;分十位
disp_t20 equ 39H;时个位
disp_t21 equ 3aH;时十位Y(左)
;-----------------------------------------------------------
t_01     equ 3bH;临时显存秒Y
t_02     equ 3cH;临时显存分Y
t_03     equ 3dH;临时显存时Y
nishi    equ 3eH;当前修改的是哪一临时位Y
nion     equ 3fH;当前打铃点序号
key_x1   equ 41H;按键检测数据是否与上一次相同,如果相同不累加,否则算为一次按键Y
key_ok   equ 42H;按键功能寄存/第二功能寄存Y
next_01  equ 43H;当前打铃序号
next_02  equ 44H;--------------分
next_03  equ 45H;--------------时
rall     equ 46H;打铃点总数
writ     equ 47H;0ffh为写状态,00H为不用写状态
ring     equ 48H;0ffh为打铃中,00H为打铃结束
setd     equ 49H;0ffh为20ms中断时间到!
nicui    equ 4AH;
rbign    equ 60H;打铃点在中的存储位置24co2
;**********************数据处理结束***************************
;*************************************************************
;                       主程序(main)
;*************************************************************
;-------------------------入口程序----------------------------
        org 0000H
            ajmp start
        org 001BH
            ajmp int_t1
        org 0040H
;------------------------主程序开始---------------------------
start:  mov sp,#50H
;------------------------数据初始化---------------------------
        mov time0,#00H
        mov time1,#00H
        mov time2,#00H
        mov time3,#00H
        mov t_01,#00H
        mov t_02,#00H
        mov t_03,#00H
        mov disp_t00,#3fH
        mov disp_t01,#3fH
        mov disp_t10,#3fH
        mov disp_t11,#3fH
        mov disp_t20,#3fH
        mov disp_t21,#3fH
        mov nion,#00H
        mov key_ok,#00H
        mov nicui,#00H
        clr  p3.1
        clr  p3.4
        mov writ,#00H
                              ;判断是否读芯片,是则读入、否则不读
        mov r4,#rbign         ;读打铃点总数
        mov r3,#1
        mov r0,#rall
        acall rd_eerom
        mov a,rall
        jz  n0_1
        clr c
        subb a,#40
        jc   n0_2              ;如打铃点数字超过40则将总打铃点设为0,
        mov rall,#00H          ;否则读出数据到80H为首地址的内存区
        mov r4,#rbign
        mov r0,#rall
        mov r3,#1
        acall wr_eeprom         ;写数据
        jmp n0_1
n0_2:   mov a,rall              ;读数据到内存
        rl  a                   ;打铃乘2得总的字节数
        mov r3,a
        mov r0,#80H
        mov r4,#00H
        acall rd_eerom
;------------------------开中断--------------------------------
n0_1:   acall   next5            ;查找和当前时间最接近的下一打铃点
        mov     TMOD,#10H
        mov     TL1,#0e0H       ;10 mS 的时间常数
        mov     TH1,#0b1H
        SETB    ET1
        SETB    TR1
        SETB    Ea
                                ;允许中断
;--------------------------------------------------------------
ne_1:   mov a,setd
        jz  ne_2
        acall next2
        acall next4             ;调用键盘检测(子程序四)
        mov setd,#00h
ne_2:   mov a,time0             ;比较下一打铃点
        jnz n0_4
        acall next6             ;打铃点检测
n0_4:   cjne a,#20,n0_5
        clr  p3.4
n0_5:   mov a,nion
        cjne a,#0ffH,n0_3
        acall next5
        mov nion,#00H
        ;jmp n0_3
        mov a,writ
        cjne a,#0ffH,n0_3       ;判断是否需要写数据
        mov r3,#1
        mov r0,#rall
        mov r4,#60H
        acall wr_eeprom
        mov a,rall
        rl  a
        mov r3,a
        mov r0,#80H
        mov r4,#00H
        acall wr_eeprom
        mov writ,#00H
n0_3:   jmp ne_1
;***********************主程序结束*****************************
;------------------------中断子程序----------------------------
int_t1: clr   tr1
        mov   tl1,#0e0H            ;20mS 定时常数
        mov   th1,#0b1H
        setb  tr1
        acall next1                ;调用调时(子程序一)
        mov   setd,#0ffH
        reti
;***********************子程序结束*****************************
;==============================================================
;用到数据a,r0,r4
;----------------------调时间(子程序一)-----------------------
next1:  mov   a,r3
        push  a
        mov   a,r0
        push  a
        mov   a,r4
        push  a
        mov   a,time3
        inc   a
        mov   time3,a
        cjne  a,#25,ne1_1          ;计时50毫秒
        mov   r4,key_ok
        cjne  r4,#00H,ne1_6
        cpl   p3.1
        jmp   ne1_1
ne1_6:  mov  b,key_ok
        jnb  b.6,ne1_1
        mov  r1,nishi
        mov  @r1,#0ffH
        mov  r0,#t_01
        acall next3
ne1_1:  cjne  a,#50,ne1_2          ;计时100毫秒
        mov   time3,#0
        mov   r0,#time0
        cjne  @r0,#3bH,second
        mov   @r0,#00h               ;秒加1
        inc   r0
        cjne  @r0,#3bH,minute        ;分加1
        mov   @r0,#00H
        inc   r0
        cjne  @r0,#17H,hour          ;时加1
        mov   @r0,#00H
        jmp   ne1_3
hour:   inc   @r0
        jmp   ne1_3
minute: inc   @r0
        jmp   ne1_3
second: inc   @r0
        cpl   p3.1
ne1_3:  mov   r4,key_ok
        cjne  r4,#00H,ne1_4          ;有键按下不调用此次拆字
        mov   r0,#time0
        jmp   ne1_5
ne1_4:  mov   r0,#t_01
ne1_5:  acall next3                  ;调用拆字(子程序三)
ne1_2:  pop a
        mov r4,a
        pop a
        mov r0,a
        pop a
        mov r3,a
        RET
;***********************子程序结束*****************************
;==============================================================
;影响r0,r5,r6,r7
;----------------------显示(子程序二)------------------------
next2:   mov a,r0
         push a
         mov r0,#disp_t00
         mov r5,#6
         mov a,#0dfH
ne2_1:   mov p2,a
         mov p0,@r0
         inc r0
         rr  a
         mov  r6,#23H
wait0:   mov  r7,#15H
         djnz r7,$
         djnz r6,wait0
         mov p2,#0
         mov p0,#0
         djnz r5,ne2_1
         pop a
         mov r0,a
         ret
;***********************子程序结束*****************************
;入口数据r0送须拆字的首地址,r1存储首地址。
;影响数据为,r0,a,b,r1,r3
;--------------------拆字程序(子程序三)----------------------
next3:   mov  r3,#3
         mov  r1,#disp_t00
ne3_1:   mov  a,@r0
         mov  b,#100
         div  ab
         jz   ne3_2
         mov  @r1,#00H
         inc  r1
         mov  @r1,#00H
         jmp  ne3_3
ne3_2:   mov  a,@r0
         mov  b,#10
         div  ab
         mov  r6,a
         mov  a,b
         mov  dptr,#leds
         movc a,@a+dptr
         mov  @r1,a
         inc  r1
         mov  a,r6
         movc a,@a+dptr
         mov  @r1,a
ne3_3:   inc  r1
         inc  r0
         djnz r3,ne3_1
         ret
;***********************子程序结束*****************************
;---------------------next5按下(子程序十二)------------------
next5:  mov a,rall             ;将与现在时间最接近的打铃点装入:next_01
        cjne a,#0,n5_8
        jmp n5_1
n5_8:   mov r0,#80H            ;next_02,next_03
        mov r1,#00H
n5_2:   mov a,@r0
        cjne a,time2,n5_4
        inc r0
        mov a,@r0
        cjne a,time1,n5_3
        jmp  n5_6
n5_3:   jc  n5_6
        inc r1
        mov next_01,r1
        mov next_02,@r0
        dec r0
        mov next_03,@r0
        jmp n5_7
n5_4:   jc  n5_5
        inc r1
        mov next_01,r1
        mov next_03,@r0
        inc r0
        mov next_02,@r0
        jmp n5_7
n5_5:   inc r0
n5_6:   inc r0
        inc r1
        mov a,r1
        cjne a,rall,n5_2
        mov r0,#80H
        mov next_01,#01H
        mov next_03,@r0
        inc r0
        mov next_02,@r0
        jmp n5_7
n5_1:   mov next_01,#00H
        mov next_02,#00H
        mov next_03,#00H
n5_7:   ret
;***********************子程序结束*****************************
;-------------------对时检查(子程序十三)---------------------
;==============================================================
next6:  mov a,rall
        jz  n6_1
        mov a,next_03            ;如果时间正确打铃一分钟
        cjne a,time2,n6_1
        mov a,next_02
        cjne a,time1,n6_1
        setb p3.4
        acall next5                   ;调到下一打铃点
n6_1:   ret
;***********************子程序结束*****************************
;--------------------按键检查(子程序四)----------------------
;r1临时数据地址参数,B为按键功能检测数据 a,b,r1
;--------------------------------------------------------------
next4:
        mov   a,p1
        mov   r1,nishi
        mov   @r1,nicui
        mov   b,key_ok
        cjne  a,key_x1,k_1
        jmp   ne4_1
k_1:    mov   key_x1,a
        mov   r4,key_ok
        jb    p1.0,kx_1           ;key_1按下
        acall key_1
        jmp   ne4_1
kx_1:   jnb   b.0,ne4_1
        jb    p1.1,kx_2           ;key_2按下
        acall key_2
        jmp   ne4_1
kx_2:   jb    p1.2,kx_3           ;key_3按下
        acall key_3
        jmp   ne4_1
kx_3:   jb    p1.3,kx_4           ;key_4按下
        acall key_4
        jmp   ne4_1
kx_4:   jb    p1.4,kx_5           ;key_5按下
        acall key_5
        jmp   ne4_1
kx_5:   jb    p1.5,kx_6           ;key_6按下
        acall key_6
        jmp   ne4_1
kx_6:   jb    p1.6,kx_7            ;key_7按下
        acall key_7
        jmp   ne4_1
kx_7:   jb    p1.7,ne4_1
        acall key_8                ;key_8按下
ne4_1:  mov   nishi,r1
        mov   nicui,@r1
        mov   key_ok,b
        ret
;***********************子程序结束*****************************
;----------------------key_1按下(子程序五)-------------------
key_1:  jb   b.6,nk1_1
        mov  t_03,#0aH              ;菜单
        mov  t_02,#00H
        mov  t_01,#00H
        setb b.0
nk1_1:  ret
;***********************子程序结束*****************************
;----------------------key_2按下(子程序六)-------------------
key_2:  jb   b.6,nk2_1              ;修改时间
        setb b.1
        mov  t_03,#0bH
        mov  t_02,#00H
        mov  t_01,#00H
nk2_1:  ret
;***********************子程序结束*****************************
;----------------------key_3按下(子程序七)-------------------
key_3:  jb   b.6,nk3_1             ;向左/增加打铃点
        setb b.2                   ;菜单选择
        mov  t_03,#0aH
        mov  t_02,#0aH
        mov  t_01,#00H
        jmp  nk3_2
nk3_1:  jb   b.4,nk3_2             ;删除
        jb   b.2,nk3_4             ;增加
        ;jb   b.3,nk3_4             ;修改
        cjne r1,#t_03,nk3_3        ;时间修改移位
        mov  r1,#t_01
        jmp  nk3_2
nk3_3:  inc  r1

⌨️ 快捷键说明

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