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;
}
思路很简单,就是用检测的方法去扫描相应的按键是否被触发,然后执行相应的子程序。