导航:首页 > 操作系统 > 2个按键控制51单片机

2个按键控制51单片机

发布时间:2022-11-01 16:12:35

1. 谁能帮我写一个51单片机的C程序。两个按键控制一个LED。

void
main(void)
{
led=1;
//不亮
while(1)
{
if(key1==0
&&
key2==1)//按键1按下,按键2没按
{
led=0;
//亮
}
else
if(key1==1
)
//按键1释放或未按时,灯灭
{
led=1;
//灭
}
if(key2==0
&&
key1==1)
//按键2按下,按键1没按
{
led=0;
//先亮
delay_1s(30);
//等30秒
led
=1
;
//30秒后灭
}
}
}

2. 求程序:51单片机两个按键做模式控制led亮灭1;交替亮2;同亮同暗

用I/O口的两个引脚读取按键的状态,采用循环扫描工作方式,按键按下为1,没按为0,则按键状态为01时,让LED交替量,数据口输出对应的高低电平即可;按键状态为10时,数据口输出同亮同灭数据

3. 单片机程序编程(用C51) 2个按键控制2位七段LED显示,每按下一次“+

main()
{
while(1)
{
key=KEY_Scan(0);
if(key=="+")
{
value++;

}
if(key=="-")
{
value--;
}

}

}
u8 KEY_Scan(char mode)
{
static u8 key_up=1;
if(mode)key_up=1;
if(key_up&&(KEYADD==0||KEYRED==0|))
{
delay_ms(10);//去斗
key_up=0;
if(KEY0==0)return 1;
else if(KEY1==0)return 2;
}else if(KEYADD==1&&KEYRED==1)key_up=1;
return 0;
}
value为显示值,KEYADD、KEYRED为加减的两个键,底层要你自己实现

4. 51单片机,用两个按键分别控制两个led,一个亮/灭,另一个闪烁/灭,为什么我按下了第二个灯不闪呢

你的led1=~led1;这个语句没有循环,所以只会反转一次。要么加循环,要么再写一个闪烁函数。

voidled_filcker(usignedcharx)

{

while(x)

{

led1=~led1;

x--:

}

}

如果你是想,按一下,松开也会闪烁,再按一下熄灭。你得定义一个变量来表示按键的按下。

#include<reg52.h>

#define uchar unsigned char

bit stop=1;

sbit k5=P1^4;

void delay(uchar xms)

{

while(xms--);

}

void main()

{

if(k5==0)

{

delay(1000);

if(k5==0)

{

while(k5==0)

{

if(stop)

<<<<<<<<<<<<<<<此处执行你的语句

else

stop=~stop:

}

}

}
}


5. 51单片机两个键分别控制p2.0口延时10秒和p2.1口延时30分钟.c语言,定时器,89c52

