打印

能帮忙编个程序吗?如下图能使开关按5下灯泡亮一下,开关再按5下,灯泡灭一下

[复制链接]
楼主: wuyua
手机看帖
扫描二维码
随时随地手机跟帖
21
wuyua|  楼主 | 2015-5-29 09:47 | 只看该作者 回帖奖励 |倒序浏览
xiaocui0475 发表于 2015-5-29 09:09
哎,闲来没事, 我帮你编吧, 看见可以联系我,只限今天哦~~

好开心呀,可是怎么联系你呢?站内发消息我发不了,级别太低了,有没有其他联系方式呢?

使用特权

评论回复
22
han0097| | 2015-5-29 09:52 | 只看该作者
gx_huang 发表于 2015-5-29 09:44
说的也是,他这个MCU也不做其它事情。
我建议最简单的主程序判断按键和消抖,对LZ来说最合理。
初学MCU编 ...

好吧!你牛!

使用特权

评论回复
23
han0097| | 2015-5-29 09:52 | 只看该作者
gx_huang 发表于 2015-5-29 09:44
说的也是,他这个MCU也不做其它事情。
我建议最简单的主程序判断按键和消抖,对LZ来说最合理。
初学MCU编 ...

那你说说插入拔出的物理过程,和中断和Debounce的原理以及缺点。

使用特权

评论回复
24
wuyua|  楼主 | 2015-5-29 09:56 | 只看该作者
yuandf 发表于 2015-5-29 09:43
uint8 dbCnt=0;//消抖计数器
sbit keyValue=P3^2;// 读取键值,(51没用过,应该是这么写的)
if(dbCnt)

这种我可能还没学过。。。
老师说用计数器,然后中断方式2的
TMOD=0x10;
TH0=0xfb;
TL0=0xfb;
EA=1;
ET0=1;
TR0=1;
现在才学中断系统的

使用特权

评论回复
25
yuandf| | 2015-5-29 10:02 | 只看该作者
我以为你在做产品呢?老师布置的任务,我就无能为力了,好好看看书吧!可以忽悠老板,但要对自己负责,加油!!:lol

使用特权

评论回复
26
gx_huang| | 2015-5-29 10:30 | 只看该作者
han0097 发表于 2015-5-29 09:52
那你说说插入拔出的物理过程,和中断和Debounce的原理以及缺点。

它的输入口,内部有边沿检测加滤波延时,比如你设定50毫秒,如果有低电平,50毫秒后还是低电平,就产生一个中断。问题是,当中断产生,还没有退出中断,在这个处理时间内,已经拔出去了,这个拔出去的中断会丢失的。他们采取很笨的办法,先调整Debouce时间,觉得不够,在中断里再加一个延时判断,总之,故障概率一直在的。只要我知道他怎么编程的,我就可以怎么更快速的重现故障。其实,拔出和插入中断,只是让软件更快的反应这个变化,让用户觉得这个手机速度快,灵敏。至于拔出或者插入后,应该开一个定时器,定期检查电平状态,万一有硬件误判误中断,一段时间后可以改正状态。比如,插入充电器,马上显示充电状态,如果拔出,马上处理,用户觉得很快,偶尔中断状态丢失,定时器判断,小概率的情况下,延时个1S、2S后改正状态,用户可以接受的,也很难发现的。但是如果快速插入拔出充电器,手机一直显示在充电,用户肯定会发现的。

使用特权

评论回复
27
wang168506| | 2015-5-29 11:16 | 只看该作者
han0097 发表于 2015-5-29 09:31
消抖5ms就可以了,再说,他拿这个MCU也不做别的事!

大脸猫

使用特权

评论回复
28
jiangxingyuan| | 2015-5-29 11:41 | 只看该作者
yuandf 发表于 2015-5-29 09:15
if( ! ((++keyCount)%5)     )
{
      led=!led;

++keycount越界后将会出问题的。做完一次后不清零,到时死了都不知道什么回事。

使用特权

评论回复
29
gx_huang| | 2015-5-29 11:48 | 只看该作者
jiangxingyuan 发表于 2015-5-29 11:41
++keycount越界后将会出问题的。做完一次后不清零,到时死了都不知道什么回事。 ...

我知道,不会有大问题,不会死的,只是越界的时候,不是5次,可能一次按键LED就动作了。

使用特权

评论回复
30
gx_huang| | 2015-5-29 11:50 | 只看该作者
@ccmc 我是50步,你是250步吗?

使用特权

评论回复
31
NE5532| | 2015-5-29 12:01 | 只看该作者
Q1的极性都用反了。

使用特权

评论回复
32
gx_huang| | 2015-5-29 12:29 | 只看该作者
NE5532 发表于 2015-5-29 12:01
Q1的极性都用反了。

Q1极性用反,大家都懒得去指出了,也许人家就是NPN/PNP不分的,焊接的时候再挑一个可以用的。

使用特权

评论回复
33
21CHdwLHR| | 2015-5-29 13:17 | 只看该作者

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned  int
sbit key1=P3^2;/*定义端口,根据自己单片上按键端口定义*/
sbit led=P2^1;
uint i,j=0;
delay(uchar x);
/*主程序*/
void main()
{
        while(1)
{
                if(key1==0)
        {
       
        delay(50);
        while(!key1);
        delay(50);
        j++;
       
if(j==5)
led=0;
if(j==10)
led=1;
               

}

}

}
/*延时程序*/
delay(uchar x)
{
        uchar a,b;
        for(a=x;a>0;a--)
         for(b=200;b>0;b--);
}

使用特权

评论回复
34
han0097| | 2015-5-29 13:43 | 只看该作者

小虎子!

使用特权

评论回复
35
wuyua|  楼主 | 2015-5-29 14:13 | 只看该作者
21CHdwLHR 发表于 2015-5-29 13:17
#include
#define uchar unsigned char
#define uint unsigned  int

谢谢,不过要求用的是计数器,中断方式2的
你这个用的是延时函数吧
能否用工作方式2写下?

使用特权

评论回复
36
nienianhong| | 2015-5-29 16:34 | 只看该作者

使用特权

评论回复
37
wang168506| | 2015-5-29 17:15 | 只看该作者

使用特权

评论回复
38
han0097| | 2015-5-29 17:39 | 只看该作者

使用特权

评论回复
39
hgjinwei| | 2015-5-29 18:24 | 只看该作者
看来大家都很闲啊

使用特权

评论回复
40
justcxj| | 2015-5-29 21:42 | 只看该作者
天天向上

使用特权

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

本版积分规则