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

📄 clk.lst

📁 這是一個非常好的key scan and display控制電路和程式
💻 LST
📖 第 1 页 / 共 5 页
字号:
0018 0F01           00200         XORLW   B'00000001'     ;      /
0019 0643           00201         BTFSC   STATUS,Z        ;SKIP IF NOT
001A 091C           00202         CALL    RESET_ATM
001B 0A0D           00203         GOTO    TIME_LOOP
                    00204 ;
001C                00205 RESET_ATM
001C 0216           00206         MOVF    MIN_SEC,W       ;GET MIN/SEC
001D 0E0F           00207         ANDLW   B'00001111'     ;       /
001E 0743           00208         BTFSS   STATUS,Z        ;Z THEN SKIP
001F 0800           00209         RETLW   0               ;ELSE RETURN
0020 0410           00210         BCF     FLAG,0          ;SET TO RTM
0021 0450           00211         BCF     FLAG,ALRMLED    ;CLEAR LED
0022 0618           00212         BTFSC   ALFLAG,ALONOF   ;TEST STAT
0023 0550           00213         BSF     FLAG,ALRMLED    ;SET LED
0024 0800           00214         RETLW   0               ;RETURN
MPASM 01.40 Released              CLK.ASM   1-16-1997  13:07:37         PAGE  6
Alarm Clock

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                    00215     PAGE
                    00216 ;
                    00217 ;
0025                00218 UPDATE_DISPLAY
0025 0C00           00219         MOVLW   B'00000000'     ;CLEAR SEG DRIVE
0026 0027           00220         MOVWF   PORT_C          ;       /
0027 0C3F           00221         MOVLW   B'00111111'     ;SEE IF LAST DIGIT
0028 0186           00222         XORWF   PORT_B,0        ;       /
0029 0643           00223         BTFSC   STATUS,Z        ;NO THEN SKIP
002A 0A6F           00224         GOTO    SCAN_KP         ;ELSE SCAN KEYPAD
002B                00225 UP_DSP_1
                    00226 ;SELECT DIGIT TO BE DISPLAYED
002B 0246           00227         COMF    PORT_B,0        ;GET COMPL. PORT B IN W
002C 0643           00228         BTFSC   STATUS,Z        ;NO DIGIT SELECTED?
002D 0CC0           00229         MOVLW   B'11000000'     ;THEN SELECT DEFAULT
002E 0031           00230         MOVWF   TEMP            ;SAVE IN TEMP
002F 0271           00231         COMF    TEMP, F         ;COMPLEMENT VALUE
0030 0503           00232         BSF     STATUS,C        ;SET CARRY
0031 0371           00233         RLF     TEMP, F         ;SHIFT LEFT
0032 0703           00234         BTFSS   STATUS,C        ;IF C=1 THEN SKIP
0033 0371           00235         RLF     TEMP, F         ;ELSE 3 TIMES...
0034 0371           00236         RLF     TEMP, F         ;THRU CARRY
0035 0211           00237         MOVF    TEMP,0          ;GET IN W
0036 0026           00238         MOVWF   PORT_B          ;OUTPUT TO PORT
                    00239 ;NOW THAT DIGIT IS SELECTED, SELECT SEG VALUES FOR THAT DIGIT
                    00240 ;FIRST FIND MODE OF OPERATION.
0037 0C0A           00241         MOVLW   MTMR            ;LOAD FSR WITH MTMR
0038 0024           00242         MOVWF   FSR             ;       /
0039 0210           00243         MOVF    FLAG,0          ;GET FLAG IN W
003A 0E03           00244         ANDLW   B'00000011'     ;MASK OTHER BITS
003B 0031           00245         MOVWF   TEMP            ;SAVE IN TEMP
003C 0F03           00246         XORLW   B'00000011'     ;IN TEST MODE
003D 0643           00247         BTFSC   STATUS,Z        ;NO THEN SKIP
003E 0A4B           00248         GOTO    DO_TM           ;ELSE TEST MODE
003F 0403           00249         BCF     STATUS,C        ;CLEAR CARRY
0040 0371           00250         RLF     TEMP, F         ;LEFT SHIFT TEMP
0041 0211           00251         MOVF    TEMP,0          ;GET IN W
0042 01E4           00252         ADDWF   FSR, F          ;CHANGE INDIRECT POINTER
0043 0954           00253         CALL    GET_7_SEG       ;GET 7 SEG DATA IN W
0044 0032           00254         MOVWF   DIGIT           ;SAVE IN DIGIT LOC.
0045 09D1           00255         CALL    MASK_ANNC       ;MASK ANNC TO DIGIT
0046 0690           00256         BTFSC   FLAG,FLASH      ;NO FLASH THEN SKIP
0047 094E           00257         CALL    CHK_HALF_SEC    ;ELSE CHK. IF ON
0048 0212           00258         MOVF    DIGIT,0         ;GET BACK DIGIT
0049 0027           00259         MOVWF   PORT_C          ;OUTPUT TO PORT
004A 0800           00260         RETLW   0               ;RETURN
                    00261 ;
