找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 27641|回復(fù): 44
打印 上一主題 下一主題
收起左側(cè)

自制單片機(jī)倒計(jì)時(shí)定時(shí)器

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

由于經(jīng)常用感光法做電路板,對(duì)曝光時(shí)間的控制非常重要,總是看表計(jì)時(shí)感到非常麻煩。于是用單片機(jī)做了個(gè)定時(shí)器,采用了6位數(shù)碼管顯示,前3位顯示分鐘,后2位顯示秒鐘,并已倒計(jì)時(shí)的方式顯示剩余時(shí)間,(靈感來(lái)自微波爐。)時(shí)間到蜂鳴器響,同時(shí)繼電器吸合,切斷曝光燈的電源。
源碼如下:

#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;//數(shù)碼管第1位
sbit P26=P2^4;//數(shù)碼管第2位
sbit P29=P2^3; //數(shù)碼管第3位
sbit gang=P2^0;          ///分隔符
sbit P27=P2^1;//數(shù)碼管第3位
sbit P28=P2^2;// 數(shù)碼管第4位
sbit P12=P1^6;//時(shí)間加
sbit P13=P1^7; //時(shí)間減

sbit JDQ=P3^4;//繼電器

unsigned int js;
unsigned int ds=1000,x,y;//倒計(jì)時(shí)初始時(shí)間,加時(shí),減時(shí)  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);//鍵盤(pán)掃描
  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;                                 //定時(shí)器0中斷打開(kāi)
        ET1=1;                                        //定時(shí)器1中斷打開(kāi)
        TMOD = 0x11;                        //設(shè)定時(shí)器0 1為模式1,16位模式
        TH0=0xB8;
        TL0=0x00;                                //設(shè)定時(shí)值為(20ms)
        TH1=0xdc;                                        //設(shè)定時(shí)值為(10ms)
        TL1=0x00;
        TR0 = 1;
        TR1=1;

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

//定時(shí)器0中斷外理中鍵掃描和顯示
void Key_Time0(void) interrupt 1 using 2
{
  TH0=0xB8;
        TL0=0x00;                                //設(shè)定時(shí)值為20000us(20ms)
  if (!Key_UP)
    KeyV = 1;
  if (!Key_DOWN)
    KeyV = 2;
        
          if(P12==0)
          {
           Delay(20);
           if(P12==0)
            ds=ds+100;//定時(shí)加1分鐘         (調(diào)節(jié)精度)
                while(!P12);
          }
          if(P13==0)
          {
           Delay(20);
           if(P13==0)
           ds=ds-100; //定時(shí)減1分鐘
           while(!P13);
          }
   if (KeyV!= 0)      //有鍵按下
    {
      Delay(10);   //延時(shí)防抖  按下10ms再測(cè)
      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]; //秒個(gè)位
  P28=0;
  Delay(2);
  P28=1;
}



綠色的為秒顯示,紅色的為分顯示,也可以隨自己喜歡重新定義,改一下I/O口就行了。


調(diào)試.rar

18.76 KB, 下載次數(shù): 271, 下載積分: 黑幣 -5

倒計(jì)時(shí).rar

43.38 KB, 下載次數(shù): 303, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 2黑幣 +61 收起 理由
zqy181818 + 11 很給力!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏32 分享淘帖 頂7 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:60515 發(fā)表于 2016-1-6 19:20 來(lái)自手機(jī) | 只看該作者
正需要。如果要像微波爐,按開(kāi)始一下是加30秒,再按一下是60秒,應(yīng)該怎么改??
回復(fù)

使用道具 舉報(bào)

板凳
ID:95809 發(fā)表于 2016-1-6 19:52 | 只看該作者
GUOPK 發(fā)表于 2016-1-6 19:20
正需要。如果要像微波爐,按開(kāi)始一下是加30秒,再按一下是60秒,應(yīng)該怎么改??

    ds=ds+100;//定時(shí)加1分鐘         (調(diào)節(jié)精度)改這里。    100=1分鐘,500=5分鐘,以此類(lèi)推。       (調(diào)節(jié)精度)
回復(fù)

使用道具 舉報(bào)

地板
ID:60515 發(fā)表于 2016-1-20 20:09 來(lái)自手機(jī) | 只看該作者
bxyyhan 發(fā)表于 2016-1-6 19:52
ds=ds+100;//定時(shí)加1分鐘         (調(diào)節(jié)精度)改這里。    100=1分鐘,500=5分鐘,以此類(lèi)推。       ...

我照你的程序,在仿真軟件就顯示5個(gè)8。按鍵按下沒(méi)變化。幾個(gè)按鍵都怎么使用??
回復(fù)

使用道具 舉報(bào)

