找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 24135|回复: 44
收起左侧

自制单片机倒计时定时器

  [复制链接]
ID:95809 发表于 2016-1-6 19:06 | 显示全部楼层 |阅读模式
IMG_20160106_184748.gif

设计的PCB

设计的PCB

设计的PCB

设计的PCB

由于经常用感光法做电路板,对曝光时间的控制非常重要,总是看表计时感到非常麻烦。于是用单片机做了个定时器,采用了6位数码管显示,前3位显示分钟,后2位显示秒钟,并已倒计时的方式显示剩余时间,(灵感来自微波炉。)时间到蜂鸣器响,同时继电器吸合,切断曝光灯的电源。
源码如下:

#include<reg51.h>
#define KeyPort P1
sbit Key_UP=P1^4;
sbit Key_DOWN=P1^5;
unsigned char KeyV,TempKeyV,num;                                                            
sbit P25=P2^5;//数码管第1位
sbit P26=P2^4;//数码管第2位
sbit P29=P2^3; //数码管第3位
sbit gang=P2^0;          ///分隔符
sbit P27=P2^1;//数码管第3位
sbit P28=P2^2;// 数码管第4位
sbit P12=P1^6;//时间加
sbit P13=P1^7; //时间减

sbit JDQ=P3^4;//继电器

unsigned int js;
unsigned int ds=1000,x,y;//倒计时初始时间,加时,减时  30分钟
unsigned char jsflag;
static unsigned int i;
unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};
  unsigned char KeyScan(void);//键盘扫描
  void tiaojie(void);
void Delay(unsigned int ii)        //1MS
{
unsigned int jj;
for(;ii>0;ii--)
for(jj=0;jj<125;jj++);
}
void main()
{
           EA = 1;                                        //允许CPU中断
        ET0 = 1;                                 //定时器0中断打开
        ET1=1;                                        //定时器1中断打开
        TMOD = 0x11;                        //设定时器0 1为模式1,16位模式
        TH0=0xB8;
        TL0=0x00;                                //设定时值为(20ms)
        TH1=0xdc;                                        //设定时值为(10ms)
        TL1=0x00;
        TR0 = 1;
        TR1=1;

        KeyV = 0;
        TempKeyV = 0;
        jsflag=0;
while(1);
}

//定时器0中断外理中键扫描和显示
void Key_Time0(void) interrupt 1 using 2
{
  TH0=0xB8;
        TL0=0x00;                                //设定时值为20000us(20ms)
  if (!Key_UP)
    KeyV = 1;
  if (!Key_DOWN)
    KeyV = 2;
        
          if(P12==0)
          {
           Delay(20);
           if(P12==0)
            ds=ds+100;//定时加1分钟         (调节精度)
                while(!P12);
          }
          if(P13==0)
          {
           Delay(20);
           if(P13==0)
           ds=ds-100; //定时减1分钟
           while(!P13);
          }
   if (KeyV!= 0)      //有键按下
    {
      Delay(10);   //延时防抖  按下10ms再测
      if (!Key_UP)
        TempKeyV = 1;
      if (!Key_DOWN)
        TempKeyV = 2;
                 if (KeyV == TempKeyV)   //两次值相等为确定接下了键
           {
                      if (KeyV == 1)
                   {
                                   jsflag=0;
                                                      if(ds==0)
                                                   {
                                                   ds=100;
                                                   }
                                                         js=js+1;
                                                        JDQ=1;   //继电器吸合
                                                
                               if(js==50)
                                   {
                                 js=0;
                                 ds=ds-1;
         
                             }
           }
if(KeyV==2)
{
          jsflag=1;
        }
}
}
   if(jsflag==1)
   {
   JDQ=0;
   }
   if(ds==0)
   {
   JDQ=0;
   jsflag=1;
   KeyV=0;
   }

}

void disp_Time1(void) interrupt 3 using 3
{
        TH1=0xdc;
        TL1=0x00;
        x=ds/10000;

           P0=LEDDis[x]; //分钟百位
     P25=0;
     Delay(2);
         P25=1;

          y=(ds%10000)/1000;//分钟十位
      P0=LEDDis[y];
      P26=0;
      Delay(2);
      P26=1;

     P0=LEDDis[((ds%10000)%1000)/100];//分钟各位
     P29=0;
     Delay(2);
     P29=1;                                

P0=0xbf; //分钟与秒的间隔符
gang=0;
Delay(2);
gang=1;

  P0=LEDDis[(((ds%10000)%1000)%100)/10]; //秒十位
  if(((ds%1000)%100)/10>=6)          //满60,百位减一
  {
  ds=ds-10;
  P0=LEDDis[6];
  }
  P27=0;
  Delay(2);
  P27=1;

  P0=LEDDis[(((ds%10000)%1000)%100)%10]; //秒个位
  P28=0;
  Delay(2);
  P28=1;
}



