汇编语言51单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制数码管上显示数字减1?
原密钥1为P3.4,添加密钥2为P3.5;
1. 如下:
TAB:DB00H,3F H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H
> 即数据的开头和结尾都是0(这是Attend only),中间是七段码中的数据显示 0--F;2.
3.显示的节目也发生了变化,只是节目有延迟。
改变;
MOVR5,#0 1H
CLRA
LCALLDISPLAY
循环:
LCALLKEYDOWN
LCALLD ISPLAY
SJMPLOOP
KEYDOWN:
JBP3.4,CK11 ;如果key1没有按下,则转到key2
LCALLDS1MS ;P3.4=0表示Key1被按下JBP3.4,CK11 ; 但是 key1 无法释放
MOVR5, #01H
INCR4 ; 然后转到key1
LCALLDS1MS ;P3.5=0表示Key2被按下
JBP3.4, KEYDOWN ; key2 还不能释放
MOVR5, #10H
DECR4 ; MOVR4,R5
播放:
MOVE,R4
MOVCA,@A+DPTR
JZD1//累加器(A)= 0转
MOVP0,A
SETBP2.6
CLRP2.6
MOVP0,#0FEH
SETBP2.7
CLRP2.7
LCALLDS1MS ;等待
LCALLKEYUP
RET
KE YUP:
JNBP3.4,KEYUP ;转P3.4=0
JNBP3.5,KEYUP ; 等待按钮松开
LCALLDS1MS
JNBP3.4,KEYUP
JNBP3.5,KEYUP
RET
选项卡:DB00H、3FH、 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H
END
单片机计数器实现减一
要清除 0, 总共应包含 3 个密钥
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitk 1=P1 ^0;//清0
sbitk2=P1^4;//减少1
sbitk3=P1^7;//添加 1
ucharseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
ucharcounter;
voiddelay(uintm)
{
uinti,j;
for(i=0;i for(j=0;j<10;j++) ; } voiddisplay(void ) { P3=0x01; P2=seg[ counter/10];//显示十位 delay( 20); P3=0x02; P2=seg[counter%10];//显示数字个位 delay(20); } voidmain( ) { while(1) { display( ); if(k1= =0) // 清除 0 { counter=0; while(k1= =0)display();//等待按键释放 } if(k2==0)//减1 { counter--; if(counter ==0xff)counter=99; while(k2==0)display(); } if(k3==0)//加1 { counter++;
while(k3==0)display();
}
}
}
图示如下