⑴ 汇编单片机按键
不是用JNZ ,那是判断A是不是0
一般用JB和JNB 判断按键的
⑵ 51单片机按键
#include<reg51.h>
#define uchar unsigned char
uchar num,time,limit=2;
sbit led1=P1^0;
sbit key1=P2^0;
bit flag=0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time>=60)
{
TR0=0;
time=0;
flag=1;
}
}
void t1isr() interrupt 3
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
num++;
if(num>limit)
{
num=0;
led1=~led1;
}
}
main()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(key1==0)
{
time=0;
num=0;
TR1=1;
TR0=1;
flag=0;
while(key1==0);
if(flag==1)limit++;
}
}
}
⑶ 单片机实现按键功能函数
#include<reg51.h>
#defineucharunsignedchar
uchardat;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
main()
{
bitflag=0;
while(1)
{
if(key1==0)
{
while(key1==0);
flag=~flag;
}
if(key2==0)
{
while(key2==0);
if(flag)dat++;
}
if(key3==0)
{
while(key3==0);
if(flag(dat--);
}
P0=dat;
}
}
⑷ 单片机C语言按键开关程序
#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay_ms(uint);
sbitled0=P0^0;
sbitled1=P0^1;
sbitkey1=P3^2;
sbitkey2=P3^3;
voidmain()
{
uchari=0;
ucharj=0;
while(1)
{
if(key1==0)//按键1
{
delay_ms(10);
if(key1==0)
{
i++;
i=i%2;
switch(i)
{
case0:led0=1;break;//关小灯
case1:led0=0;break;//开小灯
default:break;
}
}
while(!key1);
}
if(key2==0)//按键2
{
delay_ms(10);
if(key2==0)
{
j++;
j=j%2;
switch(j)
{
case0:led1=1;break;//关小灯
case1:led1=0;break;//开小灯
default:break;
}
}
while(!key2);
}
}
}
voiddelay_ms(uintz)//延时子程序
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
⑸ 单片机按键功能
按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。
2.输入原理
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将键输入,并检查是哪一个键按下,将该键号送入累加器ACC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序
⑹ 单片机,按钮,
单片机的端口一般为准双向IO端口,当你想读端口时需要先写1,这时端口为弱上拉,外部信号可以准确的反应在端口上,如果,端口原来为低电平,这时候你如果想读端口的话,是读不到的,读到的为0,按键一般也是采用一端接地的方法,如果另一端接电源,当按键按下时,单片机会坏掉。继续回答你的问题,读取按键时,当按键按下时是由高到底
⑺ c51单片机按键
1.设置一个状态变量,如flag,定义flag=0为开状态,flag=1为关状态。
2.因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入。设按键接单片机P01引脚,故可采用以下程序实现按键扫描
if(P01==0)//按下按键,进入下降沿
{
delay2();//20ms延时去按键前抖动
while(P01==0);//等待上升沿到 来,即按键弹起
flag=~flag;//flag取反,实现状态切换
}
void delay2()//20ms延时子程序
{
unsigned char i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
注:根据按键的具体接法,若按下按键向单片机输入低电平,则采用以上程序;若按下按键向单片机输入高电平,则将两处P01==0均改为P01==1。
⑻ 单片机按键
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP GT0
ORG 0080H
MAIN:MOV P0,#00H ;灭灯
MOV IE,#82H ;开中断
MOV SCON,#00H ;串行发送模式
MOV TMOD,#01H ; T0方式1定时
MOV TH0,#3CH ;50毫秒初值
MOV TL0,#0B0H
MOV DPTR,#TAB ;表地址入口
CLR A
MOV 30H,A ;小时
MOV 31H,A ; 分钟
MOV 32H,A ; 秒
MOV 33H,#1 ; 星期
MOV 34H,A ; 二进制加一演示
MOV R0,#20 ; 1秒中断次数
SETB TR0 ; 启动T0
M0:LCALL JIAN ; 调用查键
LCALL XIANSHI ;调用显示
SJMP M0
GT0:PUSH ACC
MOV TH0,#3CH
MOV TL0,#0B6H ;重新赋值占了6个机器周期,0B0H改为0B6H
DJNZ R0,RET0 ;不够20次返回
MOV R0,#20
INC 32H ; 秒加一
INC 34H ;二进制演示加一,到255加一为0
MOV SBUF,34H ;串行发送
JNB TI,$ ;等待发送结束
CLR TI ;清楚发送标志
MOV A,32H
CJNE A,#60,RET0 ;比较秒是否到60
MOV 32H,#0 ;到60改为0
INC 31H ;分钟加一
MOV A,31H
CJNE A,#60,RET0 ;比较分钟是否到60
MOV 31H,#0 ; 到60改为0
INC 30H ;小时加一
MOV A,30H
CJNE A,#24,RET0 ;比较小时是否到24
MOV 30H,#0 ;到24改为0
INC 33H ;星期加一
MOV A,33H
CJNE A,#8,RET0 ;比较星期是否到8
MOV 33H,#1 ;到8改为1
RET0:POP ACC
RETI
XIANSHI:MOV A,30H ;小时显示程序段
MOV B,#10
DIV AB
MOVC A,@A+DPTR ;十位
MOV P1,A
SETB P0.0 ;共阳极数码管
DJNZ R1,$
CLR P0.0
MOV A,B
MOVC A,@A+DPTR ;个位
MOV P1,A
SETB P0.1
DJNZ R1,$
CLR P0.1
MOV A,31H ;分钟显示程序段
MOV B,#10
DIV AB
MOVC A,@A+DPTR ; 十位
MOV P1,A
SETB P0.2
DJNZ R1,$
CLR P0.2
MOV A,B
MOVC A,@A+DPTR ;个位
MOV P1,A
SETB P0.3
DJNZ R1,$
CLR P0.3
MOV A,32H ;秒显示程序段
MOV B,#10
DIV AB
MOVC A,@A+DPTR ;十位
MOV P1,A
SETB P0.4
DJNZ R1,$
CLR P0.4
MOV A,B
MOVC A,@A+DPTR ;个位
MOV P1,A
SETB P0.5
DJNZ R1,$
CLR P0.5
MOV A,33H ;星期显示程序段
MOVC A,@A+DPTR
MOV P1,A
SETB P0.6
DJNZ R1,$
CLR P0.6
RET
JIAN:PUSH ACC
PUSH PSW
JB P2.0,M1 ;查键,改分钟数
J0:LCALL XIANSHI ;调显示
JNB P2.0,J0 ;按键松开了才加一
INC 31H
MOV A,31H
CJNE A,#60,RET1 ;分钟加到60就归零
MOV 31H,#0
SJMP RET1
M1:JB P2.1,M2 ;修改小时键
J1:LCALL XIANSHI
JNB P2.1,J1
INC 30H
MOV A,30H
CJNE A,#24,RET1 ;小时加到24就归零
MOV 30H,#0
M2:JB P2.2,RET1 ; 修改星期键
J2:LCALL XIANSHI
JNB P2.2,J2
INC 33H
MOV A,33H
CJNE A,#8,RET1 ;星期加到8就改为1
MOV 33H,#1
RET1:POP PSW
POP ACC
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
⑼ 单片机如何实现多按键同时控制
单片机内核决定了只能是单任务,如果使用实时系统的话,通过时间片可以实现虚拟多任务,不过效率不高。象你这种情况其实,循环扫描按键就可以了
⑽ 单片机按键问题
1.中断方式(这个比较可靠)
一般程序按键按下后 灯亮 然后按键松开灯还是亮的
采用的是边沿检测,即有电平跳变就改变输出。
如果想按键按住的时候灯亮,不按的时候灯不亮
采用电平触发,即当电平维持是正或者负的时候才稳定输出。
2.也可以用查询方式
比如
一般程序按键按下后 灯亮 然后按键松开灯还是亮的
if(P1^1==0) //判断是否按下键盘
{
delay10ms(); //延时,软件去干扰
if(P1^1==0) //确认按键按下
{
count++; //按键计数加1
if(count==1) //第一次按下亮,第二次按下灭
{
count=0; //将count清零
}
}
while(P1^1==0);//按键锁定.
}
P1^2=count;//输出显示
如果想按键按住的时候灯亮,不按的时候灯不亮
if(P1^1==1)
{
P1^2=1;
while(P1^1);
P1^2=0;
}
P1^1是按键采集管脚,P1^2是输出显示管脚。当然,前面得加去抖动。
你试试。