绿色的为秒显示,红色的为分显示,也可以随自己喜欢重新定义,改一下I/O口就行了。


调试.rar

18.76 KB, 下载次数: 258, 下载积分: 黑币 -5

倒计时.rar

43.38 KB, 下载次数: 291, 下载积分: 黑币 -5

评分

参与人数 2黑币 +61 收起 理由
zqy181818 + 11 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:60515 发表于 2016-1-6 19:20 来自手机 | 显示全部楼层
正需要。如果要像微波炉,按开始一下是加30秒,再按一下是60秒,应该怎么改??
回复

使用道具 举报

ID:95809 发表于 2016-1-6 19:52 | 显示全部楼层
GUOPK 发表于 2016-1-6 19:20
正需要。如果要像微波炉,按开始一下是加30秒,再按一下是60秒,应该怎么改??

    ds=ds+100;//定时加1分钟         (调节精度)改这里。    100=1分钟,500=5分钟,以此类推。       (调节精度)
回复

使用道具 举报

ID:60515 发表于 2016-1-20 20:09 来自手机 | 显示全部楼层
bxyyhan 发表于 2016-1-6 19:52
ds=ds+100;//定时加1分钟         (调节精度)改这里。    100=1分钟,500=5分钟,以此类推。       ...

我照你的程序,在仿真软件就显示5个8。按键按下没变化。几个按键都怎么使用??
回复

使用道具 举报

ID:95809 发表于 2016-1-21 08:43 | 显示全部楼层
GUOPK 发表于 2016-1-20 20:09
我照你的程序,在仿真软件就显示5个8。按键按下没变化。几个按键都怎么使用??

程序里写的很明白,4个键分别是开始/暂停;复位,加;减。你可以自己重定义I/O。
回复

使用道具 举报

ID:60515 发表于 2016-1-21 09:04 | 显示全部楼层
也不知哪错了,仿真就是没反应。
回复

使用道具 举报

ID:123604 发表于 2016-11-11 18:22 | 显示全部楼层
正需要,过来学习,多谢分享
回复

使用道具 举报

ID:89286 发表于 2017-1-13 22:59 | 显示全部楼层
thanks
回复

使用道具 举报

ID:104838 发表于 2017-1-14 03:25 | 显示全部楼层
来个原理图吧,
回复

使用道具 举报

ID:137767 发表于 2017-1-14 11:34 | 显示全部楼层
带程序分享。收藏了。
回复

使用道具 举报

ID:166394 发表于 2017-2-24 15:55 | 显示全部楼层
非常感谢分享,拿来学习一下。
回复

使用道具 举报

ID:24379 发表于 2017-4-11 23:09 | 显示全部楼层
非常感谢分享,正需要呢?请问楼主一般曝光多少秒。
回复

使用道具 举报

ID:51306 发表于 2017-7-12 14:19 | 显示全部楼层
感谢分享 ! 已经完美复制
回复

使用道具 举报

ID:231305 发表于 2017-9-8 10:04 | 显示全部楼层
师父,那个JP01是什么电子元器件,我在proteus中找不到,在线等,我研究了几天都没搞明白
回复

使用道具 举报

ID:95809 发表于 2017-10-10 17:13 来自手机 | 显示全部楼层
黄昏下的黎明 发表于 2017-9-8 10:04
师父,那个JP01是什么电子元器件,我在proteus中找不到,在线等,我研究了几天都没搞明白

跳线,一根铁丝即可。
回复

使用道具 举报

ID:140489 发表于 2017-10-11 10:01 | 显示全部楼层
倒计时是什么文件,下载下来没有C文件,浪费我5黑币
回复

使用道具 举报

ID:140489 发表于 2017-10-11 11:14 | 显示全部楼层
仿真了一下,可以的
QQ截图20171011111119.jpg

倒计时仿真.rar

76.78 KB, 下载次数: 96, 下载积分: 黑币 -5

