❶ 单片机 汇编语言如果要实现按键按下后连加或连减的效果,程序该怎么编写
汇编很久没用过了,提供一下思路,供参考!
可采用计时的方式,检测按键按下状态超过2秒后,数据开始增大递加递减的步距(之前是每次加减1,增大后,每次加减10),松开按键后,计时器清零!
采用计次的方式也可以实现,按键后,数据递加或递减一次,延时300毫秒,再次检测按键,未松开,继续递加,加满5次后,开始增发递加或递减步距,松开按键后,计次清零!
❷ 单片机一个按键控制一个程序
你把几种方式写成几个子程序,然后主程序调用按键检测,根据检测到的键值调用对应的子函数即可
❸ 怎么让单片机按一下按键执行一个程序,再按一下马上执行另一个程序
call key
jmp loop
key:
jnb p3.0,rel
ret
rel:
call delay20MS
jnb p3.0,rel
第一次这里标志位为0,则执行,第一次按下功能。
❹ 在单片机中可否实现此种:程序有5步,当我按下按键程序开始执行,当我松开按键则程序立即停止
当然可以,例如
#include "reg52.h"
sbit key=p1^0;
void main()
{
while(key);//程序开始停留此处,等待按键按下
while(!key)//键按下没有松开期间,执行下面代码,按键松口后,循环结束,程序结束
{
//执行代码加在这里
}
}
❺ 单片机按键按下后后续程序才执行
在某个地方,使用无限循环
while(P1.1==0){
;/// 什么都不做。
}
后面的语句
❻ 单片机按一下加一,加到20的程序
假设P0 P1口各接一个数码管,p2.0接按键,程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P2^0;
uchar num=0;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void main(void )//主程序
{
while(1)
{
if(key==0)//判断按键是否按下
{
Delay1ms(10);//延时消抖
if(key==0)
{
while(key==0);;//等待按键抬起
num++;
if(num==20)num=0;
}
}
P0=table[num%10];
P1=table[num/10];
}
}
❼ 怎么让单片机按一下按键执行一个程序,再按一下执行另一个程序
loop:
call key
jmp loop
key:
jnb p3.0,rel
ret
rel:
call delay20MS
jnb p3.0,rel
第一次这里标志位为0,则执行,第一次按下功能。
第二次按下时,这里标志位为1,则跳过下边的程序,执行另一个程序了。执行完将这个标志位清零。
CLR FLAG.0
RET
第一次按下,会到这里,执行下功能
置起一个标志位。
如SETB FLAG.0
RET
这样就这实现了一键两功能,如果要更多,就设置一个寄存器,每次加1,对比。是那个执行那个程序,最多一个按键可以做到255种功能。当然你肯定用不了这么多。
满意给我加分吧,只能给你思路,给你完整程序是害你的。
❽ 51单片机 按键按下去 计数一次 程序应该怎么写
在按键按下后,用循环语句,等待抬起计数
if(按键按下)
{
延时;
if(按键按下)
{
while(按键没有松开);//如果按键没有松开,程序会停在这里
count++;//按键松开后,程序会运行到这里,计数值加1
}
}
❾ 求关于单片机按键的程序
void _Key(void)
{
if(!Key) //有按键按下
{
Delay(500); 延时
if(!Key) //还是按下状态,即长击
{
Disp("2");
}
else //否则就是短击
{
Disp("1");
}
}
else //没有按键按下
{
Disp("3");
}
}
大概思路是这样,延迟函数自己掌握,一般还要加消抖(也就是较短的延时后再判断一次按键状态)
❿ 单片机中如何下程序
单片机中的程序是烧进去的,有的带内部程序存储器,有的不带,都可固化在外部程序存储器中。