004B                00262 DO_TM
004B 0CFF           00263         MOVLW   B'11111111'     ;LIGHT ALL SEGMENTS
004C 0027           00264         MOVWF   PORT_C          ;       /
004D 0800           00265         RETLW   0               ;RETURN FROM UPDATE DISPLAY
                    00266 ;
004E                00267 CHK_HALF_SEC
MPASM 01.40 Released              CLK.ASM   1-16-1997  13:07:37         PAGE  7
Alarm Clock

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

004E 0770           00268         BTFSS   FLAG,COLON      ;IF COLON ON THEN DO
004F 0A51           00269         GOTO    BLANK_DSP       ;ELSE BLANK DISPLAY
0050 0800           00270         RETLW   0
0051                00271 BLANK_DSP
0051 0C00           00272         MOVLW   B'00000000'     ;MAKE PORT C LOW
0052 0032           00273         MOVWF   DIGIT
0053 0800           00274         RETLW   0
                    00275 ;
MPASM 01.40 Released              CLK.ASM   1-16-1997  13:07:37         PAGE  8
Alarm Clock

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                    00276     PAGE
                    00277 ;
                    00278 ;ON ENTRY FSR POINTS TO THE REAL TIME MODE'S MINUTES REGISTER.
                    00279 ;ON RETURN FSR POINTS TO THE TIMER REGISTER TO BE DISPLAYED.
                    00280 ;W REG. CONTAINS THE DECODED 7 SEG. INFO OF THE DIGIT
                    00281 ;TO BE DISPLAYED
                    00282 ;
0054                00283 GET_7_SEG
0054 0246           00284         COMF    PORT_B,0        ;COMPLEMENT B --> W
0055 0EF0           00285         ANDLW   B'11110000'     ;MASK LO NIBBLE
0056 0643           00286         BTFSC   STATUS,Z        ;NZ THEN SKIP
0057 02A4           00287         INCF    FSR, F          ;INC POINTER
0058 0200           00288         MOVF    F0,0            ;MOVE INDIRECT TO W
0059 0031           00289         MOVWF   TEMP            ;GET INTO TEMP
005A 0246           00290         COMF    PORT_B,0        ;COMPL.B --> W
005B 0EF0           00291         ANDLW   B'11110000'     ;MASK LO NIBBLE
005C 0643           00292         BTFSC   STATUS,Z        ;IF D1/2 THEN
005D 04F1           00293         BCF     TEMP,AM_PM      ;CLEAR AM/PM BIT
005E 0246           00294         COMF    PORT_B,0        ;GET PORT B AGAIN
005F 0ECC           00295         ANDLW   B'11001100'     ;SEE IF D2 OR D4
0060 0643           00296         BTFSC   STATUS,Z        ;YES THEN SKIP
0061 03B1           00297         SWAPF   TEMP, F         ;SWAP TEMP
0062 0C0F           00298         MOVLW   B'00001111'     ;MASK HI NIBBLE
0063 0151           00299         ANDWF   TEMP,0
0064 01E2           00300         ADDWF   PC, F           ;ADD TO PC
0065 083F           00301         RETLW   B'00111111'     ;CODE FOR 0
0066 0806           00302         RETLW   B'00000110'     ;CODE FOR 1
0067 085B           00303         RETLW   B'01011011'     ;CODE FOR 2
0068 084F           00304         RETLW   B'01001111'     ;CODE FOR 3
0069 0866           00305         RETLW   B'01100110'     ;CODE FOR 4
006A 086D           00306         RETLW   B'01101101'     ;CODE FOR 5
006B 087D           00307         RETLW   B'01111101'     ;CODE FOR 6
006C 0807           00308         RETLW   B'00000111'     ;CODE FOR 7
006D 087F           00309         RETLW   B'01111111'     ;CODE FOR 8
006E 0867           00310         RETLW   B'01100111'     ;CODE FOR 9
                    00311 ;
                    00312 ;This routine scans the 4x4 hex key pad for a key hit.
                    00313 ;If key is pressed, KEY_HIT flag is set and the value of
                    00314 ;the hex key is returned in reg NEW_KEY
                    00315 ;If no key is detected, then a 0xff value is returned in
                    00316 ;register NEW_KEY and the flag KEY_HIT is reset.
                    00317 ;
