找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2016|回復(fù): 5
收起左側(cè)

51單片機(jī)倒計(jì)時(shí)程序 初學(xué)者求思路 中斷函數(shù)還沒(méi)有學(xué)

[復(fù)制鏈接]
ID:1002906 發(fā)表于 2022-1-21 19:20 | 顯示全部樓層 |閱讀模式

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

中斷函數(shù)沒(méi)有學(xué),目前只學(xué)了延時(shí)函數(shù),有沒(méi)有辦法用延時(shí)函數(shù)做到這個(gè)功能?

附上開(kāi)發(fā)板原理圖。


開(kāi)發(fā)板原理圖

開(kāi)發(fā)板原理圖
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2022-1-21 21:36 | 顯示全部樓層
用你能理解的寫(xiě)法,用延時(shí)函數(shù)寫(xiě)了兩位數(shù)碼管動(dòng)態(tài)顯示10秒循環(huán)倒計(jì)時(shí)。

  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};//共陰數(shù)碼管段碼
  5. unsigned int i;//無(wú)符號(hào)整型變量
  6. bit sign;//位變量
  7. char num;//有符號(hào)字符型變量

  8. void delay(unsigned int t)//延時(shí)函數(shù)
  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];//送個(gè)位段碼
  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);//延時(shí)約1ms,以此控制主循環(huán)周期
  50.         }
  51. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:1002906 發(fā)表于 2022-1-21 23:09 | 顯示全部樓層
wulin 發(fā)表于 2022-1-21 21:36
用你能理解的寫(xiě)法,用延時(shí)函數(shù)寫(xiě)了兩位數(shù)碼管動(dòng)態(tài)顯示10秒循環(huán)倒計(jì)時(shí)。

好的,謝謝
回復(fù)

使用道具 舉報(bào)

ID:857072 發(fā)表于 2022-1-22 00:23 來(lái)自觸屏版 | 顯示全部樓層
中斷不會(huì),天問(wèn)51了解一下。一鍵生成。
回復(fù)

使用道具 舉報(bào)

ID:64068 發(fā)表于 2022-1-22 09:55 | 顯示全部樓層
本帖最后由 kema 于 2022-1-22 09:59 編輯

給你個(gè)最笨的方法哈哈
i=10;

while(1)
{
if(i==10)
{
你會(huì)讓他顯示10
}

if(i==9)
{顯示9}

if(i==8)
{顯示8}
……

delay(1秒);
i--;
if(i==0)
i=10;


}簡(jiǎn)單吧


回復(fù)

使用道具 舉報(bào)

ID:1002906 發(fā)表于 2022-1-22 10:14 | 顯示全部樓層
kema 發(fā)表于 2022-1-22 09:55
給你個(gè)最笨的方法哈哈
i=10;

讓他顯示10我會(huì),但是不是得讓這個(gè)10一直刷新持續(xù)1s么?因?yàn)檫@個(gè)10我只會(huì)用動(dòng)態(tài)顯示。你這個(gè)方法不能讓10持續(xù)顯示1s吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表