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

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

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

相关代码

				;--------------程序信息-----------------
				;文件名   : ex3-3.asm
				;版本     : 1.0
				;作者     :
				;修改时间 :
				
				;--------------程序说明------------------
				;CHAP 3.3 扫描方式键盘输入实例
				
				;-----------常量和变量声明---------------
						KEYIN EQU P1;
				
				;--------------预定义--------------------
				
				               ORG 0000H
				               LJMP START
				
				;------------中断入口地址分配------------
				               ;ORG 0003H
				               ;LJMP INT0PRG
				               ;ORG 000BH
				               ;LJMP INT1PRG
				               ;ORG 0013H;
				               ;LJMP
				               ;ORG 0030H
				
				START:
				;--------------初始化子程序--------------
				     MOV SP,60H;
				;--------------主程序--------------------
				MAIN:
				        LCALL KEYBOARD;
				LJMP MAIN
				
				
				;----------------子程序------------------
				
				;---------------------------------
				;    行列式键盘扫描方式子程序部分
				;---------------------------------
				KEYBOARD:
				        MOV R0,#00H;         r0寄存器保存键值,初始化清零
				        MOV KEYIN,#0FH;     所有列置高电平
				        MOV A,KEYIN;         读取行值
				        MOV R0,A;             保存这次的行值
				        LCALL DEYLAY10MS;   延时去抖
				        MOV KEYIN,#0FH;      再读行值
				        MOV A,KEYIN;
				;CJNE A,R0,KEYBOARD;          比较去抖前后,相同则认为有键按下,否则重新读键值
				CJNE A,#0FH,HAVEKEY;
				        LJMP KEYBOARD;      
				HAVEKEY:
				        MOV KEYIN,#08H;      第一列置高电平扫描
				        MOV A,KEYIN;         读出扫描的行值
				        CJNE A,#08H,COL1;    判断按键是否在第一列
				        LJMP COL2;           否,则跳转扫描下一列
				COL1:  MOV R1,#00H;          是,则记下列数
				JMP KEYBOARDEND;             跳转到键值处理部分
				COL2:   CJNE A,#04H,COL22;   同上,判断按键是否在第二列
				        LJMP COL3;
				COL22:  MOV R1,#01H;         是,记下列数,第二列
				JMP KEYBOARDEND;
				COL3:   CJNE A,#02H,COL33;
				        LJMP COL4;
				COL33:  MOV R1,#02H;         记下列数,第三列
				JMP KEYBOARDEND;
				COL4:   CJNE A,#01H,COL44;
				        LJMP KEYBOARD;
				COL44:  MOV R1,#01H         ;第四列
				        JMP KEYBOARDEND;
				KEYBOARDEND:               ;键值处理程序块
				        MOV A,R0;             
				        LCALL COLSCAN;      判断按键在第几行,R0返回行基数
				        MOV R0,A;             R1保存列数,R0保存行基数
				        ADD A,R1;             则 键值=R1+R0
				        MOV R0,A;
				        RET;
				;---------------------------------
				;    行扫描方式识别子程序部分
				;    R0返回行增加的键值基数     
				;    具体是第一行R0				;---------------------------------
				COLSCAN: MOV A,R0;           
				        JNB ACC.4,ROW2;       判断是否是第一行
				        MOV R0,#00H;          是,则R0=0保存行基数
				        JMP COLSCANEND;     否,则跳转判断下一行
				ROW2:  JNB ACC.5,ROW3;
				        MOV R0,#04H;
				        JMP COLSCANEND;
				ROW3:  JNB ACC.6,ROW4;
				        MOV R0,#08H;
				        JMP COLSCANEND;
				ROW4:  JNB ACC.7,COLSCANEND;
				        MOV R0,#0CH;
				        JMP COLSCANEND;
				COLSCANEND: 
				        RET;
				
				;--------------中断子程序----------------
				
				;---------------延时子程序---------------
				DEYLAY10MS:  MOV R6,#40H;
				DELAY0:     MOV R7,#248H;
				            DJNZ R7,$;
				            DJNZ R6,DELAY0;
				            RET;
				
				
				END
				
				;---------------注意事项-----------------
				
							

相关资源