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

📄 13组源程序.txt

📁 一个可以进行密码输入与确认、重新设定存储当前密码、并可以对多次输入密码错误的情况予以发声警告的智能电子密码锁。借助于一块LCD液晶显示模块
💻 TXT
📖 第 1 页 / 共 3 页
字号:
;**************比较密码真假********************
bijiao
    clrf   mm6
    movf   m1,0
    subwf  ym1,0
    btfss  status,z
    return           ;密码错误警示
    incf   mm6,1
    movf   m2,0
    subwf  ym2,0
    btfss  status,z
    return
    incf   mm6,1
    movf   m3,0
    subwf  ym3,0
    btfss  status,z
    return           ;密码错误警示
    incf   mm6,1
    movf   m4,0
    subwf  ym4,0
    btfss  status,z
    return           ;密码错误警示
    incf   mm6,1
    movf   m5,0
    subwf  ym5,0
    btfss  status,z
    return           ;密码错误警示
    incf   mm6,1
    movf   m6,0
    subwf  ym6,0
    btfss  status,z
    return           ;密码错误警示
    incf   mm6,1
    return

;*************输出密码正确*******************
showstring2
    movlw   049h            ;开锁状态显绿灯
    movwf   portc
    call    clearcommand1
    clrf    temp_reg
waitchar2
    call    stringtable2
    call    sendchar
    incf    temp_reg,1
    movlw   0x0d
    subwf   temp_reg,0
    btfss   status,z
    goto    waitchar2
    return
;***************输出密码错误******************
showwrong
    incf    count3,f
    movlw   024h
    movwf   portc          ;密码错误显红灯
    movf    count3,w
    sublw   03h
    btfsc   status,z
    call    baojing
    call    clearcommand1
    call    showstring3
jian2
    call   jian
    sublw  0bh             ;识别按键是否为'B'
    btfss  status,z
    goto   jian2
    goto   line2
showstring3
    clrf  temp_reg
waitchar3
    call  stringtable3
    call  sendchar
    incf  temp_reg,1
    movlw  0x0d
    subwf   temp_reg,0
    btfss   status,z
    goto    waitchar3
    return

;********************************************
;***************报警子程序*******************
baojing 
        bsf    status,rp0
   	clrf   trisa
 	bcf    status,rp0 
        movlw  .250
        movwf  count3
        movlw  .6
        movwf  count4
        call   alarm
        goto   mainline
;*************************************        
alarm        
	bsf   porta,3                              
        call  delay1ms
 	bcf   porta,3
        call  delay1ms
        decfsz  count3,1        
  	goto  alarm
        call  delay250ms
        call  delay250ms
	movlw   .250
        movwf  count3
 	decfsz  count4,1
        goto	alarm
	return   

;********************************************     
;***************TMR0延时1ms******************
delay1ms
  bsf  status,rp0
  movlw  07h
  movwf  option_reg
  bcf  status,rp0
  movlw  07h
  bcf   intcon,2
  movlw   tmr0b
  movwf   tmr0
loop5  
  btfss   intcon,2
  goto  loop5
  return
;***************TMR0延时250ms*****************
delay250ms
  bsf  status,rp0
  movlw  07h
  movwf  option_reg
  bcf  status,rp0
  movlw  07h
  bcf   intcon,2
  movlw   tmr0c
  movwf   tmr0
loop6
  btfss   intcon,2
  goto  loop6
  return

;*********************************************************
;*****************对应密码输出'******'********************
xianmima
    bsf      status,rp0
    bcf      status,rp1          ;体1   
    clrf     trise               ;E,D输出口定义
    clrf     trisd   
    bcf      status,rp0          ;体0
    movlw    03h
    movwf    porte
    movlw    2ah                 ;输出'*'号键
    movwf    portd
    movlw    00h
    movwf    porte
    call     delay4ms    
    return

;*************************************************
line5
    nop   
jian3
    call   jian
    sublw  0bh               ;识别按键是否为'B'
    btfss  status,z
    goto   jian3
    call   showstring4       ;输出更改密码
jiancd
    call   jian              ;识别按键'C'为更改密码,'D'为不更改密码
    movwf  gengkz
    sublw  0ch
    btfss  status,z
    call   yanzhengd         
    call   clearcommand1     ;清屏
       
    call   showstring1       ;输出提示语'ENTER  THE  CODE'
    movlw  02h               ;光标换行
    movwf  porte
    movlw  0c0h
    movwf  portd
    movlw  00h
    movwf  porte
    call   delay4ms
  
    call   jian               ;键盘扫描,第一遍输入新密码
    call   cunm1
    call   jian
    call   cunm2
    call   jian
    call   cunm3
    call   jian
    call   cunm4
    call   jian
    call   cunm5
    call   jian
    call   cunm6
jian5
    call   jian
    sublw  0bh                ;识别按键是否为'B'
    btfss  status,z
    goto   jian5
    call   clearcommand1      ;清屏
    
    call    showstring1       ;输出提示语'ENTER  THE  CODE' 
    movlw   02h               ;光标换行
    movwf   porte
    movlw   0c0h
    movwf   portd
    movlw   00h
    movwf   porte
    call    delay4ms
 
    call   jian               ;键盘扫描,第二遍输入新密码
    call   cunym1
    call   xianmima
    call   jian
    call   cunym2
    call   xianmima
    call   jian
    call   cunym3
    call   xianmima
    call   jian
    call   cunym4
    call   xianmima
    call   jian
    call   cunym5
    call   xianmima
    call   jian
    call   cunym6
    call   xianmima
