⑴ 80C51单片机怎么用按键选择两个不同的程序
如果要使用按键选择两个不同的程序,可以采用如下方法:
1、在80C51单片机的程序中定义两个不同的子程序,分别处理两个不同的功能。
2、在80C51单片机的程序中定义一个循环,用于监听按键的输入。
3、在循环中,通过读取按键的状态来判断用户按下了哪个按键。
4、如果用户按下了第一个按键,就调用第一个子程序;如果用户按下了第二个按键,就调用第二个子程序。
5、在子程序中实现具体的功能代码。
以上就是使用按键选择两个不同的程序的基本流程。
⑵ 简述单片机独立按键的任务分为几步,分别是什么
5步。分别是判断按键是否按下,延时消抖,再次判断按键是否按下,等待按键抬起,执行预定语句。
一种是普通io口,一种是中弹的形式,普通io口是按下按键触发按键子程序案件,指程序经过一段时间的,比如20~50毫秒的延时再次毒案件,如果按键值还是会按下,那么就延时等待按键抬起按键,抬起后执行按键程序,然后返回中弹也是一样的,按下按键之后进入中段读按键状态,是否还是为按一下是按一下等待延时再读等待,然后等待案件采取后执行相应的代码,然后退出总代。
⑶ 51单片机中按键程序用C怎么写
这个太简单了吧,记住写程序定时器要一直跑,建立一个时基,像个手表的时间一样要一直跑,即有time_125us,time_1ms,time_100ms,time_1s,time_1min,time_1hour等时间变量建立时基一直走。其它程序可以分时扫描也可以轮流扫描,不能停留死等,像电脑里的程序一样表面看起来各个程序是一直运行的,即各个程序中不能有delay_1ms之类的函数,如果要定时应该申请一个变量在时基里处理,如等待2s可以这么写
if(step==0){
time=2,time_100ms=0,step=1;}
if((step==1)&&(time==0)){//2s到
//等待2s后要执行的代码
}
在时基时每1s把time减1,减到0为止即if(time)time--;
对按键的写法一般用采集的方法如按键后IO为低
if(!IO){
//低电平,有按键
key_time++;
if((key_time==100)&&(!key_flag)){
//已经赋值了就不再赋值了
key_flag=1;
key_flag_bak=1;
}
else{
//无按键
key_time=0;
key_flag_bak=0;
}
if(key_flag&&(!key_flag_bak)){
//有按键并松开,即松开响应
time=2;
//亮2s
key_flag=0;//把键值清0
}
if(time){
LED_ON;//灯亮
}
else
LED_OFF;
⑷ 51单片机如何用一个按键控制一段程序的运行与停止
1、创建项目文件。
6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。
⑸ 单片机按键触发C程序
while(1)
{
if(keyflag==1) //有按下切出死循环
break;
else continue;
}
while(1)
{
..... //用户自己的程序
}
这种方法是模拟按键按下启动真正的应用程序,触发的是自己的功能程序短。从效果上来还是可以的
⑹ 单片机应用系统的键盘处理程序主要包括哪几部分内容
输出,输入,复位。
1、单片系统的键盘程序包括输出,由键盘进行敲击字母输出。
2、输入是通过打完的字通过显示器进行输入。
3、复位是将错误的地方进行删除复位。
⑺ 单片机设置一个按键重启主程序
首先在程序的开头加入一句定义,sfr SAP = 0xe7;
SAP 是名称,可以随意改写
之后在外部中断或程序内添加一个按键检测的语句
例如
if(K1==0)//如果按键被按下
{
YS(20);//延时去抖
if(K1==0)//如果是有效按键触发
{
SAP=0x60;//执行软复位
}
}
此按键处理语句即可实现单片机的软复位操作
至于sfr SAP = 0xe7;这一条语句可以放在#include<reg52.h>头文件下面
#include<reg52.h>
sfr SAP = 0xe7
sbit K1=P3^3;//按键
至于这两个地址0x60和0xe7代表什么,我也查阅了很多资料
⑻ 单片机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--);
}
⑼ 51单片机汇编语言编程独立按键
四个按键,定义如下:
KEY1 BIT P3.0
KEY2 BIT P3.1
KEY3 BIT P3.2
KEY4 BIT P3.3
按键处理程序:
;-----------------------------------
READ_KEY:
JB KEY1, K2
CALL DELAY
JB KEY1, K2
JNB KEY1, $
PUSH ACC
INC 75H
MOV A, 75H
CJNE A, #10, ZINT01
MOV 75H, #0
ZINT01:
POP ACC
JMP K_EXIT
;---------------
K2: JB KEY2, K3
CALL DELAY
JB KEY2, K3
JNB KEY2, $
PUSH ACC
INC 76H
MOV A, 76H
CJNE A, #10, ZINT01
MOV 76H, #0
ZINT01:
POP ACC
JMP K_EXIT
;---------------
K3: JB KEY3, K4
CALL DELAY
JB KEY3, K4
JNB KEY3, $
PUSH ACC
DEC 75H
MOV A, 75H
CJNE A, #255, ZINT03
MOV 75H, #9
ZINT03:
POP ACC
JMP K_EXIT
;---------------
K4: JB KEY4, K_EXIT
CALL DELAY
JB KEY4, K_EXIT
JNB KEY4, $
PUSH ACC
DEC 76H
MOV A, 76H
CJNE A, #255, ZINT04
MOV 76H, #9
ZINT04:
POP ACC
K_EXIT:
RET
;---------------
DELAY:
DJNZ R7, $
DJNZ R7, $
RET
;-----------------------------------
⑽ 单片机按键程序
检测一个按键:
;--------------扫描按键------
jb p1.0,next;没按下,NEXT下一个
lcall t20ms;有,延迟20毫秒去抖
jb p1.0,next;还是没按下,下一个
jnb p1.0,$;有,等它松开
...;
...;这里写这个键的功能
next: 检下一个键,或返回
....
;---------延迟---------
t20ms:
...
ret