關於51微控制器實現數字秒錶程式演算法出錯的問題

2021-08-08 04:41:49 字數 1825 閱讀 7891

1樓:匿名使用者

你想表達的是不是: 你的程式中每次進入for迴圈都有這樣一條指令sec=sec/10,而且執行了4次,所以每次for迴圈出來都有sec=0,因為計時開始,sec < 10,sec的前3位還總是0,進入for因為連續4次除10再重新賦值,導致每次出來sec都為0,而出來後累加得1後再進入迴圈,那每次進入迴圈都應該有sec=1,從而應該每次buf[0]=1,數碼管個位應該一直顯示1才對,可是卻顯示的是0。

根據你第二張圖的上面,我發現你還用來顯示秒ms,而重新整理完毫秒後就立刻去重新整理s了,而這時秒位還沒更新到1,所以99次重新整理為0,只有一次重新整理為1,所以顯示0時會閃,而且重新整理為1停留的時間佔的比重太小,根本看不到重新整理為1的時候。

而你說你用左圖的方法代替那個for迴圈正常,是因為左圖那個每次都不會把儲存秒的變數給清0,即使是每ms重新整理一次,因為儲存秒的變數是存在的,到下一秒才變化,所以每ms進入重新整理時,儲存秒的變數儲存的是上一個s得到的值,顯示出來就是正確的。

2樓:匿名使用者

你自己都明明知道sec/10=0了,再過1秒,sec加一,sec=1,可問題是,右邊圖中for迴圈運算,是在每一秒以後,確保sec加一以後才迴圈的嗎?估計你是在主程中不斷執行for迴圈的,還沒等到sec加1,sec還是0就執行for迴圈的,那sec就無法加1。閃一下,說明在1秒到的時刻,sec確實加1了,可剛顯示出1,馬上又for迴圈了,又為0了。

還沒等看清楚呢就變回0了。

你要想辦法,保證在一秒以後,保證sec加一後再for迴圈。

其實,這麼做本就是錯誤的。你既然知道按左圖的演算法是對的,何苦還用for計算呢?為自己出難題啊?

3樓:專注51微控制器

個十百千這樣算確實錯了,正確的是:

buf[0]=integerpart%10;

buf[1]=integerpart%100/10;

buf[2]=integerpart%1000/100;

buf[3]=integerpart%10000/1000;

51微控制器c語言秒錶程式報錯誤和警告(程式如下)

4樓:一萬光年

void debounce(void)

最後要加分號;

51微控制器c語言程式設計:秒錶程式設計問題! 5

5樓:匿名使用者

你多看看c語言書……bai現在du很多書都講基礎……關於zhi設計方面的很少……需dao要你自己版去想……到底權可以編什麼軟體……我們學這個就是為了用它……所以…… 給你一個問題?怎麼實現改c的輸出背景和安體顏色……你可以試試去實現他……

51微控制器數字秒錶設計用4位數碼管分別顯示十秒,秒,百毫秒,十毫秒計時範圍為10ms到99s

6樓:瀋陽_大偉

#include

sbit axs=p1^3; sbit bxs=p1^2; sbit cxs=p1^1; sbit dxs=p1^0;//數碼管位選埠

char table[10]=;//數碼管顯示編碼

void ys(char hs); void xs(int xm,int xs); void time1(void);int n,i,m,s;

void main(void)}//主函式

void int1() interrupt 1 //定時器中斷}}}

void time1(void)//定時器初始化

void xs(int xm,int xs) //數碼管顯示

void ys(char hs)}//延時函式

和你要的一樣,無償奉獻了

幫我寫個程式吧,關於51微控制器串列埠

include define uchar unsigned char fefine uint unsigned intuchar wm1 0xfe,wm2 0xfd,wm3 0xfb,wm4 0xf7 uchar wl1 0xef,wl2 0xdf,wl3 0xbf,wl4 0x7f uchar r...

51微控制器節乘法程式51微控制器二位元組乘法程式

標號 功能 雙位元組二進位制無符號數乘法子程式入口條件 被乘數在r2 r3中,乘數在r6 r7中。出口資訊 乘積在r2 r3 r4 r5中。影響資源 psw a b r2 r7 堆疊需求 位元組muld mov a,r3 計算r3乘r7mov b,r7 mul ab mov r4,b 暫存部分積 m...

51微控制器如何程式實現低頻函式訊號發生器中10HZ步進

首先 你的晶振是11.0592m,例如,如果用dds方法實現10hz步進,那麼你需要做一個11.0592m除以10hz也就是100001110000000000000個取樣值的正弦波,考慮到程式的實現,這裡我把頻率控制字設為1,這樣按鍵的計數值就是頻率控制字。並且只取取樣值的高8位作為rom表即可,...