找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7011|回復: 14
打印 上一主題 下一主題
收起左側

求助一個單片機定時器進行多個倒計時設計方法?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:405738 發(fā)表于 2018-10-6 07:50 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
求助怎么設計用一個定時器制作多路倒計時?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 2#
ID:213173 發(fā)表于 2018-10-8 15:53 | 只看該作者
一個定時器作3路不同時間倒計時

程序+仿真.zip (99.08 KB, 下載次數(shù): 99)





回復

使用道具 舉報

板凳
ID:313481 發(fā)表于 2018-10-6 13:06 | 只看該作者
不是特別明白樓主的要求
回復

使用道具 舉報

地板
ID:313481 發(fā)表于 2018-10-6 13:11 | 只看該作者
按我的理解,樓主要通過一個定時器倒計時同時控制多路,并沒有什么沖突,定時器只能確認當時已經(jīng)走過的時間,具體控制哪個多久由程序邏輯控制,假設有兩路需要控制一路1s,一路3s時間到執(zhí)行后續(xù)操作,我們用定時器定時50ms一次,累計兩次第一路動作,累計6次第二路動作。
回復

使用道具 舉報

5#
ID:303383 發(fā)表于 2018-10-6 13:35 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

6#
ID:387733 發(fā)表于 2018-10-6 15:05 | 只看該作者
用一個定時器中斷做時基,有幾路倒計時就用幾個倒計時單元,分別置初值,在定時器中斷程序內對各個計時單元減1,主程序只要不斷查詢各個計數(shù)單元,哪一個歸零了,就是哪一路倒計時結束了。
回復

使用道具 舉報

7#
ID:399179 發(fā)表于 2018-10-6 18:44 來自觸屏版 | 只看該作者
小貓貓愛吃魚 發(fā)表于 2018-10-6 13:35
你好!
1、用的什么單片機
2、顯示用什么?

qq號是多少?
回復

使用道具 舉報

8#
ID:111634 發(fā)表于 2018-10-7 18:10 | 只看該作者
以1ms(可根據(jù)需要)作為定時基值,對其計數(shù),10ms、50ms、100ms、~、Nms,計數(shù)值滿,執(zhí)行相應認為。
回復

使用道具 舉報

9#
ID:366583 發(fā)表于 2018-10-9 19:50 | 只看該作者
謝謝,收下來學習學習
回復

使用道具 舉報

10#
ID:322454 發(fā)表于 2018-11-2 20:50 | 只看該作者
感謝,感謝,正是我需要的
回復

使用道具 舉報

11#
ID:89835 發(fā)表于 2018-11-7 22:59 | 只看該作者
樓主描述的還是不太詳細,多個倒計時環(huán)節(jié)的話,可能初始值和開啟時間都不同,可以試試用一個定時器產(chǎn)生1秒鐘脈沖,然后分別用按鍵控制不同工作寄存器讀取1秒鐘脈沖,每讀取一次倒計時-1
回復

使用道具 舉報

12#
ID:381277 發(fā)表于 2018-11-8 11:00 | 只看該作者
可以在中斷函數(shù)中設置多個變量來實現(xiàn)多路輸出
回復

使用道具 舉報

13#
ID:476909 發(fā)表于 2019-10-29 08:00 | 只看該作者
受用了,謝謝,很好的思路
回復

使用道具 舉報

14#
ID:631355 發(fā)表于 2019-10-29 09:23 | 只看該作者
51單片機實現(xiàn)數(shù)碼管99秒倒計時,其實很簡單,就是使用定時器中斷來實現(xiàn)。目的就是學習怎樣用單片機實現(xiàn)倒計時,從而實現(xiàn)一些延時控制類的東西,99秒只是一個例子,你完全可以做出任意倒計時如10秒倒計時程序。定時器定時時間計算公式:初值X=M(最大計時)-計數(shù)值。
初值,換算成十六進制,高位給TH0,低位給TL0,如果用定時器0的話。
M(最大計時)如果是16位的,就是2的16次方,最大定時,65535 微秒,實現(xiàn)1秒定時,可以通過定時10毫秒,然后100次改變一次秒值即可。10*100毫秒=1S
計數(shù)值:你要定時多長時間,如果定時1毫秒,就是1000微秒,(單位為微秒),如果定時10毫秒,就是10000(微秒),當然,最大定時被定時器本身位數(shù)限制了,最大2的16次方(16位定時計數(shù)器),只能定時65.535毫秒。定時1S當然不可能1S定時器中斷。
下面為實現(xiàn)99秒倒計時C語言源程序
/*了解定時器,這樣的話,就可以做一些基本的實驗了,如定時炸彈~~,10秒后打開關閉繼電器*/
/*數(shù)碼管,12M晶振*/
回復

使用道具 舉報

15#
ID:631355 發(fā)表于 2019-10-29 09:24 | 只看該作者
#include <reg52.h>
#define uchar unsigned char
sbit p11=P1^1; //連的是繼電器。。
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shiwei;
uchar gewei;
void delay(unsigned int cnt)
{
while(--cnt);
}
void main()
{
TMOD|=0x01; /*定時器0 16位定時器 X=65535-10000(10毫秒)=55535=D8F0(十六進制)定時10ms
*/
TH0=0xd8;
TL0=0xf0;
IE=0x82; //這里是中斷優(yōu)先級控制EA=1(開總中斷),ET0=1(定時器0允許中斷),這里用定時器0來定時
TR0=1; //開定時器0
while(1)
{
P0=shiwei; //99的十位
P2=0; //99的個位,
delay(300); //動態(tài)掃描數(shù)碼管延時
P0=gewei;
P2=1;
delay(300);
}
}
void tim(void) interrupt 1 using 1 //定時器0中斷
{
static uchar second=99,count; //99只是一個數(shù),可以任意改,因為這里只學習怎樣實現(xiàn)倒計時
TH0=0xd8; //定時10毫秒
TL0=0xf0;
count++;
if(count==100) //10毫秒定時,10*100=1000(毫秒)=1秒
{
count=0;
second--;
if(second==0)
{
p11=0; //這里讓繼電器動作,當然動作之后,要復位才能等下次倒定時再動作。
second=99; //回到99再循環(huán)來,當然,可以做其他的控制,
}
shiwei=tab[second/10]; //數(shù)碼管10位
gewei=tab[second%10]; //數(shù)碼管個位
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表