找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2736|回复: 4
打印 上一主题 下一主题
收起左侧

求解如何使用单片机制作控制灯亮灭

[复制链接]
跳转到指定楼层
楼主
ID:279719 发表于 2018-1-25 17:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开关按第一次 灯1亮,按等二次灯1关灯2亮,按第三次灯1和2同时亮,再按一次关闭
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:273292 发表于 2018-1-25 21:04 | 只看该作者
加我QQ,可以给你写一个
回复

使用道具 举报

板凳
ID:46220 发表于 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;       
                }
        }
}
回复

使用道具 举报

地板
ID:46220 发表于 2018-1-26 11:25 | 只看该作者
刚才又在实验板上试了下,把两个按键消抖后的延时增加到10后更稳定,改成 delayms(10);        //稍作延时
1会延时不够,偶尔会乱跳,我也在学习中,让大神们见笑了
回复

使用道具 举报

5#
ID:46220 发表于 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;       
                }
        }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表