- //****************************************
- // 用按键控制LED的移位
- //
- //****************************************
- K1 BIT P1.6
- K2 BIT P1.7
- //*****************************************
- ORG 0000H ;程序从程序存储器0000H中开始存放
- AJMP MAIN ;跳往主程序
-
- ORG 0030H
- MAIN: MOV P2,#0FEH ;初始化点亮最下面的灯
- LOOP: JNB K1,TO_LEFT ;跳往TO_LEFT程序处
- JNB K2,TO_RIGHT ;程序跳往TO_RIGHT程序处
- MOV 30H,#100 ;软件计数
- DJNZ 30H,DELAY1 ;调用延迟函数
- AJMP LOOP ;程序返回
- //
- TO_LEFT:
- ACALL DELAY1 ;调用延迟程序1
- JB K1,RETURN ;K1为抖动,所以不点亮LED,返回
- MOV A,P2 ;将P2的值赋值给累加器A
- RL A ;将A循环左移
- MOV P2,A ;将累加器A的值重新赋值给P2,点亮LED
- RETURN: AJMP LOOP ;返回
- //K2按下的操作
- TO_RIGHT:
- ACALL DELAY1 ;调用延迟程序1
- JB K2,RETURN1 ;K2为防抖动
- MOV A,P2 ;将P2的值赋值给累加器A
- RR A ;将累加器A中的值右移
- MOV P2,A ;将累加器A的值重新赋值给P2,点亮LED
- RETURN1:AJMP LOOP ;返回
- //延迟10MS的程序
- DELAY1:
- MOV R0,#50
- LOOP1: MOV R1,#100
- LOOP2: DJNZ R1,LOOP2
- DJNZ R2,LOOP1
- RET
- //表示程序在程序存储器中结束
- END
复制代码不知道为什么不能通过P1.6 P1.7来实现LED的左移和右移
此帖出自
小平头技术问答
这个mark下了,过阵子回家继续理解,深入汇编,然后准备搞OS
一周热门 更多>