| P3口键盘输入程序 |
| |
| 作者:佚名 来源:本站原创 点击数:1369 更新时间:2006-2-21 |
|
您可以添加到网摘 让更多人关注此文章:
;************; ;小灯控制程序; ;************; ; ;************; ;中断入口程序; ;************; ; ORG 0000H ;程序执行开始地址 LJMP START ;跳至START执行 ORG 0003H ;外中断0中断入口地址 RETI ;中断返回(不开中断) ORG 000BH ;定时器T0中断入口地址 RETI ;中断返回(不开中断) ORG 0013H ;外中断1中断入口地址 RETI ;中断返回(不开中断) ORG 001BH ;定时器T1中断入口地址 RETI ;中断返回(不开中断) ORG 0023H ;串行口中断入口地址 RETI ;中断返回(不开中断) ; ;************; ; 初始化程序 ; ;************; ; CLEAR: MOV 20H,#00H ;20H单元内存清0(闪烁标志清0) SETB 00H ;20H.0位置1(上电时自动执行闪烁功能1) RET ;子程序返回 ; ;************; ; 主 程 序 ; ;************; ; START: ACALL CLEAR ;调用初始化映绦?br> MAIN: LCALL KEYWORK ;调用键扫描子程序 JB 00H,FUN0 ;20H.0位为1时执行FUN0 JB 01H,FUN1 ;20H.1位为1时执行FUN1 JB 02H,FUN2 ;20H.2位为1时执行FUN2 JB 03H,FUN3 ;20H.3位为1时执行FUN3 AJMP MAIN ;返回主程序MAIN ; ;************; ; 功能程序 ; ;************; ;第1种闪烁功能程序 FUN0: MOV A,#0FEH ;累加器赋初值 FUN00: MOV P1,A ;累加器值送至P1口 LCALL DL05S ;延时 JNB ACC.7,MAIN ;累加器最高位为0时转MAIN RL A ;累加器A中数据循环左移1位 AJMP FUN00 ;转FUN00循环 ; ;第2种闪烁功能程序 FUN1: MOV A,#0FEH ;累加器赋初值 FUN11: MOV P1,A ;累加器值送至P1口 LCALL DL05S ;延时 JZ MAIN ;A为0转MAIN RL A ;累加器A中数据循环左移1位 ANL A,P1 ;A同P1口值相与 AJMP FUN11 ;转FUN11循环 ; ; 第3种闪烁功能程序 FUN2: MOV A,#0AAH ;累加器赋初值 MOV P1,A ;累加器值送至P1口 LCALL DL05S ;延时 CPL A ;A中各位取反 MOV P1,A ;累加器值送至P1口 LCALL DL05S ;延时 AJMP MAIN ;转MAIN ; ;第4种功能程序 FUN3: MOV P1,0FFH AJMP MAIN
;************; ; 扫键程序 ; ;************; ; KEYWORK:MOV P3,#0FFH ;置P3口为输入状态 JNB P3.2,KEY0 ;读P3.2口,若为0转KEY0 JNB P3.3,KEY1 ;读P3.3口,若为0转KEY1 JNB P3.4,KEY2 ;读P3.4口,若为0转KEY2 JNB P3.5,KEY3 ;读P3.5口,若为0转KEY3 RET ;子程序返回 ; ;闪烁功能0键处理程序 KEY0: LCALL DL10MS ;延时10毫秒消抖 JB P3.2,OUT0 ;P3.2为1,子程序返回(干扰) SETB 00H ;20H.0位置1(执行闪烁功能1标志) CLR 01H ;20H.1位清0 CLR 02H ;20H.2位清0 CLR 03H ;20H.3位清0 OUT0: RET ;子程序返回 ; ; 闪烁功能1键处理程序 KEY1: LCALL DL10MS JB P3.3,OUT1 SETB 01H ;20H.1位置1(执行闪烁功能2标志) CLR 00H CLR 02H CLR 03H OUT1: RET ; ;闪烁功能2键处理程序 KEY2: LCALL DL10MS JB P3.4,OUT2 SETB 02H ;20H.2位置1(执行闪烁功能3标志) CLR 01H CLR 00H CLR 03H OUT2: RET ; ;闪烁功能(备用)键处理程序 KEY3: LCALL DL10MS JB P3.5,OUT3 SETB 03H ;20H.3位置1(执行备用闪烁功能标志) CLR 01H CLR 02H CLR 00H OUT3: RET ; ;************; ; 延时程序 ; ;************; ;0.5毫秒延时子程序,执行一次时间为513微秒 DL512: MOV R2,#0FFH LOOP1: DJNZ R2,LOOP1 RET ; ;10毫秒延时子程序(调用20次0.5毫秒延时子程序) DL10MS: MOV R3,#14H LOOP2: LCALL DL512 DJNZ R3,LOOP2 RET ; ;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为15×25毫秒) DL05S: MOV R4,#0FH LOOP3: LCALL DL25MS DJNZ R4,LOOP3 RET ; ;25毫秒延时子程序,用调用扫键子程序延时,可快速读出功能按键值 DL25MS: MOV R5,#0FFH LOOP4: LCALL KEYWORK DJNZ R5,LOOP4 RET
END ;程序结束
|
没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。 更多评论
|
|
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。 |
|
|
|