![]() |
發布時間: 2018-5-19 14:13
正文摘要:目的是獲得程序運轉的時間,因為要對電機進行測速,外置了一個傳感器; 現在已經能夠從傳感器得到了電機運轉的圈數 count ,需要把count除以從通電開始到現在的時間才能得到速度。 請問這個時間要怎么做才能得到? ... |
優雅的刺猬 發表于 2018-5-19 14:13 時間time能得到了,計數count也有了,可是顯示不出來啊 ![]() 我用的是四位共陽數碼管,buf[]數組的0~3分別是四個位。顯示其他數據的時候例如:buf[1] = 1;display();這樣就能正常顯示,但是速度count/time沒法顯示出來,不知道是不是數據類型的問題? ![]() while(!s5) { //TODO 顯示rs?? rs = count/time; buf[3] = rs/1000 ; buf[2] = rs%1000/100; buf[1] = rs%100/10 ; buf[0] = rs%10; display(); } |
優雅的刺猬 發表于 2018-5-22 23:43 按回復結合另一個分享的帖子弄好了 ![]() |
你可以設置一個中斷,非常好用 |
弄一個標志位,開始的時候標志位等于0,然后再進入main函數初始化的時候標志位置1,然后到定時器判斷標志位為1了就開始計時,就好了 |
設置開始到結束兩個標志位 然后計算時間 不過我個人感覺不用算從開始的時間 沒有什么必要 希望對你有幫助 |
用DS1302;也只能這樣了……你想,單片機里面就定時器而已 |
需要計時的話,直接對單片機內部脈沖計數不就好了么,用一個整數的晶振,然后輸出轉換成時間不就是單片機開始到結束的時間了么 |
電機開始 設置一個標志位 定時器定時 關閉標志位 。之后計算 |
在10ms的中斷服務程序中,增加一個計數器,就可以得到時間。那么電機打開的時候,記下這個起始的時間,用當前時間減去起始時間就可以得到運行時間 |
不用從運行開始算時間,你可以計算比如一秒時間內的圈數,開啟計數器,同時開啟計圈傳感器,1秒后定時器溢出,引發中斷,再關閉定時器,關閉計圈傳感器。不就解決了。 |
為什么要從開始算哪? |
用一個定時器,50毫秒跳一次,二十次加一,主函數初始化完就開中斷,就能計時了。隨便設個整數變量。 |