Ⅰ 51单片机1按键切换3种不同状态的c程序
主程序大致是这样的
flag=0;//记录按键次数
While(1)
{
if(key==0){delayms(20);if(key==0)flag++;}//按键检测
if(flag==3)flag=0;
if(flag==0){正向流水}
else if(flag==1){反向流水}
else {间隔流水}
}存在问题,由于流水灯执行时间较长,因此对按键响应缓慢,可以在流水灯之间加入按键检测语句,当检测到按键按下时,用break语句退出当前循环
Ⅱ 51单片机两程序独立按键切换连接程序怎么写
两段程序还是要合并成一个主程序的,只是分开成两段而已。
sbit ins1=独立按键所在I/O脚;
bit keyab=0; //区分执行A,B程序的标志位,=0,执行A段,=1执行B段
main()
{
...........
while(1) //while前的程序照常写
{
if(ins1==0)
{
keyab=!keyab;
while(ins1==0);
}
if(keyab==1)
{
A段程序写在这里
}
else
{
B段程序写在这里
}
}
}
这样写后,原来A、B程度中的while(1)就不能再写了。而是将while(1)以下程序写到这里。
Ⅲ C51单片机如何通过按钮进行切换,例如一开始点阵上显示心形,按一下按钮变为星型,用程序应当如何实现
方法很简单,
sbit k=P1^0;//选取一个I/O端口连接一个按键
unsigned char r;//设置一个计数变量
void delay(uchar p)//12MHz@p微秒延时函数
{
unsigned char i,j;
for(i=0;i<p;i++){
for(j=0;j<50;j++)
{;}}
}
void key()//按键函数
{
if (k==0)//查询按键是否按下
{
delay(20); //等待按键连接稳定
if(k==0) //如果按键仍然是连接状态
{
r++;//标志+1
if(r>1){r=0;}//可以任意多种选择,这里只设定0、1两种状态
while(!k);//等待按键抬起
}
}
}
void set_out()//设置输出方式函数
{
key();//查询按键值
if(r==0){***心形显示***}
if(r==1){***星形显示***}
//if(r==?){***?形显示***}
}
Ⅳ 关于单片机的问题,如果程序中要要到三组工作寄存器Rn,如何切换SP的初值是否要修改若要,如何修改
以下是个示范,依次切换到工作区0到3
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH ;将SP设置到60H以后的RAM区
MOV A,#0
LCALL SETRN
LCALL DELAY
MOV A,#1
LCALL SETRN
LCALL DELAY
MOV A,#2
LCALL SETRN
LCALL DELAY
MOV A,#3
LCALL SETRN
LCALL DELAY
SJMP $
SETRN:
JNZ SETRN1 ;A=0工作区0
CLR RS0
CLR RS1
RET
SETRN1:
JNZ SETRN2 ;A=1工作区1
SETB RS0
CLR RS1
RET
SETRN2:
JNZ SETRN3 ;A=2工作区2
CLR RS0
SETB RS1
RET
SETRN3:
JNZ SETRN1 ;A=3工作区3
SETB RS0
SETB RS1
RET
DELAY:
MOV R0,#10
DELAY1:
MOV R1,#100
DJNZ R1,$
DJNZ R0,DELAY1
RET
Ⅳ 如何通过单片机配置进入或切换到某种工作模式
首先,要看你用的单片机有没有模式选择,没有那我也没办法!有的话,看一下资料,看它是什么触发方式的!然后在编写程序设置触发脚!然后写一个触发子程序(通常为WAKEUP:......)看你的资料而定!如果还不明白,可以把资料发到我的邮箱:[email protected] 我看看能不能帮你一下!
Ⅵ 单片机中如何用按键进行模式切换
参考如下:
假设按键按下为低电平;
if(key1==0)
{
while(key1==0);//弹起后执行
{
按键1需要执行的功能;
}
}
if(key2==0)
{
while(key2==0);//弹起后执行
{
按键2需要执行的功能;
}
}
Ⅶ stm32单片机如何实现一个按键切换两个程序
定义一个标志位
bit
flag=0;
主各序结构:
while(1)
{
if(flag==0)
{.......
.程序1
}
if(flag==1)
{.......
程序2
}
}
按键检测可用中断,中断程序中改变flag的值
Ⅷ 单片机C语言编程问题。怎么实现按键切换两个子程序啊。。(时钟和温度)
应该用一个标志位,如果你这种是普通的按键,即按下时是低电平,松开时是高电平的,大概这样写,在main声明一个变量,作为标志位.
char Flag;
然后按键按下时,直到弹起按键才改变Flag的状态。
if(!Key)
{
while(!Key);
Flag=~Flag;
}
if(Flag)
{
time = hour*100 + min;
ShowTest(time);
delay();
}
else
{
gettempts();
display(t);
}
把这个放在while(1)中,就可以了。
希望我的回答对你有帮助,有什么问题欢迎一起探讨。
Ⅸ 单片机如何实现一个按键切换两个程序
#include<reg51.h>
sbitkey=P1^0;
bitflag=0;
voidA(void)
{
.....
}
voidB(void)
{
......
}
main()
{
while(1)
{
if(key==0)
{
while(key==0);
flag=~flag;
}
if(flag)B();
elseA();
}
}
Ⅹ c51单片机里 怎么让程序在进行一个循环程序是由一个按键可以随时切换到另外一个循环程序中
单片机程序 一般结构应该是 一个主循环、及多中断处理程序,在主循环中 包含需要处理的 各种功能的子程序,子程序不应该以循环形式存在,中断 及 子程序 能简短要短小精悍,按键可以随时切换 某种功能 只要 按键时改变 标志位就可以了(标志位可以自己定义),如标志位为 1 调用一个功能的子程序、为 0 调用另一个功能的子程序,方法很多很多。尽量不要用 循环延时程序,中断程序中更不能调用延时程序,不然可能会出现意想不到的麻烦。