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

📄 alarm.txt

📁 电话报警系统的51单片机程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
                              ljmp testpw_end

tp61: 
                              clr tr0                        
                              clr c 
                              mov a,54h                
           subb a,#0ah
           jnc tp_101           
                              mov a,position          
                              cjne a,#5eh,save_buffle01
                              ljmp reapt
save_buffle01:
                              mov r0,position        ;键值是09a之间
                              mov @r0,54h
                              inc position
          inc count1
         mov a,count1
         cjne a,#length_pw,tp92
         setb right
totp92:
         ljmp tp92                 
                                                         
tp_101: 
                              mov a,54h
         clr c
                              subb a,#0ah
         jz test_a
                              mov 54h,#0ffh          
                              ljmp tp92 
test_a:   
         mov position,#5ah
         mov count1,#0

         inc count2
         jb right,tp_3
         mov a,count2
         cjne a,#times_pw,times_no
         ljmp testpw_end
times_no:
                              ljmp reapt
                               
tp_3:
         clr right 
         mov r0,#24h
         
cmpagain:                     
         mov 29h,@r0
                       mov a,r0                                
         add a,#36h
         mov r0,a
                              mov a,@r0
         cjne a,29h,tryagain         
         mov a,r0
         clr c
         subb a,#36h
         mov r0,a
         inc r0
         cjne r0,#28h,cmpagain

         setb valid1
                              lcall beep
         ljmp testpw_end
tryagain:                      
                             
    clr valid1  
         mov a,count2
         cjne a,#times_pw,times_no

testpw_end:
                 mov count2,#00
                        lcall beep
   mov a,#10h 
                      lcall disp_seg 
         
ret
;==============================
rd_valid:
                        mov r6,#05
                           
       mov MRD,#51h
 LCALL  IRDNBYTE
 MOV A,MRD
   cjne a,#0,valid_1
   clr valid
   ajmp rd_valid_out
valid_1:
                        cjne a,#0ffh,rd_valid
   setb valid

rd_valid_out:           ret

;===============================保存valid 于eeprom===================
save_valid:
                        jb valid,iic05_1
           mov a,#0
                        mov 3ch,a
   ljmp save_valid1
iic05_1:
                        mov a,#0ffh
                        mov 3ch,a
                        clr ea
save_valid1:             

   mov MTD,3ch 
                        mov r6,#05
                      
          lcall IWRNBYTE                    
    NOP                             
       mov MRD,#51h
 LCALL  IRDNBYTE
 MOV A,MRD
          cjne a,3ch,save_valid1
          setb ea 
                               ret
;------------------------清EEPROM----------------------------------
clrEEPR0M:

           clr ea
                MOV MTD,#00H          
                mov r6,#06
WR24WCXXS:  


        LCALL  IWRNBYTE
 NOP                          ;在此设置断点,观察ACK位,ACK为1时操作正确\
 
RD24WCXXS:

        mov MRD,#51h
 LCALL  IRDNBYTE
        mov a,MRD
        cjne a,MTD,WR24WCXXS
       djnz r6,WR24WCXXS 

          clr valid

                               mov 37h,#1 
   
 
clr_phone:
                              mov a,37h
           mov b,#18
             mul ab
    mov R6,a
                                MOV MTD,#0AH                                
clr_iic1:                       
          lcall IWRNBYTE                    
    NOP                             
       mov MRD,#51h
 LCALL  IRDNBYTE
        mov a,MRD
        cjne a,MTD,clr_iic1


          INC 37H
          MOV A,#MAX
          INC  a
                 cjne a,37H,clr_phone       ;是#号键吗;清密码  
            lcall beeplong
                               setb ea
          RET
;==================录音==========================
RECORD:   
                              LCALL BEEP   
                              mov 7fh,#00h
         mov 7eh,#00h
         clr 03h
                              setb tr0
                              CLR p_record
                              CLR  p_play
RECORD1:  
            
         lcall findkey
                            jb 03h,record_end
                              mov a,54h
                            cjne a,#0ffh,record_end
                            ljmp RECORD1
record_end:    
                              clr tr0
                    setb firstflag1        
                              SETB p_record
                              ret

play:                     
                              LCALL BEEP
  
                              MOV 21H,#0FFH
                CLR LED4
                              MOV A,21H
                mov sbuf,a
                       jnb ti,$
                            clr ti
                              clr es  
                            clr 03h
                              mov 7fh,#00h
         mov 7eh,#00h
                              setb tr0          
                              clr mute            ;放音                      

                              setb  p_play
                              SETB   p_record

play1:   
    setb ex1
        
    lcall findkey
    jb 03h,play_end
    mov a,54h    
    cjne a,#0ffh,play_end
    ljmp play1
play_end:                     
                              clr p_play
                              clr tr0
                              setb mute
         mov 30h,#30
         lcall delay5ms
         setb firstflag1
  
          setb ex1
                              lcall  beep
                              jnb relax_flag,play_end1
                              clr ex1

play_end1:    
          ret                                                            

;=====================  进入存储状态  ========================
STORE:  
                               MOV 21H,#0FFH
                 CLR LED2           ;预置灯
                               MOV A,21H
                 mov sbuf,a
                        jnb ti,$
                             clr ti
L90:                       
                              mov addresspoint,#1
                              setb firstflag1

