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

📄 ic.lst

📁 IC卡收费器
💻 LST
📖 第 1 页 / 共 4 页
字号:
A51 MACRO ASSEMBLER  IC                                                                   07/12/2008 15:19:28 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN ic.OBJ
ASSEMBLER INVOKED BY: F:\keilC51\C51\BIN\A51.EXE ic.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;*****************************************************************
                       2     ;           IC卡收费    单片机中地址30H至37H为8位数字的保存位
                       3     ;***************************************************************
                       4     ;*******************************************************************
  000A                 5             SUR      EQU   0AH
  0020                 6             POINTER  EQU   20H  ;芯片中间变量地址,用来保存数据输入到的24C02的内存地址
  0030                 7             NUM      EQU   30H
  00A0                 8             SDA      EQU   P2.0       ;24c02数据端口
  00A1                 9             SCL      EQU   P2.1       ;24c02时钟端口
  0021                10             NUMB     EQU   21H
  00A6                11             DULA     BIT   P2.6
  00A7                12             WELA     BIT   P2.7
  00A3                13             SPK BIT P2.3
                      14     ;********************************************************************
0000                  15             ORG 0000H
0000 020030           16             LJMP MAIN
0030                  17             ORG 0030H  
                      18     ;&&&&&&&&&&&&&&&&&&主程序开始&&&&&&&&&&&&&&&&&&&&&&&&&&&&
0030                  19     MAIN:
0030 7930             20             MOV R1,#NUM         ;将30H--37H初始化为0
0032                  21     M1:                        
0032 7700             22             MOV @R1,#0H
0034 09               23             INC R1
0035 E9               24             MOV A,R1
0036 B436F9           25             CJNE A,#36H,M1
0039 120586           26             LCALL RT            ;把24C02中30--37H内容读入内存30H--37H
003C 7935             27             MOV R1,#35H   
003E                  28     M4:                         ;判断余额是否小于10
003E B9300D           29             CJNE R1,#30H,M2                 
0041 120741           30             LCALL FENGMING      ;余额小于10蜂鸣器响
0044 120738           31             LCALL DELAY2
0047                  32     M5:
0047 120730           33             LCALL KSTART
004A 7008             34             JNZ MAIN1
004C 80F9             35             JMP M5
004E                  36     M2:
004E B70003           37             CJNE @R1,#0H,MAIN1
0051 19               38             DEC R1
0052 80EA             39             JMP M4
0054                  40     MAIN1:  
0054 120100           41             LCALL STARTSHOW              ;初始化LED界面进行功能选择
0057                  42     CHO:
0057 1206E7           43             LCALL KEYSCAN                ;按键扫描,进行功能选择,1 查询上一次的操作  2  扣钱  
                             3存钱  4查询余额
005A 120634           44             LCALL SELSHOW                ;对输入数字进行显示
005D B40AF7           45             CJNE  A,#SUR,CHO             ;输入不是确定键,仍能继续输入
0060                  46     CHO1:
                      47             ;LCALL KSTART
                      48             ;JZ  CHO1                     ;将JNZ改为JZ                
0060 12019F           49             LCALL FOUS                   ;根据输入数字选择功能
0063 80EF             50             JMP MAIN1
0065 80FE             51             SJMP $
                      52     ;&&&&&&&&&&&&&&&&&&&&&&&&&&主程序结束$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                      53     ;子程序开始
0100                  54             ORG 0100H
                      55     ;******************初始化LED界面进行功能选择*******************
0100                  56     STARTSHOW:  
0100 C2A7             57             CLR  WELA
A51 MACRO ASSEMBLER  IC                                                                   07/12/2008 15:19:28 PAGE     2

0102 758000           58             MOV  P0,#00H   
0105 D2A7             59             SETB WELA
0107 C2A7             60             CLR  WELA 
                      61                                  ;低电平有效
0109 C2A6             62             CLR  DULA
010B 758000           63             MOV  P0,#00H         ;低电平有效
010E D2A6             64             SETB DULA
0110 C2A6             65             CLR  DULA
0112                  66     LOOP:
0112 C2A7             67             CLR  WELA
0114 7580FE           68             MOV  P0,#0FEH   
0117 D2A7             69             SETB WELA
0119 C2A7             70             CLR  WELA                           
011B C2A6             71             CLR  DULA
011D 758040           72             MOV  P0,#40H         ;选中Q1,显示C
0120 D2A6             73             SETB DULA
0122 C2A6             74             CLR  DULA
0124 120738           75             LCALL DELAY2
                      76            
                      77     
0127 C2A7             78             CLR  WELA
0129 7580FD           79             MOV  P0,#0FDH   
012C D2A7             80             SETB WELA
012E C2A7             81             CLR  WELA                              ;低电平有效
0130 C2A6             82             CLR  DULA
0132 758076           83             MOV  P0,#76H         ;;选中Q2,显示H
0135 D2A6             84             SETB DULA
0137 C2A6             85             CLR  DULA
0139 120738           86             LCALL DELAY2
                      87     
                      88     
013C C2A7             89             CLR  WELA
013E 7580FB           90             MOV  P0,#0FBH   
0141 D2A7             91             SETB WELA
0143 C2A7             92             CLR  WELA                              ;低电平有效
0145 C2A6             93             CLR  DULA
0147 758079           94             MOV  P0,#79H         ;选中Q3,显示O
014A D2A6             95             SETB DULA
014C C2A6             96             CLR  DULA
014E 120738           97             LCALL DELAY2
                      98     
                      99     
