標(biāo)題: 求助一個(gè)單片機(jī)定時(shí)器進(jìn)行多個(gè)倒計(jì)時(shí)設(shè)計(jì)方法? [打印本頁]

作者: dyliuxiang    時(shí)間: 2018-10-6 07:50
標(biāo)題: 求助一個(gè)單片機(jī)定時(shí)器進(jìn)行多個(gè)倒計(jì)時(shí)設(shè)計(jì)方法?
求助怎么設(shè)計(jì)用一個(gè)定時(shí)器制作多路倒計(jì)時(shí)?
作者: 圍城    時(shí)間: 2018-10-6 13:06
不是特別明白樓主的要求
作者: 圍城    時(shí)間: 2018-10-6 13:11
按我的理解,樓主要通過一個(gè)定時(shí)器倒計(jì)時(shí)同時(shí)控制多路,并沒有什么沖突,定時(shí)器只能確認(rèn)當(dāng)時(shí)已經(jīng)走過的時(shí)間,具體控制哪個(gè)多久由程序邏輯控制,假設(shè)有兩路需要控制一路1s,一路3s時(shí)間到執(zhí)行后續(xù)操作,我們用定時(shí)器定時(shí)50ms一次,累計(jì)兩次第一路動(dòng)作,累計(jì)6次第二路動(dòng)作。
作者: 小貓貓愛吃魚    時(shí)間: 2018-10-6 13:35
你好!
1、用的什么單片機(jī)
2、顯示用什么?
3、需要幾路倒計(jì)時(shí)?
4、可以加我 QQ ,代做設(shè)計(jì)
作者: sxhwdz    時(shí)間: 2018-10-6 15:05
用一個(gè)定時(shí)器中斷做時(shí)基,有幾路倒計(jì)時(shí)就用幾個(gè)倒計(jì)時(shí)單元,分別置初值,在定時(shí)器中斷程序內(nèi)對各個(gè)計(jì)時(shí)單元減1,主程序只要不斷查詢各個(gè)計(jì)數(shù)單元,哪一個(gè)歸零了,就是哪一路倒計(jì)時(shí)結(jié)束了。
作者: 快樂眼淚    時(shí)間: 2018-10-6 18:44
小貓貓愛吃魚 發(fā)表于 2018-10-6 13:35
你好!
1、用的什么單片機(jī)
2、顯示用什么?

qq號(hào)是多少?
作者: zl2168    時(shí)間: 2018-10-7 18:10
以1ms(可根據(jù)需要)作為定時(shí)基值,對其計(jì)數(shù),10ms、50ms、100ms、~、Nms,計(jì)數(shù)值滿,執(zhí)行相應(yīng)認(rèn)為。
作者: wulin    時(shí)間: 2018-10-8 15:53
一個(gè)定時(shí)器作3路不同時(shí)間倒計(jì)時(shí)

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






作者: th2009    時(shí)間: 2018-10-9 19:50
謝謝,收下來學(xué)習(xí)學(xué)習(xí)
作者: Robust_Gao    時(shí)間: 2018-11-2 20:50
感謝,感謝,正是我需要的
作者: 飛將軍    時(shí)間: 2018-11-7 22:59
樓主描述的還是不太詳細(xì),多個(gè)倒計(jì)時(shí)環(huán)節(jié)的話,可能初始值和開啟時(shí)間都不同,可以試試用一個(gè)定時(shí)器產(chǎn)生1秒鐘脈沖,然后分別用按鍵控制不同工作寄存器讀取1秒鐘脈沖,每讀取一次倒計(jì)時(shí)-1
作者: ljx8940    時(shí)間: 2018-11-8 11:00
可以在中斷函數(shù)中設(shè)置多個(gè)變量來實(shí)現(xiàn)多路輸出
作者: 一時(shí)    時(shí)間: 2019-10-29 08:00
受用了,謝謝,很好的思路
作者: zhuyafei    時(shí)間: 2019-10-29 09:23
51單片機(jī)實(shí)現(xiàn)數(shù)碼管99秒倒計(jì)時(shí),其實(shí)很簡單,就是使用定時(shí)器中斷來實(shí)現(xiàn)。目的就是學(xué)習(xí)怎樣用單片機(jī)實(shí)現(xiàn)倒計(jì)時(shí),從而實(shí)現(xiàn)一些延時(shí)控制類的東西,99秒只是一個(gè)例子,你完全可以做出任意倒計(jì)時(shí)如10秒倒計(jì)時(shí)程序。定時(shí)器定時(shí)時(shí)間計(jì)算公式:初值X=M(最大計(jì)時(shí))-計(jì)數(shù)值。
初值,換算成十六進(jìn)制,高位給TH0,低位給TL0,如果用定時(shí)器0的話。
M(最大計(jì)時(shí))如果是16位的,就是2的16次方,最大定時(shí),65535 微秒,實(shí)現(xiàn)1秒定時(shí),可以通過定時(shí)10毫秒,然后100次改變一次秒值即可。10*100毫秒=1S
計(jì)數(shù)值:你要定時(shí)多長時(shí)間,如果定時(shí)1毫秒,就是1000微秒,(單位為微秒),如果定時(shí)10毫秒,就是10000(微秒),當(dāng)然,最大定時(shí)被定時(shí)器本身位數(shù)限制了,最大2的16次方(16位定時(shí)計(jì)數(shù)器),只能定時(shí)65.535毫秒。定時(shí)1S當(dāng)然不可能1S定時(shí)器中斷。
下面為實(shí)現(xiàn)99秒倒計(jì)時(shí)C語言源程序
/*了解定時(shí)器,這樣的話,就可以做一些基本的實(shí)驗(yàn)了,如定時(shí)炸彈~~,10秒后打開關(guān)閉繼電器*/
/*數(shù)碼管,12M晶振*/
作者: zhuyafei    時(shí)間: 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; /*定時(shí)器0 16位定時(shí)器 X=65535-10000(10毫秒)=55535=D8F0(十六進(jìn)制)定時(shí)10ms
*/
TH0=0xd8;
TL0=0xf0;
IE=0x82; //這里是中斷優(yōu)先級控制EA=1(開總中斷),ET0=1(定時(shí)器0允許中斷),這里用定時(shí)器0來定時(shí)
TR0=1; //開定時(shí)器0
while(1)
{
P0=shiwei; //99的十位
P2=0; //99的個(gè)位,
delay(300); //動(dòng)態(tài)掃描數(shù)碼管延時(shí)
P0=gewei;
P2=1;
delay(300);
}
}
void tim(void) interrupt 1 using 1 //定時(shí)器0中斷
{
static uchar second=99,count; //99只是一個(gè)數(shù),可以任意改,因?yàn)檫@里只學(xué)習(xí)怎樣實(shí)現(xiàn)倒計(jì)時(shí)
TH0=0xd8; //定時(shí)10毫秒
TL0=0xf0;
count++;
if(count==100) //10毫秒定時(shí),10*100=1000(毫秒)=1秒
{
count=0;
second--;
if(second==0)
{
p11=0; //這里讓繼電器動(dòng)作,當(dāng)然動(dòng)作之后,要復(fù)位才能等下次倒定時(shí)再動(dòng)作。
second=99; //回到99再循環(huán)來,當(dāng)然,可以做其他的控制,
}
shiwei=tab[second/10]; //數(shù)碼管10位
gewei=tab[second%10]; //數(shù)碼管個(gè)位
}




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1