5#
ID:95809 發(fā)表于 2016-1-21 08:43 | 只看該作者
GUOPK 發(fā)表于 2016-1-20 20:09
我照你的程序,在仿真軟件就顯示5個(gè)8。按鍵按下沒(méi)變化。幾個(gè)按鍵都怎么使用??

程序里寫(xiě)的很明白,4個(gè)鍵分別是開(kāi)始/暫停;復(fù)位,加;減。你可以自己重定義I/O。
回復(fù)

使用道具 舉報(bào)

6#
ID:60515 發(fā)表于 2016-1-21 09:04 | 只看該作者
也不知哪錯(cuò)了,仿真就是沒(méi)反應(yīng)。
回復(fù)

使用道具 舉報(bào)

7#
ID:123604 發(fā)表于 2016-11-11 18:22 | 只看該作者
正需要,過(guò)來(lái)學(xué)習(xí),多謝分享
回復(fù)

使用道具 舉報(bào)

8#
ID:89286 發(fā)表于 2017-1-13 22:59 | 只看該作者
thanks
回復(fù)

使用道具 舉報(bào)

9#
ID:104838 發(fā)表于 2017-1-14 03:25 | 只看該作者
來(lái)個(gè)原理圖吧,
回復(fù)

使用道具 舉報(bào)

10#
ID:137767 發(fā)表于 2017-1-14 11:34 | 只看該作者
帶程序分享。收藏了。
回復(fù)

使用道具 舉報(bào)

11#
ID:166394 發(fā)表于 2017-2-24 15:55 | 只看該作者
非常感謝分享,拿來(lái)學(xué)習(xí)一下。
回復(fù)

使用道具 舉報(bào)

12#
ID:24379 發(fā)表于 2017-4-11 23:09 | 只看該作者
非常感謝分享,正需要呢?請(qǐng)問(wèn)樓主一般曝光多少秒。
回復(fù)

使用道具 舉報(bào)

13#
ID:51306 發(fā)表于 2017-7-12 14:19 | 只看該作者
感謝分享 ! 已經(jīng)完美復(fù)制
回復(fù)

使用道具 舉報(bào)

14#
ID:231305 發(fā)表于 2017-9-8 10:04 | 只看該作者
師父,那個(gè)JP01是什么電子元器件,我在proteus中找不到,在線等,我研究了幾天都沒(méi)搞明白
回復(fù)

使用道具 舉報(bào)

15#
ID:95809 發(fā)表于 2017-10-10 17:13 來(lái)自手機(jī) | 只看該作者
黃昏下的黎明 發(fā)表于 2017-9-8 10:04
師父,那個(gè)JP01是什么電子元器件,我在proteus中找不到,在線等,我研究了幾天都沒(méi)搞明白

跳線,一根鐵絲即可。
回復(fù)

使用道具 舉報(bào)

16#
ID:140489 發(fā)表于 2017-10-11 10:01 | 只看該作者
倒計(jì)時(shí)是什么文件,下載下來(lái)沒(méi)有C文件,浪費(fèi)我5黑幣
回復(fù)

使用道具 舉報(bào)

17#
ID:140489 發(fā)表于 2017-10-11 11:14 | 只看該作者
仿真了一下,可以的

QQ截圖20171011111119.jpg (183.3 KB, 下載次數(shù): 250)

QQ截圖20171011111119.jpg

倒計(jì)時(shí)仿真.rar

76.78 KB, 下載次數(shù): 98, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
51hei跑堂 + 30 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

18#
ID:95809 發(fā)表于 2017-10-11 21:10 | 只看該作者
lids 發(fā)表于 2017-10-11 10:01
倒計(jì)時(shí)是什么文件,下載下來(lái)沒(méi)有C文件,浪費(fèi)我5黑幣

源程序都貼出來(lái)了,自己用復(fù)制編譯一下就行,難道還讓我親自給你老人家的單片機(jī)里把程序燒好?
回復(fù)

使用道具 舉報(bào)

19#
ID:234917 發(fā)表于 2017-10-13 13:37 | 只看該作者
樓主一直在啊,我是初學(xué)的,今天剛下載完,請(qǐng)問(wèn)下載的資料都包含什么呀?我只發(fā)現(xiàn)了個(gè)一個(gè)c源程序,還有一個(gè)是Sprint-Layout 6.0可以打開(kāi)的pcb圖紙,還有其他的嗎?我主要想仿真,資料里面有沒(méi)有仿真原理圖呀?
回復(fù)

使用道具 舉報(bào)

20#
ID:257970 發(fā)表于 2017-12-12 11:11 來(lái)自手機(jī) | 只看該作者
請(qǐng)問(wèn)樓主這個(gè)有報(bào)警功能嗎
回復(fù)

