C51单片机把两个独立按键控制流水灯的程序变成三个按键控制怎么改?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-10
c51单片机独立按键控制三种流水灯

#include#include#define uchar unsigned charuchar keyval,led,led1;sbit key=P3^2;void ext0() interrupt 0{while(key==0);keyval++;keyval%=3;}void delay(uchar a){uchar i;while(a--)for(i=0;i<120;i++);}main(){led=0xfe;led1=0x55;while(1) { switch(keyval) { case 0:P1=led;led=_crol_(led,1);delay(200);break; case 1:P1=led;led=_cror_(led,1),delay(200);break; case 2:P1=led1;led1=~led1;delay(200);brek; default:break; } }}

#include
sbit led = P1^0;
sbit key1 = P2^0;
sbit key2 = P2^1;

void delay(unsigned int cnt) //简单的延时
{
while(--cnt);
}
/*------------------------------------------------
MAIN C Function
------------------------------------------------*/
void main (void)
{
while (1)
{
if(key1 == 0)/*按键1按下*/
{
led = 0; /*灯亮*/
delay(1000);
while(!key1); /*消抖*/
}
else if(key2 == 0) /*按键2按下*/
{
led = 1; /*灯灭*/
delay(1000);
while(!key2);
}
}
}

想要第三个按键控制数码管,让数码管60s倒计时
----
需要楼主提供:《数码管60s倒计时》的程序。

增加一个控制按键,不难。
难的是,符合你的显示电路的显示程序。

你不提供这段程序,按键,加在何处?

#include<reg51.h>
#include<intrins.h>

#define GPIO_LED P2
//外部中断的I
sbit K3=P3^2;
sbit K4=P3^3;
sbit k5=P3^4//第三个键
void IntConfiguration();
void Delay(unsigned int n);
unsigned char KeyValue=0;

void main(void)
{
GPIO_LED=0Xfe;
IntConfiguration();
while(1)
{
if(k5==0)
keyValue=3;//查询法
if(KeyValue)
GPIO_LED=_crol_(GPIO_LED,1);
else
GPIO_LED=_cror_(GPIO_LED,1);
if(KeyValue==3){
//当按下第三个建时就怎么?

}
Delay(2000);
}
}

void IntConfiguration()
{
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
//设置INT1
IT1=1;
EX1=1;

EA=1;//打开总中断

void Delay(unsigned int n) //延时50us误差 0us
{
unsigned char a,b;
for(;n>0;n--)
{
for(b=1;b>0;b--)
for(a=22;a>0;a--);
}
}

void Int0() interrupt 0 //外部中断0的中断函数
{
Delay(1); //延时消抖
if(K3==0)
KeyValue=1;
}

void Int1() interrupt 2 //外部中断1的中断函数
{
Delay(1); //延时消抖
if(K4==0)
KeyValue=0;
}

  • 51单片机怎样用两个以上按键同时控制相应程序的执行
    答:回答:按键按下,给一标志位,子函数 通过识别 标志位,判断是否 执行流水。 猜测:又一个受 郭大侠荼毒的孩子!
  • 51单片机怎样用两个以上按键同时控制相应程序的执行
    答:按键按下,给一标志位,子函数 通过识别 标志位,判断是否 执行流水。猜测:又一个受 郭大侠荼毒的孩子!
  • 51单片机:按三个键开始流水灯,为什么单独按不行,必须三个键同时按?
    答:k=a&b&c; k为a、b、c三者相与 只有三个按键同时按下(a、b、c同时为1)k才等于1 程序才能进入while(k)中。
  • 51单片机 2个独立按键控制一个led
    答://k3是总开关,k1是二级开关。//先按下k3,然后按下 k1,灯亮灭交替。//--- //应该先检测二级开关 K1。//发现 K1 按下后,再检测 K3 是不是已经在按着。if(!k1) { //先检测二级开关 delay1(10); //消抖 if(!k1) { while(!k1); //等待松开 //松开后,再检测 k3:...
  • c51单片机:两个独立按键控制一个led,k1按下松开led闪烁,k2按下松开le...
    答:include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;sbit led=P2^0;//把所要控制的led灯定义为p2.0这个口sbit k1=P2^1;sbit k2=P2^2;void delay(u16 i){while(i--);}//一个延时程序void main(){if(k1==1)while(1){led=1;delay(50000); //大约延时450msled=0...
  • 单片机c51编程,有很多延时语句,严重拖慢整个系统,怎么用中断的方式防...
    答:不一定要用中断,可以用一些扫描语句代替延时。比如用独立按键控制流水灯状态,流水灯的延时会影响按键扫描使得按键不是很灵敏,每次都要按好长时间才有反应,因为按键只有不断扫描才能实时接收外界脉冲信号。但如果用按键扫描代替延时就不一样了
  • 两个按键控制一个led灯c51程序
    答:void main (void){ while (1){ if(key1 == 0)/*按键1按下*/ { led = 0; /*灯亮*/ delay(1000);while(!key1); /*消抖*/ } else if(key2 == 0) /*按键2按下*/ { led = 1; /*灯灭*/ delay(1000);while(!key2);} } } ...
  • 51单片机 c语言 如何用4个按键控制4个流水灯
    答:void light_water(){ num=1;for(a=0;a<8;a++){ P1.1=num<<1;delay(1000); //延时;keyboard();//执行时又不停扫描键盘函数;} } 这样就会有一个LED从右往左移动8次;那么当第一次流水未完时,又调用第二个流水函数light_water1就能中断当前执行的流水函数又去执行第二个流水灯函数了...
  • 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 ZIN...
  • c51单片机 2*2矩阵按键控制四个灯,按1键亮一个灯,按2键亮两个灯...
    答:sbit hang1=P1.0;//行线作为输出 sbit hang2=P1.1;sbit lie1=P1.2;//列线作为输入 sbit lie2=P1.3;sbit led1=P1.4;//定义LED管脚 sbit led2=P1.5;sbit led3=P1.6;sbit led4=P1.7;void main(void){ lie1=1;lie2=1;led1=0;led2=0;led3=0;led4=0;//全部不亮 w...