评分

参与人数 1黑币 +30 收起 理由
51hei跑堂 + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:95809 发表于 2017-10-11 21:10 | 显示全部楼层
lids 发表于 2017-10-11 10:01
倒计时是什么文件,下载下来没有C文件,浪费我5黑币

源程序都贴出来了,自己用复制编译一下就行,难道还让我亲自给你老人家的单片机里把程序烧好?
回复

使用道具 举报

ID:234917 发表于 2017-10-13 13:37 | 显示全部楼层
楼主一直在啊,我是初学的,今天刚下载完,请问下载的资料都包含什么呀?我只发现了个一个c源程序,还有一个是Sprint-Layout 6.0可以打开的pcb图纸,还有其他的吗?我主要想仿真,资料里面有没有仿真原理图呀?
回复

使用道具 举报

ID:257970 发表于 2017-12-12 11:11 来自手机 | 显示全部楼层
请问楼主这个有报警功能吗
回复

使用道具 举报

ID:258743 发表于 2018-1-8 11:23 | 显示全部楼层
感谢分享 !
回复

使用道具 举报

ID:254251 发表于 2018-1-8 18:27 | 显示全部楼层
非常好,感谢分享
回复

使用道具 举报

ID:242300 发表于 2018-2-17 17:30 | 显示全部楼层
这个精确吗
回复

使用道具 举报

ID:242300 发表于 2018-2-17 18:23 | 显示全部楼层
还能在精确一点吗
回复

使用道具 举报

ID:18822 发表于 2018-8-24 22:45 | 显示全部楼层

这个精确吗
回复

使用道具 举报

ID:95809 发表于 2018-9-4 14:30 来自手机 | 显示全部楼层
daifhfh 发表于 2018-8-24 22:45
这个精确吗

精度一般,现在我用15单片机做的,直驱数码管,
回复

使用道具 举报

ID:452133 发表于 2018-12-24 13:38 | 显示全部楼层
这个不错 正好需要的,谢谢分享
回复

使用道具 举报

ID:398425 发表于 2019-3-13 22:05 来自手机 | 显示全部楼层
很好,
回复

使用道具 举报

ID:477512 发表于 2019-3-24 12:53 | 显示全部楼层
这个仿真电路很奇怪,数码管位需接排阻,而排阻另一端却不接,才能仿真实验,不知道是何原因?
回复

使用道具 举报

ID:419910 发表于 2019-6-11 00:17 来自手机 | 显示全部楼层
楼主的pcb正常么?数码管都用了哪些?仿制数码管不亮
回复

使用道具 举报

ID:248223 发表于 2020-3-1 16:19 | 显示全部楼层
原理图怎么没有
回复

使用道具 举报

ID:309527 发表于 2020-6-23 00:28 | 显示全部楼层
楼主这个只用两位数码管显示分钟行吗?
回复

使用道具 举报

ID:309527 发表于 2020-12-23 02:02 | 显示全部楼层
请教一下大师STC15W408做倒计时脱机定时器后不稳定了死机了一般是什么问题
过零信号正常  输出控制可控硅的
回复

使用道具 举报

ID:848824 发表于 2020-12-23 13:37 | 显示全部楼层
厉害,高手电路板怎么做的漂亮
回复

使用道具 举报

ID:848824 发表于 2020-12-23 14:48 | 显示全部楼层
我手里只有四位数码管也可以,很好找了好多只有你这个成功了。非常感谢
回复

使用道具 举报

ID:857362 发表于 2020-12-24 09:32 | 显示全部楼层
多谢分享,程序注释很清晰
回复

使用道具 举报

ID:848824 发表于 2020-12-25 10:55 | 显示全部楼层
多谢分享,程序注释很清晰。很好用
回复

使用道具 举报

ID:867862 发表于 2020-12-25 16:35 | 显示全部楼层
感谢 ,注释很详细
回复

使用道具 举报

ID:197229 发表于 2021-3-29 01:33 | 显示全部楼层
谢谢楼主,看着程序和PCB也能蒙出电路了,估计可以,程序的注释可贵,因为俺是小白,再加上17楼朋友的仿真图更完美啦。好!
回复

使用道具 举报

ID:197229 发表于 2021-3-29 01:34 | 显示全部楼层
lids 发表于 2017-10-11 11:14
仿真了一下,可以的

谢谢朋友的仿真图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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