二话不说,先上代码:
ORG 00H
LOOP: JB P3.4,LOOP
LCALL DELAY
JB P3.4,LOOP
LOOP1:JB P3.4,LOOP
JB P1.0,TC1
SETB P1.0
JMP LOOP
TC1: CLR P1.0
JMP LOOP
DELAY: MOV R7,#50
D1: MOV R6,#50
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
我就不说什么数码管的静态显示,动态显示了,会点LED了,数码管就是比较复杂的点LED。所以现在来说检测io口的状态。我的按键是P3.4,平常位高电平,按下即为低电平。实现:按键按一下灯的状态就变为相反状态
ORG 00H
LOOP: JB P3.4,LOOP ; JB指令:如果P3.4这个口为高电平,就是1,则跳到loop去执行,这个loop段的作用就是不断地去检测io口的状态,如果一直为1,则一直在检测,当它为0,就是按下的时候,就继续执行下面的程序,这里有个延时,主要是为了避免按键抖动带来的影响。我就不去说这个按键抖动了。
LCALL DELAY
JB P3.4,LOOP
LOOP1:JB P3.4,LOOP ;延时消抖后再来判断一下,其实没有这句话也可以
JB P1.0,TC1 ;判断P1.0这个口是不是等于1,如果是,则跳到TC1这里,把P1.0清零
SETB P1.0 ;如果P1.0不是1,则继续执行这一步,把它设为1,
JMP LOOP ;回到按键检测当中
TC1: CLR P1.0 ;把P1.0清零
JMP LOOP ;回到按键检测
DELAY: MOV R7,#50 ;延时函数
D1: MOV R6,#50
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END