使用道具 舉報(bào)

21#
ID:258743 發(fā)表于 2018-1-8 11:23 | 只看該作者
感謝分享 !
回復(fù)

使用道具 舉報(bào)

22#
ID:254251 發(fā)表于 2018-1-8 18:27 | 只看該作者
非常好,感謝分享
回復(fù)

使用道具 舉報(bào)

23#
ID:242300 發(fā)表于 2018-2-17 17:30 | 只看該作者
這個(gè)精確嗎
回復(fù)

使用道具 舉報(bào)

24#
ID:242300 發(fā)表于 2018-2-17 18:23 | 只看該作者
還能在精確一點(diǎn)嗎
回復(fù)

使用道具 舉報(bào)

25#
ID:18822 發(fā)表于 2018-8-24 22:45 | 只看該作者

這個(gè)精確嗎
回復(fù)

使用道具 舉報(bào)

26#
ID:95809 發(fā)表于 2018-9-4 14:30 來(lái)自手機(jī) | 只看該作者
daifhfh 發(fā)表于 2018-8-24 22:45
這個(gè)精確嗎

精度一般,現(xiàn)在我用15單片機(jī)做的,直驅(qū)數(shù)碼管,
回復(fù)

使用道具 舉報(bào)

27#
ID:452133 發(fā)表于 2018-12-24 13:38 | 只看該作者
這個(gè)不錯(cuò) 正好需要的,謝謝分享
回復(fù)

使用道具 舉報(bào)

28#
ID:398425 發(fā)表于 2019-3-13 22:05 來(lái)自手機(jī) | 只看該作者
很好,
回復(fù)

使用道具 舉報(bào)

29#
ID:477512 發(fā)表于 2019-3-24 12:53 | 只看該作者
這個(gè)仿真電路很奇怪,數(shù)碼管位需接排阻,而排阻另一端卻不接,才能仿真實(shí)驗(yàn),不知道是何原因?
回復(fù)

使用道具 舉報(bào)

30#
ID:419910 發(fā)表于 2019-6-11 00:17 來(lái)自手機(jī) | 只看該作者
樓主的pcb正常么?數(shù)碼管都用了哪些?仿制數(shù)碼管不亮
回復(fù)

使用道具 舉報(bào)

31#
ID:248223 發(fā)表于 2020-3-1 16:19 | 只看該作者
原理圖怎么沒(méi)有
回復(fù)

使用道具 舉報(bào)

32#
ID:309527 發(fā)表于 2020-6-23 00:28 | 只看該作者
樓主這個(gè)只用兩位數(shù)碼管顯示分鐘行嗎?
回復(fù)

使用道具 舉報(bào)

33#
ID:309527 發(fā)表于 2020-12-23 02:02 | 只看該作者
請(qǐng)教一下大師STC15W408做倒計(jì)時(shí)脫機(jī)定時(shí)器后不穩(wěn)定了死機(jī)了一般是什么問(wèn)題
過(guò)零信號(hào)正常  輸出控制可控硅的
回復(fù)

使用道具 舉報(bào)

34#
ID:848824 發(fā)表于 2020-12-23 13:37 | 只看該作者
厲害,高手電路板怎么做的漂亮
回復(fù)

使用道具 舉報(bào)

35#
ID:848824 發(fā)表于 2020-12-23 14:48 | 只看該作者
我手里只有四位數(shù)碼管也可以,很好找了好多只有你這個(gè)成功了。非常感謝
回復(fù)

使用道具 舉報(bào)

36#
ID:857362 發(fā)表于 2020-12-24 09:32 | 只看該作者
多謝分享,程序注釋很清晰
回復(fù)

使用道具 舉報(bào)

37#
ID:848824 發(fā)表于 2020-12-25 10:55 | 只看該作者
多謝分享,程序注釋很清晰。很好用
回復(fù)

使用道具 舉報(bào)

38#
ID:867862 發(fā)表于 2020-12-25 16:35 | 只看該作者
感謝 ,注釋很詳細(xì)
回復(fù)

使用道具 舉報(bào)

39#
ID:197229 發(fā)表于 2021-3-29 01:33 | 只看該作者
謝謝樓主,看著程序和PCB也能蒙出電路了,估計(jì)可以,程序的注釋可貴,因?yàn)榘呈切“,再加?7樓朋友的仿真圖更完美啦。好!
回復(fù)

使用道具 舉報(bào)

40#
ID:197229 發(fā)表于 2021-3-29 01:34 | 只看該作者
lids 發(fā)表于 2017-10-11 11:14
仿真了一下,可以的

謝謝朋友的仿真圖
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表