《51单片机应用开发桉例精选》源代码及图片下载

源代码在线查看: ex3-3.lst

软件大小: 3718 K
上传用户: williamchen199
关键词: 51单片机 应用开发 源代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				A51 MACRO ASSEMBLER  EX3_3                                                                06/23/2007 17:01:14 PAGE     1
				
				
				MACRO ASSEMBLER A51 V7.09
				OBJECT MODULE PLACED IN ex3-3.OBJ
				ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ex3-3.asm SET(SMALL) DEBUG EP
				
				LOC  OBJ            LINE     SOURCE
				
				                       1     ;--------------程序信息-----------------
				                       2     ;文件名   : ex3-3.asm
				                       3     ;版本     : 1.0
				                       4     ;作者     :
				                       5     ;修改时间 :
				                       6     
				                       7     ;--------------程序说明------------------
				                       8     ;CHAP 3.3 扫描方式键盘输入实例
				                       9     
				                      10     ;-----------常量和变量声明---------------
				  0090                11                     KEYIN EQU P1;
				                      12     
				                      13     ;--------------预定义--------------------
				                      14     
				0000                  15                    ORG 0000H
				0000 020003           16                    LJMP START
				                      17     
				                      18     ;------------中断入口地址分配------------
				                      19                    ;ORG 0003H
				                      20                    ;LJMP INT0PRG
				                      21                    ;ORG 000BH
				                      22                    ;LJMP INT1PRG
				                      23                    ;ORG 0013H;
				                      24                    ;LJMP
				                      25                    ;ORG 0030H
				                      26     
				0003                  27     START:
				                      28     ;--------------初始化子程序--------------
				0003 856081           29          MOV SP,60H;
				                      30     ;--------------主程序--------------------
				0006                  31     MAIN:
				0006 12000C           32             LCALL KEYBOARD;
				0009 020006           33     LJMP MAIN
				                      34     
				                      35     
				                      36     ;----------------子程序------------------
				                      37     
				                      38     ;---------------------------------
				                      39     ;    行列式键盘扫描方式子程序部分
				                      40     ;---------------------------------
				000C                  41     KEYBOARD:
				000C 7800             42             MOV R0,#00H;         r0寄存器保存键值,初始化清零
				000E 75900F           43             MOV KEYIN,#0FH;     所有列置高电平
				0011 E590             44             MOV A,KEYIN;         读取行值
				0013 F8               45             MOV R0,A;             保存这次的行值
				0014 120075           46             LCALL DEYLAY10MS;   延时去抖
				0017 75900F           47             MOV KEYIN,#0FH;      再读行值
				001A E590             48             MOV A,KEYIN;
				                      49     ;CJNE A,R0,KEYBOARD;          比较去抖前后,相同则认为有键按下,否则重新读键值
				001C B40F03           50     CJNE A,#0FH,HAVEKEY;
				001F 02000C           51             LJMP KEYBOARD;      
				0022                  52     HAVEKEY:
				0022 759008           53             MOV KEYIN,#08H;      第一列置高电平扫描
				0025 E590             54             MOV A,KEYIN;         读出扫描的行值
				0027 B40803           55             CJNE A,#08H,COL1;    判断按键是否在第一列
				002A 020031           56             LJMP COL2;           否,则跳转扫描下一列
				002D 7900             57     COL1:  MOV R1,#00H;          是,则记下列数
				002F 801E             58     JMP KEYBOARDEND;             跳转到键值处理部分
				A51 MACRO ASSEMBLER  EX3_3                                                                06/23/2007 17:01:14 PAGE     2
				
				0031 B40403           59     COL2:   CJNE A,#04H,COL22;   同上,判断按键是否在第二列
				0034 02003B           60             LJMP COL3;
				0037 7901             61     COL22:  MOV R1,#01H;         是,记下列数,第二列
				0039 8014             62     JMP KEYBOARDEND;
				003B B40203           63     COL3:   CJNE A,#02H,COL33;
				003E 020045           64             LJMP COL4;
				0041 7902             65     COL33:  MOV R1,#02H;         记下列数,第三列
				0043 800A             66     JMP KEYBOARDEND;
				0045 B40103           67     COL4:   CJNE A,#01H,COL44;
				0048 02000C           68             LJMP KEYBOARD;
				004B 7901             69     COL44:  MOV R1,#01H         ;第四列
				004D 8000             70             JMP KEYBOARDEND;
				004F                  71     KEYBOARDEND:               ;键值处理程序块
				004F E8               72             MOV A,R0;             
				0050 120057           73             LCALL COLSCAN;      判断按键在第几行,R0返回行基数
				0053 F8               74             MOV R0,A;             R1保存列数,R0保存行基数
				0054 29               75             ADD A,R1;             则 键值=R1+R0
				0055 F8               76             MOV R0,A;
				0056 22               77             RET;
				                      78     ;---------------------------------
				                      79     ;    行扫描方式识别子程序部分
				                      80     ;    R0返回行增加的键值基数     
				                      81     ;    具体是第一行R0				                      82     ;---------------------------------
				0057 E8               83     COLSCAN: MOV A,R0;           
				0058 30E404           84             JNB ACC.4,ROW2;       判断是否是第一行
				005B 7800             85             MOV R0,#00H;          是,则R0=0保存行基数
				005D 8015             86             JMP COLSCANEND;     否,则跳转判断下一行
				005F 30E504           87     ROW2:  JNB ACC.5,ROW3;
				0062 7804             88             MOV R0,#04H;
				0064 800E             89             JMP COLSCANEND;
				0066 30E604           90     ROW3:  JNB ACC.6,ROW4;
				0069 7808             91             MOV R0,#08H;
				006B 8007             92             JMP COLSCANEND;
				006D 30E704           93     ROW4:  JNB ACC.7,COLSCANEND;
				0070 780C             94             MOV R0,#0CH;
				0072 8000             95             JMP COLSCANEND;
				0074                  96     COLSCANEND: 
				0074 22               97             RET;
				                      98     
				                      99     ;--------------中断子程序----------------
				                     100     
				                     101     ;---------------延时子程序---------------
				0075 7E40            102     DEYLAY10MS:  MOV R6,#40H;
				0077 7F48            103     DELAY0:     MOV R7,#248H;
				*** _____________________________________________^
				*** WARNING #A52 IN 103 (ex3-3.asm, LINE 103): VALUE HAS BEEN TRUNCATED TO 8 BITS
				0079 DFFE            104                 DJNZ R7,$;
				007B DEFA            105                 DJNZ R6,DELAY0;
				007D 22              106                 RET;
				                     107     
				                     108     
				                     109     END
				                             
				                             ;---------------注意事项-----------------
				                             
				A51 MACRO ASSEMBLER  EX3_3                                                                06/23/2007 17:01:14 PAGE     3
				
				SYMBOL TABLE LISTING
				------ ----- -------
				
				
				N A M E             T Y P E  V A L U E   ATTRIBUTES
				
				ACC. . . . . . . .  D ADDR   00E0H   A   
				COL1 . . . . . . .  C ADDR   002DH   A   
				COL2 . . . . . . .  C ADDR   0031H   A   
				COL22. . . . . . .  C ADDR   0037H   A   
				COL3 . . . . . . .  C ADDR   003BH   A   
				COL33. . . . . . .  C ADDR   0041H   A   
				COL4 . . . . . . .  C ADDR   0045H   A   
				COL44. . . . . . .  C ADDR   004BH   A   
				COLSCAN. . . . . .  C ADDR   0057H   A   
				COLSCANEND . . . .  C ADDR   0074H   A   
				DELAY0 . . . . . .  C ADDR   0077H   A   
				DEYLAY10MS . . . .  C ADDR   0075H   A   
				HAVEKEY. . . . . .  C ADDR   0022H   A   
				KEYBOARD . . . . .  C ADDR   000CH   A   
				KEYBOARDEND. . . .  C ADDR   004FH   A   
				KEYIN. . . . . . .  D ADDR   0090H   A   
				MAIN . . . . . . .  C ADDR   0006H   A   
				P1 . . . . . . . .  D ADDR   0090H   A   
				ROW2 . . . . . . .  C ADDR   005FH   A   
				ROW3 . . . . . . .  C ADDR   0066H   A   
				ROW4 . . . . . . .  C ADDR   006DH   A   
				SP . . . . . . . .  D ADDR   0081H   A   
				START. . . . . . .  C ADDR   0003H   A   
				
				
				REGISTER BANK(S) USED: 0 
				
								ASSEMBLY COMPLETE.  1 WARNING(S), 0 ERROR(S)
							

相关资源