论坛风格切换切换到宽版
  • 2623阅读
  • 17回复

想用51单片机做个Countdown Timer 计时器 哪有现成的? [复制链接]

上一主题 下一主题
离线szcharle
 
发帖
13335
只看楼主 倒序阅读 0楼 发表于: 2007-12-27
就是类似定时炸弹的东西(我也不知道该叫什么 计时器 倒数器? 反正我这么说您一定明白了 呵呵)
时间上能实现6小时就可以了 不用太精确的 准备给电动自行车充电结束后自动断电的(那玩意本身是有个电压还是电流的检测的 但是多一层更保险!)
充电一般4个小时就结束了 所以6小时足够了
能显示分钟小时 不用显示秒 当然最好有个二极管闪闪也不错

这样的东西有没有现成的 照样做一个就好了 自己编 头大啊!
离线小比尔/5
发帖
2582
只看该作者 1楼 发表于: 2007-12-27
用定时器
自己写不难的啊
设定时间隔为50ms,每20次减一次数值
然后让主程序去刷显示就是了
离线bh7ni
发帖
2743
只看该作者 2楼 发表于: 2007-12-27
这样的源程序在网上应该能搜到
离线BG4UVR
发帖
11292
只看该作者 3楼 发表于: 2007-12-27
如果做着感觉麻烦,去正泰买个 时间继电器 也行
离线bd7rf
发帖
10148
只看该作者 4楼 发表于: 2007-12-27
自己编一个吧,60小时都没问题。
离线szcharle
发帖
13335
只看该作者 5楼 发表于: 2007-12-27
谢谢各位老大的热心! 网上找到了一个 正在看 做完了来汇报结果 呵呵
离线BG4XCR
发帖
33381
只看该作者 6楼 发表于: 2007-12-27
LZ要是做定时炸弹的话给你几点建议:
A,不要用不同颜色的电线.而是用同样颜色的,比如全是红色,绿色的.让拆弹专家晕倒.
B,定时数码显示不要到00:00才爆炸,而是到00:59就炸掉.也就是提前炸.提前量自己知道就行
其它请大家补充..
离线BG4UVR
发帖
11292
只看该作者 7楼 发表于: 2007-12-27
'
LZ要是做定时炸弹的话给你几点建议:
A,不要用不同颜色的电线.而是用同样颜色的,比如全是红色,绿色的.让拆弹专家晕倒.
B,定时数码显示不要到00:00才爆炸,而是到00:59就炸掉.也就是提前炸.提前量自己知道就行
其它请大家补充..
'

还有不要每跳1秒就“嘟”的响一下 :d
离线刺猬
发帖
1658
只看该作者 8楼 发表于: 2007-12-27
'
LZ要是做定时炸弹的话给你几点建议:
A,不要用不同颜色的电线.而是用同样颜色的,比如全是红色,绿色的.让拆弹专家晕倒.
B,定时数码显示不要到00:00才爆炸,而是到00:59就炸掉.也就是提前炸.提前量自己知道就行
其它请大家补充..
'
做好后整体用不透明的树脂灌封。
离线wapman
发帖
546
只看该作者 9楼 发表于: 2007-12-27
专家最怕的是bp机控制的蛋蛋
离线szcharle
发帖
13335
只看该作者 10楼 发表于: 2007-12-28
晕啊 我居然成了恐怖分子了
离线刘新阳
发帖
327
只看该作者 11楼 发表于: 2007-12-28
高,实在是高!呵呵
'
LZ要是做定时炸弹的话给你几点建议:
B,定时数码显示不要到00:00才爆炸,而是到00:59就炸掉.也就是提前炸.提前量自己知道就行
其它请大家补充..
'

================================================

这个程序不难,最基本的定时/计数器的应用,随便找个教程看看就行
设置定时器t0或t1实现一个基本定时单位如20ms,写个1s的子程序,即调用基本定时50次,有了一秒,随你定时多长都很方便了。
我家的鱼缸每天定时开灯、关灯、间歇充氧就是自己做的,一片51可以控制好多路开关,很方便。
离线bg8ht
发帖
3394
只看该作者 12楼 发表于: 2007-12-28
'
LZ要是做定时炸弹的话给你几点建议:
A,不要用不同颜色的电线.而是用同样颜色的,比如全是红色,绿色的.让拆弹专家晕倒.
B,定时数码显示不要到00:00才爆炸,而是到00:59就炸掉.也就是提前炸.提前量自己知道就行
其它请大家补充..
'

