新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機C語言程序(三)數(shù)碼管

        51單片機C語言程序(三)數(shù)碼管

        作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

        本文引用地址:http://www.104case.com/article/201611/321416.htm

        程序三

        利用動態(tài)掃描和定時器1在數(shù)碼管上顯示
        出從765432開始以1/10秒的速度往下遞減
        直至765398并保持顯示此數(shù),與此同時利
        用定時器0以500MS速度進行流水燈從上至
        下移動,當數(shù)碼管上數(shù)減到停止時,實驗
        板上流水燈也停止然后全部開始閃爍,3秒
        后(用T0定時)流水燈全部關(guān)閉、數(shù)碼管上
        顯示出"HELLO"。到此保持住。

        #include //52單片機頭文件
        #include //包含有左右循環(huán)移位子函數(shù)的庫
        #define uint unsigned int //宏定義
        #define uchar unsigned char //宏定義
        sbit dula=P2^6;
        sbit wela=P2^7;
        uchar code table[]={ //顯示數(shù)據(jù)編碼
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,
        0x76,0x79,0x38,0x3f,0};
        uchar temp,t0,t1,bai,shi,ge,flag,flag1;
        uint shu;
        void init(); //函數(shù)聲明
        void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);
        void delay(uint z) //延時子函數(shù)
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }
        void main() //主函數(shù)
        {
        init();
        while(1)
        {
        if(flag1!=1) //如果flagi不再等于1則顯示數(shù)據(jù)
        display(7,6,5,bai,shi,ge);
        else
        display(16,17,18,18,19,20); //否則顯示hello
        }
        }

        void init() //初始化函數(shù)
        {
        shu=432;
        temp=0xfe;
        P1=temp;
        TMOD=0x11;
        TH0=(65536-50000)/256; //定時器初始化
        TL0=(65536-50000)%256;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
        }

        void timer0() interrupt 1 //定時器0中斷
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t0++;
        if(flag!=1) //flag不等于1時進行流水燈
        {
        if(t0==10)
        {
        t0=1;
        temp=_crol_(temp,1);
        P1=temp;
        }
        }
        else //否則進行燈閃爍
        {
        if(t0%4==0) //小燈每200毫秒變化一次
        P1=~P1;
        if(t0==60)
        {
        TR0=0; //3秒后關(guān)閉定時器0,關(guān)閉燈,并置flag=1
        P1=0xff;
        flag1=1;
        }
        }
        }

        void timer1() interrupt 3 //定時器1中斷函數(shù)
        {
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        t1++;
        if(t1==2)
        {
        t1=0;
        shu--;
        bai=shu/100;
        shi=shu%100/10;
        ge=shu%10;
        if(shu==398) //當?shù)?98時把原來T0中的數(shù)清除,重新加裁初值讓小燈閃爍
        {
        TR0=0;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;
        flag=1;
        t0=0;
        P1=0xff;
        TR1=0;
        }
        }
        }

        void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge) //顯示子函數(shù)
        {
        dula=1;
        P0=table[aa];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delay(1);

        dula=1;
        P0=table[bb];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay(1);

        dula=1;
        P0=table[cc];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delay(1);
        dula=1;
        P0=table[bai];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xf7;
        wela=0;
        delay(1);

        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xef;
        wela=0;
        delay(1);

        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xdf;
        wela=0;
        delay(1);
        }


        上一頁 1 2 下一頁

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 雷波县| 和硕县| 宝丰县| 梁河县| 桓仁| 固阳县| 瑞昌市| 白玉县| 台东县| 北票市| 新丰县| 若羌县| 延庆县| 花莲县| 临泽县| 广河县| 纳雍县| 苍溪县| 阳山县| 伊金霍洛旗| 商水县| 如东县| 黔西| 德保县| 光泽县| 成安县| 盐津县| 塔河县| 永靖县| 浦城县| 罗定市| 克拉玛依市| 临邑县| 尖扎县| 屏东县| 宝山区| 海盐县| 分宜县| 绥中县| 灌云县| 泗洪县|