006F                00318 SCAN_KP
006F 06D0           00319         BTFSC   FLAG,KEY_HIT    ;KEY UNDER SERVICE?
0070 0A2B           00320         GOTO    UP_DSP_1        ;YES SKIP ROUTINE
0071 0CFF           00321         MOVLW   B'11111111'     ;SET DIGIT SINKS ...
0072 0026           00322         MOVWF   PORT_B          ;TO HIGH
0073 0CF7           00323         MOVLW   B'11110111'     ;SET KEY COL LOW
0074 0031           00324         MOVWF   TEMP            ;SAVE IN TEMP
0075                00325 SKP1
0075 0C00           00326         MOVLW   B'00000000'     ;SET PORT C AS OUTPUTS
0076 0007           00327         TRIS    PORT_C          ;       /
0077 0211           00328         MOVF    TEMP,W
MPASM 01.40 Released              CLK.ASM   1-16-1997  13:07:37         PAGE  9
Alarm Clock

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0078 0E0F           00329         ANDLW   B'00001111'     ;DISCHARGE PINS FOR MEMBRANE KEYPADS
0079 0027           00330         MOVWF   PORT_C          ;       /
007A 0CF0           00331         MOVLW   B'11110000'     ;SET AS I/O
007B 0007           00332         TRIS    PORT_C          ;   /
007C 0211           00333         MOVF    TEMP,W          ;GET OLD VALUE
007D 0027           00334         MOVWF   PORT_C          ;OUTPUT TO PORT
007E 0207           00335         MOVF    PORT_C,W        ;INPUT PORT VALUE
007F 0EF0           00336         ANDLW   B'11110000'     ;MASK LO BYTE
0080 0FF0           00337         XORLW   B'11110000'     ;SEE IF KEY HIT
0081 0743           00338         BTFSS   STATUS,Z        ;NO KEY THEN SKIP        
0082 0A8D           00339         GOTO    DET_KEY         ;LOAD KEY VALUE
0083                00340 SKP3        
0083 0503           00341         BSF     STATUS,C        ;SET CARRY
0084 0331           00342         RRF     TEMP, F         ;MAKE NEXT COL. LOW
0085 0603           00343         BTFSC   STATUS,C        ;ALL DONE THEN SKIP
0086 0A75           00344         GOTO    SKP1
0087 0073           00345         CLRF    NEW_KEY         ;SET NEW_KEY = FF
0088 00F3           00346         DECF    NEW_KEY, F      ;       /
0089                00347 SKP2                           
0089 0067           00348         CLRF    PORT_C          ;SETPORT C AS ...
008A 0C00           00349         MOVLW   B'00000000'     ;OUTPUTS
008B 0007           00350         TRIS    PORT_C          ;       /
008C 0A2B           00351         GOTO    UP_DSP_1        ;RETURN
008D                00352 DET_KEY
                    00353 ;key is detected
008D 0293           00354         INCF    NEW_KEY,W       ;CHK IF KEY ...
008E 0743           00355         BTFSS   STATUS,Z        ;WAS RELEASED
008F 0A89           00356         GOTO    SKP2            ;NO THEN RETURN
0090 0207           00357         MOVF    PORT_C,W        ;GET RAW KEY...
0091 0D0F           00358         IORLW   B'00001111'     ;VALUE.
0092 0151           00359         ANDWF   TEMP,W          ;   /
0093 0033           00360         MOVWF   NEW_KEY         ;SAVE IN NEW_KEY
0094 0998           00361         CALL    GET_KEY_VAL     ;GET ACTUAL KEY ...
0095 0033           00362         MOVWF   NEW_KEY         ;VALUE
0096 05D0           00363         BSF     FLAG,KEY_HIT    ;SET KEY HIT FLAG
0097 0A89           00364         GOTO    SKP2            ;RETURN
                    00365 ;
MPASM 01.40 Released              CLK.ASM   1-16-1997  13:07:37         PAGE 10
Alarm Clock

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                    00366     PAGE
                    00367 ;This routine decodes the hex value from the "raw" data got
                    00368 ;from scanning the rows and cols.
                    00369 ;   actual key value          raw hex value
                    00370 ;       ONE              EQU     77
                    00371 ;       TWO              EQU     7B
                    00372 ;       THREE            EQU     7D
                    00373 ;       C                EQU     7E      
                    00374 ;       FOUR             EQU     0B7
                    00375 ;       FIVE             EQU     0BB
                    00376 ;       SIX              EQU     0BD
                    00377 ;       D                EQU     0BE     
                    00378 ;       SEVEN            EQU     0D7
                    00379 ;       EIGHT            EQU     0DB
                    00380 ;       NINE             EQU     0DD
                    00381 ;       E                EQU     0DE
                    00382 ;       A                EQU     0E7
                    00383 ;       ZERO             EQU     0EB
                    00384 ;       B                EQU     0ED    
                    00385 ;       F                EQU     0EE     
                    00386 ;
                    00387 ;
0098                00388 GET_KEY_VAL
0098 0E0F           00389         ANDLW   B'00001111'     ;GET LO NIBBLE        
0099 0034           00390         MOVWF   KEY_NIBL        ;SAVE
009A 0C04           00391         MOVLW   4               ;SET COUNT TO 4
009B 0031           00392         MOVWF   TEMP            ;       /
009C                00393 GKV1
009C 0503           00394         BSF     STATUS,C        ;SET CARRY
009D 0334           00395         RRF     KEY_NIBL, F     ;ROTATE NIBBLE
009E 0703           00396         BTFSS   STATUS,C        ;SKIP IF NOT Z
009F 0AA5           00397         GOTO    GET_HI_KEY      ;GOTO NEXT PART
00A0 02F1           00398         DECFSZ  TEMP, F         ;DEC COUNT

⌨️ 快捷键说明

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