P1.4引脚连接了一个按键(按下时为低,未按下为高),编写程序,使按键按下时(不松开),P2.5输出一个占空比为50%的方波,按键松开时,P2.5输出高电平。
sbit fb=P2.5;sbit k=P1.4;
void main()
{ uchar ys=0;
while(1)
{
if(k==0&&++ys==0)fb=~fb;
}
}
讲真,proteus管脚逻辑状态这个功能贼有用,仿真没出来效果时大部分情况可以通过这个来寻找问题。
但是,在一些情况下,他的影响很大,我做led点阵广告牌时,那个红蓝色的灯真的很烦,因为我使用四个88的led点阵拼成了一个1616的点阵,所以中键会显示红蓝灯
1)没隐藏时效果:
看起来贼难看,把我要显示的东西遮了很多。
2)隐藏时效果:
这样看就好看多了。因为已经确定管脚连接没问题了,所以隐藏掉也无所谓。
在Proteus中实现按下一个低电平的按键时P2.5引脚输出一个占空比为50%的方波,松开按键时P2.5引脚输出高电平,可以使用以下步骤来完成:
创建一个新的Proteus项目,并添加一个8051微控制器模块和一个按键模块。
在代码段中添加以下代码:
IO0 EQU 00H
IO1 EQU 10H
IO2 EQU 20H
IO3 EQU 30H
IO4 EQU 40H
IO5 EQU 50H
IO6 EQU 60H
IO7 EQU 70H
IO8 EQU 80H
IO9 EQU 90H
IO10 EQU 0A0H
IO11 EQU 0B0H
IO12 EQU 0C0H
IO13 EQU 0D0H
IO14 EQU 0E0H
IO15 EQU 0F0H
DATA SEGMENT
OUTBUFF DB 1,2,0,4
LEDTAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AL,88H
MOV DX,IO3+6
OUT DX,AL
MOV AL,00110000B
MOV DX,IO5+6
OUT DX,AL
MOV DX,IO5
MOV AX,500
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,01110110B
MOV DX,IO5+6
OUT DX,AL
MOV DX,IO5+2
MOV AX,5
OUT DX,AL
MOV AL,AH
OUT DX,AL
AGAIN:
MOV DX,IO3+2
MOV AL,0H
OUT DX,AL
MOV DX,IO3+4
IN AL,DX
TEST AL,20H
JZ L1
TEST AL,40H
JZ L2
TEST AL,80H
JZ L3
JMP LOP1
L1:
MOV CL,06H
AGAIN1:
MOV DX,IO3+2
MOV AL,CL
OUT DX,AL
MOV BX,10
CALL DELAY
ROL CL,1
MOV DX,IO3+4
IN AL,DX
TEST AL,20H
JZ AGAIN1
JMP AGAIN
L2:
MOV CL,0FFH
AGAIN2:
MOV DX,IO3+2
MOV AL,CL
OUT DX,AL
MOV BX,10
CALL DELAY
NOT CL
MOV DX,IO3+4
IN AL,DX
TEST AL,40H
JZ AGAIN2
JMP AGAIN
L3:
MOV CL,55H
AGAIN3:
MOV DX,IO3+2
MOV AL,CL
OUT DX,AL
MOV BX,10
CALL DELAY
NOT CL
MOV DX,IO3+4
IN AL,DX
TEST AL,80H
JZ AGAIN3
JMP AGAIN
LOP1:
CALL DISP
JMP AGAIN
DISP PROC NEAR
AGAIN4:
MOV CL,08H
LEA SI,OUTBUFF
LEDDISP:
MOV AL,CL
MOV DX,IO3+4
OUT DX,AL
LEA BX,LEDTAB
MOV AL,[SI]
XLAT
MOV DX,IO3
OUT DX,AL
CALL DELAY_1S
MOV AL,0FFH
MOV DX,IO3
OUT DX,AL
CMP CL,01H
JZ NEXT
INC SI
ROR CL,1
JMP LEDDISP
NEXT:
RET
DISP ENDP
DELAY_1S PROC
PUSH CX
PUSH BX
MOV BX,01H
D1:
MOV CX,0FH
D2:
LOOP D2
DEC BX
JNZ D1
POP BX
POP CX
RET
DELAY_1S ENDP
DELAY PROC
PUSH CX
PUSH BX
WAIT0:
MOV CX,2801
WAIT1:
LOOP WAIT1
DEC BX
JNZ WAIT0
POP CX
POP BX
RET
DELAY ENDP
CODE ENDS
END START
添加一个数字显示模块,并将其连接到P2.5引脚。这个模块将用于显示方波。
编译并烧录程序到8051微控制器。
运行仿真。按下按键时,P2.5引脚将输出一个占空比为50%的方波。松开按键时,P2.5引脚将输出高电平。
注意:以上代码是使用汇编语言编写的,如果对汇编语言不熟悉,可以尝试使用C语言或其他高级语言来编写类似的逻辑。