L91:                   

                              lcall beep                               
                              setb a_flag  
                              mov position,#40h
                              mov 40h,#0ah
                              mov 58h,addresspoint
                              mov 57h,#10h
                              mov 56h,#10h
                              mov 55h,#10h
                              mov 54h,#0ffh 
                              mov 59h,#00h
                              
L92:

           mov 7eh,#00h
           mov 7fh,#00h
         setb ea   
                              clr time_out
         setb tr0
L92_1:
         lcall disp                   ;显示
                              lcall findkey
                              
                              jb keyflag,L61
                              jb time_out,L92_3  
           ljmp L92_1

L92_3:  
                              clr time_out                     
                              ljmp store_end

L61: 
                              clr tr0
     
                              clr c 
                              mov a,54h                
           subb a,#0ah
           jnc store_101                   ;键值是0~a之间
                              ljmp store_1
store_101: 
                              mov a,54h
                              cjne a,#0ah,L62
                              jnb a_flag,store_3
                              ljmp store_end
store_3:
                              mov r0,position              ;将 # 存入缓存
                              mov @r0,#0ah
 
                              mov position,#40h            ;将缓存中的数存入IIC
           mov a,addresspoint
          mov b,#18
           mul ab
           mov r6,a                     ;r6中存放页面首地址 
                              
wt_iic1:          
                              mov r0,position
                              mov a,@r0
                              mov 36h,a
wt_iic:                   
                              mov a,36h
                              clr ea
                                MOV MTD,A                              
                      
          lcall IWRNBYTE                    
    NOP                             
       mov MRD,#51h
 LCALL  IRDNBYTE
 MOV A,MRD

      clr c
      subb a,36h                      ;保存r0
    jnz wt_iic
   
                              mov a,36h
                              cjne a,#0ah,goon_wt 
                              clr a_flag                      ;退出标志

    setb ea                               
                              mov a,addresspoint
                              cjne a,#max,addresspoint_inc
                              ljmp L90
addresspoint_inc:
                              inc addresspoint
                              setb firstflag1
                              ljmp L91 
goon_wt:
                              inc r6
                              inc position
           ljmp wt_iic1

L62:
                              cjne a,#0dh,L63                 ;上翻
                              lcall scan_up     
                              nop
                              nop 
                              nop
                              nop
                              Ljmp L91
L63: 
                              cjne a,#0eh,L64                 ;删除
                              lcall delete     

                              nop
                              Ljmp L91   
L64: 
                              cjne a,#0ch,L65                 ;修改  
                              mov 58h,#10H
                              mov 57h,#10h
                              mov 56h,#10h
                              mov 55h,#10h
         mov 59h,#00h
                              mov 54h,#0ffh
                              nop
                              setb firstflag1
                              Ljmp L91
L65:
                              mov 54h,#0ffh 
                              ljmp L92                 
;===============进入存储号码状态7==5==5==========================
  
store_1:   
                              clr a_flag          
                              mov a,position
                              cjne a,#52h,save_buffle  
                              ljmp L91
save_buffle:
                              mov r0,position
                              mov @r0,54h
                              inc position 
                              ljmp L92

  
; ==================== 关显示 ========================
store_end:               

    setb ea
          lcall beeplong
       setb firstflag1
   mov 54h,#0ffh
                        mov 55h,#10h
   mov 56h,#10h
   mov 57h,#10h
   mov 58h,#10h
   mov 59h,#00h
                   mov a,#10h 
                        lcall disp_seg 
                              
     ret
;===================================== 上翻 ===========================
scan_up:
              mov a,addresspoint
                   cjne a,#max,scan_cycle
                     mov addresspoint,#1
                       ljmp cycle
scan_cycle:
                          inc addresspoint
cycle:
                                
                          clr firstflag1
      mov a,addresspoint          ;循环显示                              
     mov b,#18
      mul ab
           mov 3Ah,a

                              mov 58h,addresspoint
                              mov 57h,#10h
                              mov 56h,#10h
                              mov 55h,#10h
                              mov 54h,#0ffh
         mov 59h,#00h

againi000: 

                              mov 2fh,#40
disp_goon:
                              lcall disp
                              lcall findkey                               
                              jb keyflag,cycle_end 
                              djnz 2fh,disp_goon
   
re_rdiic:
           MOV r6,3AH
    INC 3AH
         clr ea
                          
       mov MRD,#51h
 LCALL  IRDNBYTE
 MOV A,MRD
    mov 54h,a                        ;保存 a 里面为键值 
                cjne a,#0ah,againi000            ;是#号键吗                             
                              ljmp scan_end2                              

cycle_end:                 
                              mov a,54h
                              cjne a,#0dh,cycle_out            ;scan
                              ljmp scan_up 
cycle_out:                   
                              cjne a,#0ah,recify
         ljmp scan_end2
recify:     
         JNB valid,morefunc
                              ljmp re_rdiic 
morefunc:        
                    
                              cjne a,#0ch,delt                ;modify   
                              ljmp L91
delt: 
                              cjne a,#0eh,re_rdiic                ;delete
                              lcall delete

scan_end2:
                        lcall beep                        ;修改完成
                        setb ea

   MOV 21H,#0FFH
   mov 54h,#0ffh
   mov 55h,#10h
   mov 56h,#10h
   mov 57h,#10h
   mov 58h,#10h
   
   mov 59h,#00h  

   ret  
;===================================== 删除 ===========================
delete: 
                              lcall beep 
                              mov 58h,addresspoint
                              mov 57h,#10h
                              mov 56h,#10h
                              mov 55h,#11h

⌨️ 快捷键说明

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