#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitp20=P2^0;
sbitp21=P2^1;
ucharcnt,sec,min;
voidt0isr()interrrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=0)
{
cnt=0;
sec++;
if(sec>=10)p20=1;
if(sec>=60)
{
sec=0;
min++;
if(min>=30)p21=1;
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
p20=0;
p21=1;
whiile(1);
}

6. 51单片机怎样用两个以上按键同时控制相应程序的执行

按键按下,给一标志位,子函数 通过识别 标志位,判断是否 执行流水。

猜测:又一个受 郭大侠荼毒的孩子!

7. 用两按键控制51单片机的2个外部中断怎么编

按键控制中断你这里的描述是不规范的,我想应该是两个按键接外部中断吧。

#include<reg51.h>
#defineucharunsignedchar
uchardat;
voidext0()interrupt0
{
dat++;
P0=dat;
}
voidext1()interrupt2
{
dat--;
P0=dat;
}
main()
{
EX0=1;
EX1=1;
IT0=1;
IT1=1;
EA=1;
while(1);
}

8. 51单片机两个键分别控制P2.1口延时10秒和P2.0口延时30秒

下面这个程序里面有你要的东西,自己找找。 #include"reg51.h" void delay(int n); sbit K1=P3^3; //LED左移按键 sbit K2=P3^5; //LED右移按键 sbit K3=P3^6; //开启手动按键 sbit K4=P3^7; //开启自动按键 bit mark1=0; bit mark2=0; unsigned char a,b,c,d; int x; void pulse(void); void main() { a=0xfe;b=0xff; c=0x7f;d=0xff; while(K4) {P2=a; P0=b; if(!K1&!mark1) //如果K1按下且mark1=0 {delay(10); //延时 if(!K1) //检查K1还是按下 { mark1=1; //mark1=1 if((a&0x80)&&(a!=0xff)) //如果a=1*******("*"号为0或者1(最高位为1))并且a不等于0xff { a=(a<<1)|0x01;pulse();} //让a向左移后边会拉出0,然后与00000001相与(最后一位补1) else if(a==0x7f) {a=0xff;b=0xfe;pulse();} else if((b&0x80)&&(b!=0xff)) {b=(b<<1)|0x01;pulse();} else if(b==0x7f) {a=0xfe;b=0xff;pulse();} // {a</a左移一位让P2^7的值跳到P2^0上 } } else if(K1) {mark1=0;} if(!K2&!mark2) { delay(10); if(!K2) { mark2=1; if((a!=0xff)&&(a!=0xfe)) { if(a&0x01) { a=(a>>1)|0x80;pulse();} } else if(a==0xfe) {a=0xff;b=0x7f;pulse();} if((b!=0xff)&&(b!=0xfe)) { if(b&0x01) { b=(b>>1)|0x80;pulse();} } else if(b==0xfe) {a=0x7f;b=0xff;pulse();} } } else if(K2) mark2=0; } while(K3) { if(!K1&!mark1) {delay(10); if(!K1) {mark1=1; for(x=0;x<=16;x++) { P0=a;P2=b; delay(100); if((a&0x80)&&(a!=0xff)) {a=(a<<1)|0x01;} else if(a==0x7f) {a=0xff;b=0xfe;} else if((b&0x80)&&(b!=0xff)) {b=(b<<1)|0x01;} else if(b==0x7f) {b=0xff;a=0xff;} } } } else if(K1) {mark1=0;} if(!K2&!mark2) {delay(10); if(!K2) {mark2=1; for(x=0;x>1)|0x80;} else if(c==0xfe) {c=0xff;d=0x7f;} else if((d&0x01)&&(d!=0xff)) {d=(d>>1)|0x80;} else if(d==0xfe) {d=0xff;c=0xff;} } } } else if(K2) {mark2=0;} } } void delay(int n) { int i,j; for(i=0;i<=n;i++) for(j=0;j<=320;j++); } void pulse(void) { P1=0xfe; delay(100); P1=0xfd; delay(100); P1=0xfb; delay(100); P1=0xf7; delay(100); P1=0xff; }

9. c51单片机:两个独立按键控制一个led,k1按下松开led闪烁,k2按下松开led灭


#include"reg52.h"
typedefunsignedintu16;
typedefunsignedcharu8;
sbitled=P2^0;//把所要控制的led灯定义为p2.0这个口
sbitk1=P2^1;
sbitk2=P2^2;

voiddelay(u16i)
{
while(i--);
}//一个延时程序
voidmain()
{
if(k1==1)
while(1)
{
led=1;
delay(50000);//大约延时450ms
led=0;
if(k2==1)
break;
}
led=0;
}

思路很简单,就是用检测的方法去扫描相应的按键是否被触发,然后执行相应的子程序。

阅读全文

与2个按键控制51单片机相关的资料

热点内容
65压缩机多少钱 浏览:120
同类型服务app如何脱颖而出 浏览:762
mtm月线金叉选股预警公式源码 浏览:227
javasapwebservice 浏览:709
程序员老了去做什么 浏览:404
linux小括号 浏览:773
已加密的u盘怎么清空 浏览:433
怎么拿到服务器权限 浏览:192
延时摄影app如何保存 浏览:195
程序员转正申请职级怎么写 浏览:874
closelinuxsocket 浏览:268
程序员0基础该怎么学 浏览:276
android支付宝支付原理 浏览:729
股票指标加密可以导入 浏览:935
怎样算法排卵期 浏览:803
小米如何加密第三方软件 浏览:232
安卓工程师有什么证书 浏览:788
小米相册截屏文件夹目录 浏览:552
scum怎么查看服务器的ip地址 浏览:457
程序员面试要那么长时间吗 浏览:63