標題: 51單片機倒計時程序 初學者求思路 中斷函數還沒有學 [打印本頁]
作者: AnRan_ 時間: 2022-1-21 19:20
標題: 51單片機倒計時程序 初學者求思路 中斷函數還沒有學
剛學單片機一周,布置的任務是讓數碼管從10變化到0,每次變化間隔1秒。我知道怎么從9變化到0,但是如何讓10變化到9呢?我只知道如何讓數碼管一直顯示10,但是不知道怎么讓10顯示1秒并且變成9。單片機用的清翔的開發板,有沒有大佬給個思路,非常感謝。
中斷函數沒有學,目前只學了延時函數,有沒有辦法用延時函數做到這個功能?
附上開發板原理圖。
-
開發板原理圖.png
(100.19 KB, 下載次數: 32)
下載附件
2022-1-21 19:19 上傳
開發板原理圖
作者: wulin 時間: 2022-1-21 21:36
用你能理解的寫法,用延時函數寫了兩位數碼管動態顯示10秒循環倒計時。
- #include <reg51.h>
- sbit dula=P2^6; //段
- sbit wela=P2^7; //位
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數碼管段碼
- unsigned int i;//無符號整型變量
- bit sign;//位變量
- char num;//有符號字符型變量
- void delay(unsigned int t)//延時函數
- {
- unsigned int i,j;
- for(i=t;i>0;i--)
- for(j=110;j>0;j--);
- }
- void main(void)
- {
- num=10;//賦初值
- sign=0;//賦初值
- while(1)
- {
- sign=~sign;//取反
- if(sign==0)
- {
- P0=0xfe;//送位碼
- wela=1;//位碼鎖存
- wela=0;
- P0=table[num/10];//送十位段碼
- dula=1;//段碼鎖存
- dula=0;
- }
- if(sign==1)
- {
- P0=0xfd;//送位碼
- wela=1;//位碼鎖存
- wela=0;
- P0=table[num%10];//送個位段碼
- dula=1;//段碼鎖存
- dula=0;
- }
- i++;
- if(i==1000)//約1秒
- {
- i=0;
- num--;
- if(num<0)
- {
- num=10;
- }
- }
- delay(1);//延時約1ms,以此控制主循環周期
- }
- }
復制代碼
作者: AnRan_ 時間: 2022-1-21 23:09
好的,謝謝
作者: a185980800 時間: 2022-1-22 00:23
中斷不會,天問51了解一下。一鍵生成。
作者: kema 時間: 2022-1-22 09:55
本帖最后由 kema 于 2022-1-22 09:59 編輯
給你個最笨的方法哈哈
i=10;
while(1)
{
if(i==10)
{
你會讓他顯示10
}
if(i==9)
{顯示9}
if(i==8)
{顯示8}
……
delay(1秒);
i--;
if(i==0)
i=10;
}簡單吧
作者: AnRan_ 時間: 2022-1-22 10:14
讓他顯示10我會,但是不是得讓這個10一直刷新持續1s么?因為這個10我只會用動態顯示。你這個方法不能讓10持續顯示1s吧
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |