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

標題: 51單片機倒計時程序 初學者求思路 中斷函數還沒有學 [打印本頁]

作者: AnRan_    時間: 2022-1-21 19:20
標題: 51單片機倒計時程序 初學者求思路 中斷函數還沒有學

剛學單片機一周,布置的任務是讓數碼管從10變化到0,每次變化間隔1秒。我知道怎么從9變化到0,但是如何讓10變化到9呢?我只知道如何讓數碼管一直顯示10,但是不知道怎么讓10顯示1秒并且變成9。單片機用的清翔的開發板,有沒有大佬給個思路,非常感謝。

中斷函數沒有學,目前只學了延時函數,有沒有辦法用延時函數做到這個功能?

附上開發板原理圖。


開發板原理圖.png (100.19 KB, 下載次數: 32)

開發板原理圖

開發板原理圖

作者: wulin    時間: 2022-1-21 21:36
用你能理解的寫法,用延時函數寫了兩位數碼管動態顯示10秒循環倒計時。

  1. #include <reg51.h>

  2. sbit dula=P2^6;                        //段
  3. sbit wela=P2^7;                        //位

  4. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數碼管段碼
  5. unsigned int i;//無符號整型變量
  6. bit sign;//位變量
  7. char num;//有符號字符型變量

  8. void delay(unsigned int t)//延時函數
  9. {                                               
  10.         unsigned int i,j;
  11.         for(i=t;i>0;i--)
  12.                 for(j=110;j>0;j--);
  13. }

  14. void main(void)
  15. {
  16.         num=10;//賦初值
  17.         sign=0;//賦初值
  18.         while(1)
  19.         {
  20.                 sign=~sign;//取反
  21.                 if(sign==0)       
  22.                 {
  23.                         P0=0xfe;//送位碼
  24.                         wela=1;//位碼鎖存
  25.                         wela=0;
  26.                         P0=table[num/10];//送十位段碼
  27.                         dula=1;//段碼鎖存
  28.                         dula=0;
  29.                 }
  30.                 if(sign==1)       
  31.                 {
  32.                         P0=0xfd;//送位碼
  33.                         wela=1;//位碼鎖存
  34.                         wela=0;
  35.                         P0=table[num%10];//送個位段碼
  36.                         dula=1;//段碼鎖存
  37.                         dula=0;
  38.                 }
  39.                 i++;
  40.                 if(i==1000)//約1秒
  41.                 {       
  42.                         i=0;
  43.                         num--;
  44.                         if(num<0)
  45.                         {
  46.                                 num=10;
  47.                         }
  48.                 }
  49.                 delay(1);//延時約1ms,以此控制主循環周期
  50.         }
  51. }
復制代碼

作者: AnRan_    時間: 2022-1-21 23:09
wulin 發表于 2022-1-21 21:36
用你能理解的寫法,用延時函數寫了兩位數碼管動態顯示10秒循環倒計時。

好的,謝謝
作者: 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
kema 發表于 2022-1-22 09:55
給你個最笨的方法哈哈
i=10;

讓他顯示10我會,但是不是得讓這個10一直刷新持續1s么?因為這個10我只會用動態顯示。你這個方法不能讓10持續顯示1s吧




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