jian6
    call   jian
    sublw  0bh              ;识别按键是否为'B'
    btfss  status,z
    goto   jian6
    call   bijiao           ;比较两次输入密码是否相同
    movf   mm6,0
    sublw  06h
    btfss  status,z         ;mm6等于六,前后两次输入新密码相同。mm6不等于六,前后两次输入新密码不同
    call   showwrong1       ;前后两次输入新密码不同,返回重新输入"rewrite is failed"
    call   showstring5      ;前后两次输入新密码相同,输出更改密码成功 "rewrite id success"
    call   mimacuncu        ;存储新密码
jian8
    call   jian
    sublw  0bh              ;识别按键是否为'B'
    btfss  status,z
    goto   jian8
    goto   line6
;*******************************************************************
;****************识别按键是否为D,进入程序退出**********************
yanzhengd
    movf   gengkz,0          
    sublw  0dh
    btfss  status,z
    goto   jiancd           ;识别按键是'C'还是'D'
    goto   line6            ;退出"exit"

;*****************输出更改密码语句**********************
showstring4
    call  clearcommand1       ;清屏
    clrf  temp_reg            ;清0,控制输出字符数量
waitchar4
    call  stringtable4        ;查表"rewrite code"
    call  sendchar            ;送显子程序
    incf  temp_reg,1          ;字符量加1 
    movlw 0x0c   
    subwf temp_reg,0          ;字符是否送完
    btfss status,z
    goto  waitchar4
    return

;*************输出更改密码成功*******************
showstring5
    call  clearcommand1       ;清屏
    clrf  temp_reg            ;清0,控制输出字符数量
waitchar5
    call  stringtable5        ;查表"rewrite success"
    call  sendchar            ;送显子程序
    incf  temp_reg,1          ;字符量加1
    movlw 0x0f
    subwf temp_reg,0          ;字符是否送完
    btfss status,z
    goto  waitchar5
    return

;**************输出更改密码失败********************
showwrong1
    call   clearcommand1       ;清屏
    call   showstring6
    goto   jian3
showstring6
    clrf   temp_reg            ;清0,控制输出字符数量
waitchar6
    call   stringtable6        ;查表"rewrite failed"
    call   sendchar            ;送显子程序
    incf   temp_reg,1          ;字符量加1
    movlw  0x0e
    subwf  temp_reg,0          ;字符是否送完
    btfss  status,z
    goto   waitchar6
    return

;********************************************
;*****************密码存储*******************
mimacuncu
   clrf   addr                  ;addr清0,密码存储从00开始
   movf   m1,w
   movwf  mvalue
   call   xiemima
   movf   m2,w
   movwf  mvalue
   call   xiemima
   movf   m3,w
   movwf  mvalue
   call   xiemima
   movf   m4,w
   movwf  mvalue
   call   xiemima
   movf   m5,w
   movwf  mvalue
   call   xiemima
   movf   m6,w
   movwf  mvalue
   call   xiemima
   return
xiemima                     ;写入EEPROM
   bsf      status,rp0      ;体3
   bsf      status,rp1
   btfsc    eecon1,wr       ;上一次写操作是否完成
   goto     $-1             ;没有完成,返回继续检测
   bcf      status,rp0      ;体2 
   movf     mvalue,w        ;取密码         
   movwf    eedata          ;送数据寄存器
   movf     addr,w          ;取地址
   movwf    eeadr           ;送地址寄存器
   bsf      status,rp0      ;体3
   bcf      eecon1,eepgd    ;选定EEPROM为访问对象
   bsf      eecon1,wren     ;开放写操作使能控制
   movlw    55h
   movwf    eecon2
   movlw    0aah
   movwf    eecon2          
   bsf      eecon1,wr       ;启动写操作
   bcf      eecon1,wren     ;禁止写操作发生
   bcf      status,rp1      ;体0
   bcf      status,rp0
   incf     addr,f          ;地址加1
   return

;*****************************************    
line6
    call     clearcommand1   ;清屏
    call     showstring7     ;输出提示语'EXIT'
    call     delay4ms
jian9
    call   jian
    sublw  0bh               ;识别按键是否为'B'   
    
    btfss  status,z
    goto   jian9
    call   clearcommand1     ;清屏
    movlw  092h              ;黄灯亮  表示上锁
    movwf  portc
    bsf    status,rp0        ;体1 
    bcf    status,rp1
    movlw  07h               ;设置选项寄存器:INT和RB0下降延触发
    movwf  option_reg
    bsf    status,rp0        ;体0
    movlw  10h               ;开放INT中断使能位
    movwf  intcon
    sleep                    ;进入睡眠状态
    nop
    bcf    intcon,1          ;INT中断标志位清0
    goto   mainline          ;重新进入程序

;*****************输出退出程序************************
showstring7
    clrf  temp_reg
waitchar7
    call  stringtable7        ;显示"exit"
    call  sendchar
    incf  temp_reg,1
    movlw  0x04
    subwf   temp_reg,0
    btfss   status,z
    goto    waitchar7
    return

;******************程序结束**************************  
    end


⌨️ 快捷键说明

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