打印
[51单片机]

帮忙改下程序 按下 K1第一次灯点亮,再次按下5次时灯熄灭

[复制链接]
2951|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
麦才洋|  楼主 | 2013-9-27 14:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在这个程序是按下 K1灯点亮,再次按下时灯熄灭
要求改成按下 K1第一次灯点亮,再次按下5次时灯熄灭

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P1^0;
sbit RELAY=P2^4;
//延时
void DelayMS(uint ms)
{
uchar t;
while(ms--)for(t=0;t<120;t++);
}
//主程序
void main()
{
P1=0xff;
RELAY=1;
while(1)
{
if(K1==0)
{
while(K1==0);
RELAY=~RELAY;
DelayMS(20);
}
}
}

相关帖子

沙发
xiaoyaoym| | 2013-9-27 14:20 | 只看该作者
你可以设置一个变量flag,在每一次按键后flag++,然后判断flag的值。当flag为1,2,3,4,5的时候灯亮,flag为6时灯灭并清零。循环即可

使用特权

评论回复
板凳
麦才洋|  楼主 | 2013-9-27 14:30 | 只看该作者
你好   可以按我的这个程序帮忙改下吗     我是新手不太懂   谢谢!!!

使用特权

评论回复
地板
弓长月月鸟| | 2013-9-27 15:01 | 只看该作者

使用特权

评论回复
5
ayb_ice| | 2013-9-27 15:05 | 只看该作者

#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int

sbit K1=P1^0;
sbit RELAY=P2^4;


//延时
void DelayMS(uint ms)
{
        uchar t;

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

                }
        }
}


uchar relay(void)
{
        static U8 c = 0;

        c++;
        switch(c){
        case 0:
                break;
        case 1:
                RELAY = 1;        // ON
                break;
        case 2:
                break;
        case 3:
                break;
        case 4:
                break;
        case 5:
                break;
        case 6:
                RELAY = 0;        // OFF
                c = 0;
                break;
        }
}

//主程序
void main()
{
        uchar k = 0;
        bit b = 0;

        P1=0xff;
        RELAY=1;

        while(1)
        {
                bit t;

                t = !K1
                if(t != b && t){
                        relay();
                }
                b = t;

                DelayMS(20);
        }
}

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
麦才洋 + 2 赞一个!
6
ayb_ice| | 2013-9-27 15:07 | 只看该作者
前面加一句
typedef unsigned char U8;

使用特权

评论回复
7
nefudongfang| | 2013-9-27 15:09 | 只看该作者
在你原来的程序基础上改,你好调试
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar KEY_count=0;
sbit K1=P1^0;
sbit RELAY=P2^4;
sbit LED_F=0;
//延时
void DelayMS(uint ms)
{
uchar t;
while(ms--)for(t=0;t<120;t++);
}
//主程序
void main()
{
P1=0xff;
  while(1)
  {
    if(K1==0)
    {  
       while(K1==0);
       if(++KEY_count>5)
       {
         KEY_count=0;
         LED_F=0;
       }
       else
       {
         LED_F=1;
       }
     }
  RELAY = LED_F;
  }
}
起始状态是LED灭(如果高电平是亮的话),当你按1次后变量,再按5次才会变灭,依次循环。这个程序有一个毛病就是没有做超时处理。也就是你必须在规定时间内按5次才执行灭的动作,如果超时,计数清0,等于白按,还的从新按5次。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
麦才洋 + 2 很给力!
8
lxp1413801| | 2013-9-27 15:24 | 只看该作者

使用特权

评论回复
9
麦才洋|  楼主 | 2013-9-27 16:40 | 只看该作者
nefudongfang    你好   我编译出来提示说这句错误能帮忙看下是什么问题吗?
                           uchar KEY_count=0;

使用特权

评论回复
10
老土2F| | 2013-9-27 20:11 | 只看该作者
麦才洋 发表于 2013-9-27 16:40
nefudongfang    你好   我编译出来提示说这句错误能帮忙看下是什么问题吗?
                           u ...

。这个是因为冒号不是英文的冒号吧,

使用特权

评论回复
11
林志财| | 2013-9-28 01:03 | 只看该作者
这个应该自己练手才行,有视频的话看看视频,然后买个开发板把上面的实验全部做了,

使用特权

评论回复
12
ergabd| | 2013-9-29 08:37 | 只看该作者
遇到问题可以在这上面来求助方法 有了思路自己动手写程序 然后慢慢调试 这样进步是很快的 直接复制代码什么时间才能提高呢

使用特权

评论回复
13
qiqiangguo| | 2013-10-13 01:18 | 只看该作者
    也是新手
    #include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit d1=P0^0;
sbit sw=P3^4;
void delay(uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void main()
{       
        uchar num;
        num=0;
        d1=1;
        while(1)
        {       
                if(sw==0)
                {
                        delay(5);
                        if(sw==0)
                        {
                                num++;
                                switch(num%6)
                                {
                                        case 0:d1=1; break;
                                        case 1:d1=0; break;
                                }
                        }
                        while(!sw);
                        delay(5);
                        while(!sw);
                }
               
        }
       
}

    试了一下,可以实现功能
   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

25

帖子

0

粉丝