标题: 求解如何使用单片机制作控制灯亮灭 [打印本页]

作者: 971616539    时间: 2018-1-25 17:50
标题: 求解如何使用单片机制作控制灯亮灭
开关按第一次 灯1亮,按等二次灯1关灯2亮,按第三次灯1和2同时亮,再按一次关闭

作者: xdl932365660    时间: 2018-1-25 21:04
加我QQ,可以给你写一个
作者: niehaitao    时间: 2018-1-25 22:58
你试试这个
#include<reg52.h>
sbit led1=P0^0;
sbit led2=P0^1;
sbit K1=P3^2;

sbit SJ=P1^4;       //LED发光管的使能端

void delayms(unsigned int xms)        //延时子程序
{
        unsigned int i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);                //i=xms即延时约xms毫秒
}

void main()                //主函数
{
        unsigned char a=0;
        SJ=0;         //开LED总使能
        while(1)                //大循环
        {
                if(K1==0)        //检测按键是否按下
                {
                        delayms(1);        //稍作延时
                        if(K1==0)        //再次检测按键是否按下即消除按键抖动
                        {
                                a++;
                                if(a==4)
                                a=0;
                        }
                        while(!K1);        //松手检测
                        delayms(1);
                        while(!K1);
                }
                switch(a)
                {
                        case 1:
                                led1=0,led2=1;
                                break;
                        case 2:
                                led1=1,led2=0;
                                break;
                        case 3:
                                led1=0,led2=0;
                                break;
                        case 4:
                                led1=1,led2=1;
                                break;
                        default:
                                led1=1,led2=1,a=0;
                                break;       
                }
        }
}
作者: niehaitao    时间: 2018-1-26 11:25
刚才又在实验板上试了下,把两个按键消抖后的延时增加到10后更稳定,改成 delayms(10);        //稍作延时
1会延时不够,偶尔会乱跳,我也在学习中,让大神们见笑了
作者: niehaitao    时间: 2018-1-26 11:26
//开关按第一次 灯1亮,按等二次灯1关灯2亮,按第三次灯1和2同时亮,再按一次关闭
#include<reg52.h>
sbit led1=P0^0;
sbit led2=P0^1;
sbit K1=P3^2;

sbit SJ=P1^4;       //LED发光管的使能端

void delayms(unsigned int xms)        //延时子程序
{
        unsigned int i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);                //i=xms即延时约xms毫秒
}

void main()                //主函数
{
        unsigned char a=0;
        SJ=0;         //开LED总使能
        while(1)                //大循环
        {
                if(K1==0)        //检测按键是否按下
                {
                        delayms(10);        //稍作延时
                        if(K1==0)        //再次检测按键是否按下即消除按键抖动
                        {
                                a++;
                                if(a>=4)
                                a=0;
                        }
                        while(!K1);        //松手检测
                        delayms(10);
                        while(!K1);
                }
                switch(a)
                {
                        case 1:
                                led1=0,led2=1;
                                break;
                        case 2:
                                led1=1,led2=0;
                                break;
                        case 3:
                                led1=0,led2=0;
                                break;
                        case 4:
                                led1=1,led2=1;
                                break;
                        default:
                                led1=led2=1,a=0;
                                break;       
                }
        }
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1