0151 C2A7            100             CLR  WELA
0153 7580F7          101             MOV  P0,#0F7H   
0156 D2A7            102             SETB WELA
0158 C2A7            103             CLR  WELA                              ;低电平有效
015A C2A6            104             CLR  DULA
015C 758038          105             MOV  P0,#38H         ;Q4,O
015F D2A6            106             SETB DULA
0161 C2A6            107             CLR  DULA
0163 120738          108             LCALL DELAY2
                     109     
0166 C2A7            110             CLR  WELA
0168 7580EF          111             MOV  P0,#0EFH   
016B D2A7            112             SETB WELA
016D C2A7            113             CLR  WELA                             
016F C2A6            114             CLR  DULA
0171 758038          115             MOV  P0,#38H         ;Q5,S
0174 D2A6            116             SETB DULA
0176 C2A6            117             CLR  DULA
0178 120738          118             LCALL DELAY2
                     119     
                     120     
017B C2A7            121             CLR  WELA
017D 7580DF          122             MOV  P0,#0DFH   
0180 D2A7            123             SETB WELA
A51 MACRO ASSEMBLER  IC                                                                   07/12/2008 15:19:28 PAGE     3

0182 C2A7            124             CLR  WELA                              
0184 C2A6            125             CLR  DULA
0186 75803F          126             MOV  P0,#3fH         ;Q6,E
0189 D2A6            127             SETB DULA
018B C2A6            128             CLR  DULA
018D 120738          129             LCALL DELAY2
                     130     
                     131                                  ;检测是否有键按下   
0190 75B0F0          132             MOV P3,#0F0H         ;将P1口高四位置0低四位值1                         
0193 E5B0            133             MOV A,P3             ;读P1口                                           
0195 64F0            134             XRL A,#0F0H          ;将A中的值与A中的值相异或      
0197 120738          135             LCALL  DELAY2 
019A 7002            136             JNZ  SE
019C 2112            137             JMP LOOP
019E 22              138     SE:             RET
                     139     ;***************************功能选择***************************
019F                 140     FOUS:         
019F E8              141             MOV A,R0
01A0 B40C03          142             CJNE  A,#0CH,F2
01A3 0202E2          143             LJMP INQUIRE                            ;查询上一次的操作
01A6                 144     F2:
01A6 B40D03          145             CJNE  A,#0DH,F3
01A9 0201B6          146             LJMP DEDUCT                             ;扣钱
01AC                 147     F3:
01AC B40E03          148             CJNE  A,#0EH,F4   
01AF 02025C          149             LJMP DEPOSIT                            ;存钱
01B2                 150     F4:
01B2 020356          151             LJMP SURPLUS                            ;查询余额
01B5 22              152     RET 
                     153     ;********************************扣钱**************************
01B6                 154     DEDUCT:
01B6 120586          155             LCALL RT        ;把外存30~37读入内存30H~37H
01B9 754023          156     MOV 40H,#23H
01BC 754154          157     MOV 41H,#54H
01BF 754257          158     MOV 42H,#57H
01C2 754346          159     MOV 43H,#46H
01C5 754435          160     MOV 44H,#35H
01C8 754525          161     MOV 45H,#25H
                     162     ;MOV 46H,#56H
                     163     ;MOV 47H,#56H
01CB 120540          164     LCALL STS               ;键盘输入到60h~67h单元中,并且将输入的单元送到40h~47h中以便后面处理
01CE 120521          165     LCALL WT1               ;将40h起始的内容写入到24c02中50-57H,以便进行查询
                     166                             ;等待处理
01D1 7935            167     MOV R1,#35H             ;卡里的钱最高位存到37H
01D3 7A07            168     MOV R2,#07H             
01D5 7850            169     MOV R0,#50H             ;统计卡里钱的位数,存到50H
01D7 12023E          170     LCALL LOOP1             ;子程序统计
01DA 08              171     INC R0                  ;将要扣的钱位数存在51H
01DB 7945            172     MOV R1,#45H             ;将要扣的钱最高位存在47H
01DD 7A07            173     MOV R2,#07H
01DF 12023E          174     LCALL LOOP1             ;子程序统计
01E2 18              175     DEC R0
01E3 E6              176     MOV A,@R0
01E4 08              177     INC R0
01E5 C3              178     CLR C
01E6 96              179     SUBB A,@R0
01E7 402A            180     JC ERRORB               ;卡里钱的位数比要扣的钱的位数小则报错,调用显示出错的子程序
01E9 18              181     DEC R0
01EA E6              182     MOV A,@R0
01EB 14              183     DEC A
01EC 2440            184     ADD A,#40H
01EE F9              185     MOV R1,A             ;把扣钱的最高位存到R1所指定的地址单元里
01EF E6              186     MOV A,@R0
01F0 14              187     DEC A
01F1 2430            188     ADD A,#30H
01F3 F8              189     MOV R0,A
A51 MACRO ASSEMBLER  IC                                                                   07/12/2008 15:19:28 PAGE     4

01F4 E6              190     MOV A,@R0            ;把卡里的钱最高位存到A
01F5 C3              191     CLR C
01F6 97              192     SUBB A,@R1
01F7 401A            193     JC ERRORB     ;若要扣的钱和存的钱的位数一样,但扣的钱大,调用显示出错的子程序
01F9 7930            194     MOV R1,#30H
01FB 7850            195     MOV R0,#50H
01FD E6              196     MOV A,@R0
01FE 7840            197     MOV R0,#40H
0200 FA              198     MOV R2,A
0201 C3              199     CLR C
0202 E7              200     KOUQIAN:MOV A,@R1
0203 96              201             SUBB A,@R0

⌨️ 快捷键说明

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