欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 一個關于C語言變量賦值和保存的小白問題求教 [打印本頁]

作者: hxdby    時間: 2021-12-26 11:28
標題: 一個關于C語言變量賦值和保存的小白問題求教
各位大佬好,

本人做一個可調時間的鬧鐘程序,要求設置一次時間,只要單片機不關機,每到這個時間,鬧鐘都會自動響鈴。

部分C語言程序如下:

int total_time;

int Temp;

void main(void)

{

while(1)
{  
total_time=Temp;
}
}

ISR(TIMER_vect)  //定時器中斷,1s進一次中斷
{
if (total_time !=0)
{ beep=1;
total_time--;
}
else

{beep=0;}


在這個程序中,Temp是一個臨時變量,是通過按鍵設置的,比如按鍵設置Temp=30,此時30賦值給total_time, 進入中斷后,由于total_time不等于0(為30),此時鬧鐘響,同時totai_time每1s自減1,直到為0為止,自減到0后,鬧鐘停,這就實現了鬧鐘響30s的一個功能。


我的疑問是:
1,total_time自減到0后,total_time的值是不是永遠就變成0了?如果這樣的話,鬧鐘就只能實現一次,下一次又需要重新設置,這樣不方便,有沒有可以設置一次,鬧鐘每到這個時間點就自動鬧鈴?
2,我main里有一個total_time=Temp;的賦值,如果total_time在中斷里自減到0后,total_time就永遠是0了嗎?因為total_time=Temp;這個賦值是放在while(1)循環里的,會不會自減到0后,total_time重新被賦值為30?只要我的Temp不變,total_time就是30?還是0?這個地方搞不清楚,我的需求是需要total_time一直保持30,除非Temp改變。


請各位大佬賜教!

作者: tatachaoren    時間: 2021-12-26 15:19
首先你mian函數里面total_time=Temp,雖然你說Temp是臨時變量,但是你定義的確是全局變量,所以Temp的值如果不按按鍵,是不會變化的,所以total_time=Temp只要進入while(1)循環,就會一直賦值,total_time就會一直是30,再說中斷,中斷里面的total_time值,就算當前中斷減1了,退出中斷又會變成30,所以你可以多設置幾個變量,而不是糾結在這兩個變量。
作者: 想進步要學習    時間: 2021-12-26 22:13
你有這樣的疑問是因為你還不太清楚程序的執行順序。程序是這樣執行的,主函數中的代碼一條條執行下來,當發生中斷的時候,會進入中斷去處理中斷中的代碼,而中斷中的代碼也是一條條執行下來的,執行到底跳出來后,回到主函數被中斷打斷的位置接著往下執行,如此往復。
作者: hxdby    時間: 2022-1-15 19:55
tatachaoren 發表于 2021-12-26 15:19
首先你mian函數里面total_time=Temp,雖然你說Temp是臨時變量,但是你定義的確是全局變量,所以Temp的值如 ...

后來我自己驗證了,確實如您所說,非常感謝回復和幫助!




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