回覆列表
  • 1 # 使用者9147460208505

    有一個一模一樣的提問,好吧,俺再發布一次

    給你一份我自己寫的,利用四位數碼管顯示模擬時鐘的程式吧,供你研究

    另外,再給你一個一位數碼管的,是你要求的那種

    這兩個都是利用微控制器的定時器中斷來產生秒訊號的

    下面這個是 四位數碼管的,最下邊的是一位數碼管的,埠不一樣的話,自己改下

    /***************************************************************************/

    #include

    sbit p20=P3^7; sbit p21=P3^6; sbit led=P2^7;//按鍵及LED埠定義

    sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//數碼管位選埠

    char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管顯示編碼

    unsigned int h,m,s,t,n;

    /***************************************************************************/

    void YS(char hs)//延時函式

    {char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}

    /***************************************************************************/

    void XS(int xh,int xm) //顯示子函式

    {

    char d1,d2,d3,d4;

    d1=(xh/1)%10; d2=(xh/10)%10;//分離小時

    d3=(xm/1)%10; d4=(xm/10)%10;//分離分鐘

    P0=table[d1];Cxs=0;YS(10);Cxs=1;//小時個位

    P0=table[d2];Dxs=0;YS(10);Dxs=1;//小時十位

    P0=table[d3];Axs=0;YS(10);Axs=1;//分鐘個位

    P0=table[d4];Bxs=0;YS(10);Bxs=1;//分鐘十位

    P0=0x7f; P1=0xfd; YS(10); P1=0xff;//小數點

    }

    /***************************************************************************/

    void main(void)

    {

    TH0=(65536-1000)/256; TL0=(65536-1000)%256;

    TMOD=0x01; EA=1; ET0=1; TR0=1;//定時器初始化

    while(1)//主迴圈

    {

    if(p20==0){YS(10);if(p20==0){h++;if(h>23){h=0;}}while(!p20){XS(h,m);}}

    if(p21==0){YS(10);if(p21==0){m++;if(m>59){m=0;}}while(!p21){XS(h,m);}}

    XS(h,m);//呼叫數碼管顯示函式

    }

    }

    /***************************************************************************/

    void int1() interrupt 1 //定時器中斷

    {

    TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;t++;

    if(t>500){t=0;led=~led;}//LED閃爍

    if(n>1000){n=0;s++;}//如果達到一秒,秒加一

    if(s>59){s=0;m++;}//如果達到一分,分加一

    if(m>59){m=0;h++;}//如果達到一小時,小時加一

    if(h>23){h=0;}//如果達到24小時,小時清零

    }

    /***************************************************************************/

    /***************************************************************************/

    #include

    sbit Axs=P1^3;//數碼管位選埠

    char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管顯示編碼

    unsigned int h,m,s,t,n;

    /***************************************************************************/

    void YS(char hs)//延時函式

    {char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}

    /***************************************************************************/

    void main(void)

    {

    TH0=(65536-1000)/256; TL0=(65536-1000)%256;

    TMOD=0x01; EA=1; ET0=1; TR0=1;//定時器初始化

    while(1)//主迴圈

    {

    P0=table[m];Axs=0;YS(10);Axs=1;//小時個位

    }

    }

    /***************************************************************************/

    void int1() interrupt 1 //定時器中斷

    {

    TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;

    if(n>1000){n=0;m++;}//如果達到一秒,秒加一

    if(m>9){m=0;}//如果達到一小時,小時加一

    }

    /***************************************************************************/

  • 中秋節和大豐收的關聯?
  • 看動作猜字謎?