❶ 求51單片機 延時1秒鍾的子程序(沒什麼要求)
如果使用的是11.0592MHz的晶振,那麼編寫延時子程序的方式可以如下所示:
void delay(uint xms) { int i,j; for(int i=xms;i>0;i--) for(j=148;j>0;j--); }
在上述代碼中,delay(1)代表延時1毫秒(ms),因此要實現1秒的延時,只需調用delay(1000)。這種方法基於內部循環和固定值148的外部循環來實現延時。
值得注意的是,這個延時函數的具體實現可能需要根據實際情況進行調整,以確保准確的延時時間。例如,148這個數值是基於特定晶振頻率計算得出的,如果晶振頻率不同,這個值也需要相應調整。
此外,如果你對延時子程序的編寫有更多疑問或需要進一步的幫助,可以隨時提問。
在實際應用中,這種簡單的延時方法可能不夠精確,特別是在需要高精度延時的情況下。為了提高延時的准確性,可以考慮使用更復雜的方法,如使用定時器中斷等。
如果你在編寫延時子程序時遇到困難或想要了解更多信息,不妨詳細描述你的問題,以便得到更具體的幫助。
❷ 單片機,為什麼一秒的延時不起作用了
程序確實存在一些問題,數碼管顯示異常可能是因為P2埠的8個引腳並沒有正確控制數碼管的顯示。直接使用LED = i;這樣的語句會導致輸出的數字不是連續遞增的,而是可能跳躍或不連續。這是由於單片機在執行該指令時,並不能保證立即更新LED的狀態。
為了確保數碼管能夠正確顯示數字,需要考慮以下幾個方面:首先,確保數碼管的每一位都有獨立的控制信號,以便可以逐位更新顯示內容。其次,使用延時函數以確保每次更新LED狀態之間有足夠的時間間隔,避免因更新速度過快而導致顯示異常。再次,檢查程序中的循環和邏輯是否正確,確保每次循環都能正確地更新LED的值。
此外,還可以嘗試使用位操作來控制P2埠,例如P2.0 = i & 0x01; P2.1 = i & 0x02;等,這樣可以更精確地控制LED的狀態。同時,增加適當的延時,如使用delay_us(100);或delay_ms(1);等函數,確保每次更新LED狀態之間有足夠的間隔,以避免輸出不連續的問題。
綜上所述,程序的問題主要在於未正確控制數碼管的顯示和未使用適當的延時函數。通過改進程序結構,確保數碼管的每一位都有獨立的控制信號,並使用適當的延時函數,可以解決數碼管顯示異常的問題。