;*******************************************************************; ;本程序为独立键盘应用进程,对于每一个按键,当完成按下'放开一个动作后,数码管显示 ;相应按键对应的数字,s2-1's3-2's4-3's5-4,且本程序还包含消抖处理,望大家在学习中体会 ;P2.0-P2.5控制六位数码管,P0.0-P0.7控制每位数码管的8段,s2-s5分别联接p3.4-p3.5 ;********************************************************************; org 0000h ljmp main main: mov p3,#0ffh anl p3,#0f0h;屏蔽P3口的低四位 mov b,p3;读入P3口数据 lcall DELAY;延世10ms,消抖 anl p3,#0f0h;屏蔽P3口的低四位 mov a,p3;再读入P3口数据 cjne a,b,main;若不相等,则变化为抖动引起,跳回主程序 cjne a,#0e0h,keys3;判断是否为S2键按下,若不是则检测S3键 keys2: s2:mov a,p3 cjne a,#0f0h,s2;判断s2是否放开 mov p2,#0c0h;s2键放开,所有数码管显示1 mov p0,#0cfh keys3: cjne a,#0d0h,keys4;判断是否S3键按下,若不是则检测S4键 s3:mov a,p3 cjne a,#0f0h,s3;判断s3是否放开 mov p2,#0c0h ;S3键放开,所有数码管显示3 mov p0,#0a4h keys4: cjne a,#0b0h,keys5;判断是否为S4键按下,若不是则检测S5键 s4:mov a,p3 cjne a,#0f0h,s4;判断s4是否放开 mov p2,#0c0h;S3键放开,所有数码管显示3 mov p0,#0b0h keys5: cjne a,#70h,main ;判断是否为S5键按下,若不是则S5键按下则跳回主程序重新检测 s5:mov a,p3 cjne a,#0f0h,s5;判断s5是否放开 mov p2,#0c0h;S5键放开,所有数码管显示4 mov p0,#99h ljmp main DELAY:MOV 71H,#100 ;(延时10ms子程序,晶振12m) LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOOP0 NOP DJNZ 71H,LOOP1 MOV 70H,#48 LOOP4:DJNZ 70H,LOOP4 ret end