怎样用51单片机设计三个按键控制一个灯的程序,C程序

怎样用51单片机设计三个按键控制一个灯的程序,C程序,第1张

程序如下

#include<reg51h>

sbit led1=P10;

sbit key=P11;

sbit key1=P12;

sbit key2=P13;

void main()

{

while(1)

{

if((key|key1|key2)==0)

{led1=~led1;while((key|key1|key2)==0);

}

}

没试过 可能有些地方不对 你自己改改 反正思路就这样了

确实是初学呀,P0,P1,P2都有8个IO口,所以暂且给你都安排在第一个口吧。

#include<reg51h>

#define uchar unsigned char

sbit key=P0^0;

sbit pluse1=P1^0;

sbit pluse2=P2^0;

void delay(int ms)

{

uchar i ;

while(ms--)for(i=0;i<120;i++);

}

main()

{

uchar num;

while(1)

{

if(key==0)

{

delay(10);

if(key==0)

{

while(key==0);

num++;

num%=2;

if(num==1)

{

pluse1=0;

delay(500);

pluse1=1;

}

else

{

pluse2=0;

delay(500);

pluse2=1;

}

}

}

}

}

简单编了一下程序,,,

#include<reg52h>

sbit led1=P1^1; //led灯,按实际再改

sbit led2=P1^2; //led灯,按实际再改

sbit led3=P1^3; //led灯,按实际再改

sbit led4=P1^4; //led灯,按实际再改

sbit key1=P2^1; //按键,按实际再改

sbit key2=P2^2; //按键,按实际再改

sbit key3=P2^3; //按键,按实际再改

sbit key4=P2^4; //按键,按实际再改

void delay(unsigned int t) //延时函数

{

while(--t);

}

void main()

{

while(1)

{

if(key1 == 0) //如果高电平按下按键就==1

{

delay(200); //按键防抖

if(key1 == 0)

{

led1=1; //如果低电平亮就=0

led2=0;

led3=0;

led4=0;

}

}

if(key2 == 0)

{

delay(200); //按键防抖

if(key2 == 0)

{

led1=0; //如果低电平亮就=0

led2=1;

led3=0;

led4=0;

}

}

if(key3 == 0)

{

delay(200); //按键防抖

if(key3 == 0)

{

led1=0; //如果低电平亮就=0

led2=0;

led3=1;

led4=0;

}

}

if(key4 == 0)

{

delay(200); //按键防抖

if(key4 == 0)

{

led1=0; //如果低电平亮就=0

led2=0;

led3=0;

led4=1;

}

}

}

}

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

主程序大致是这样的

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语句退出当前循环

低电平点亮

START:MOV R0,#8

MOV R1,#8

SETB C

MOV A,#0FEH

MOV P1,A

S1:RLC A

CALL DELAY

MOV P1,A

DJNZ R0,S1

SETB C

MOV A,#0FEH

MOV P2,A

S2:RLC A

CALL DELAY

MOV P2,A

DJNZ R1,S2

AJMP START

DELAY:MOV R5,#0FFH //改变值变延时时间

LOOP2: MOV R4,#0FFH//改变值变延时时间

LOOP1:DJNZ R4,LOOP1

DJNZ R5,LOOP2

RET

END

以上就是关于怎样用51单片机设计三个按键控制一个灯的程序,C程序全部的内容,包括:怎样用51单片机设计三个按键控制一个灯的程序,C程序、求一个简单的51单片机程序 (一个按键控制两个口输出)、51单片机用4个按钮分别控制四个LED的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9298907.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存