我还以为只有我才有这种想法呢,嘿嘿
离线小比尔/5
发帖
2582
只看该作者 13楼 发表于: 2007-12-28
刚好今天做实验做到,就传上来吧。
是个顺时钟,不过大概的架构就是这样。

/* completed by keil uvision3 for linux */
/* crystal frequency: 6.000 mhz */

#include<reg52.h>
#include<absacc.h>
#include<intrins.h>

#define hour dbyte[0x42]     //42h
#define min dbyte[0x41]     //41h
#define sec dbyte[0x40]     //40h

#define porta xbyte[0xff21]     //8155 port a, send out display mask
#define portb xbyte[0xff22]     //8155 port b, send out 7-seg code

unsigned char timer_count=10;

void showtime();
void delay();

void timer0(void) interrupt 1
{
    th0=0x3c;tl0=0xbf;

    timer_count--;
    if(timer_count==0)
    {
          timer_count=10;
          sec++;
          if(sec==60){sec=0;min++;}
          if(min==60){min=0;hour++;}
          if(hour==24) hour=0;
          _nop_();     // eat up one clk remained
    }
}

void main()
{
    sec=0;min=0;hour=0;     //init time values

    tmod=0x01;
    th0=0x3c;tl0=0xbf;
    et0=1;tr0=1;
    ea=1;

    while(1)
    {
          showtime();
    }
}

void showtime()
{
    unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
    unsigned char p=0x42;

    porta=0x20;

    for(p=0x42;p>=0x40;p--)
    {
          portb=seg[dbyte[p]/10];
          delay();
          portb=0xff;
          porta>>=1;
          portb=seg[dbyte[p]%10];
          delay();
          portb=0xff;
          porta>>=1;
    }
}

void delay()
{
    unsigned char i;
    for(i=50;i>0;i--);
}
离线BG4XOV
发帖
492
只看该作者 14楼 发表于: 2007-12-28
记得以前有个冰箱控制插座.可以设置通电多少时间 断电多少时间.......
离线szcharle
发帖
13335
只看该作者 15楼 发表于: 2007-12-28
谢谢 研究研究! keil for linux? 没用过linux下的 呵呵

[quote=小比尔/5]刚好今天做实验做到,就传上来吧。
是个顺时钟,不过大概的架构就是这样。

/* completed by keil uvision3 for linux */
/* crystal frequency: 6.000 mhz */

#include<reg52.h>
#include<absacc.h>
#include<intrins.h>

[/quote]
离线小比尔/5
发帖
2582
只看该作者 16楼 发表于: 2007-12-28
没什么,虚荣一下。用windows仿真器在linux下跑的keil。
离线小比尔/5
发帖
2582
只看该作者 17楼 发表于: 2007-12-28
用汇编改了一下,没有调试过,不保证正确。

org 0000h
           jmp start

org 000bh
           jmp timer0

org 0030h
timer0:      mov th0,#3ch
           mov tl0,#0bfh
           djnz r0,hour2
           mov r0,#10
second:      inc r7
           cjne r7,#60h,minute
           mov r7,#00h
           inc r6
minute:      cjne r6,#60h,hour
           mov r6,#00h
           inc r5
hour:      cjne r5,#24h,hour2
           mov r5,#00h
hour2:      reti

           org 0100h
start:      mov r5,#00h ;hour
           mov r6,#00h ;minute
           mov r7,#00h ;second

           mov tmod,#01h
           mov th0,#3ch
           mov tl0,#0bfh
           setb et0
           setb tr0
           setb ea
loop:      call show
           jmp loop

show:      clr c
           mov p2,#20h
           mov a,r5
           mov b,#10
           div ab      
           mov dptr,#seg
           movc a,@a+dptr
           mov p1,a
           call delay
           mov a,p2
           rrc a
           mov p2,a
           mov a,b
           movc a,@a+dptr
           mov p1,a
           call delay
           mov a,p2
           rrc a
           mov p2,a
           mov a,r6
           mov b,#10
           div ab      
           mov dptr,#seg
           movc a,@a+dptr
           mov p1,a
           call delay
           mov a,p2
           rrc a
           mov p2,a
           mov a,b
           movc a,@a+dptr
           mov p1,a
           call delay
           mov a,p2
           rrc a
           mov p2,a
           mov a,r7
           mov b,#10
           div ab      
           mov dptr,#seg
           movc a,@a+dptr
           mov p1,a
           call delay
           mov a,p2
           rrc a
           mov p2,a
           mov a,b
           movc a,@a+dptr
           mov p1,a
           call delay
           mov p2,#00h
           ret
delay:      mov r4,#50
dl0:      djnz r4,dl0
           ret

seg: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
end