新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機C語言程序(二)定時/計數器 中斷

        51單片機C語言程序(二)定時/計數器 中斷

        作者: 時間:2016-11-25 來源:網絡 收藏

        void timer0() interrupt 1 //定時器0中斷
        {
        TR0=0; //進中斷后先把定時器0中斷關閉,防止內部程序過多而造成中斷丟失
        TH0=(65536-fre)/256;
        TL0=(65536-fre)%256;
        tt++;
        if(flag<40) //以下幾個if分別用來選取不同的頻率
        if(tt==10)
        {
        tt=0;
        fre=50000;
        beep=~beep;
        }
        if(flag>=40&&flag<80)
        {
        tt=0;
        fre=50000;
        beep=~beep;
        }
        if(flag>=80&&flag<120)
        {
        tt=0;
        fre=10000;
        beep=~beep;
        }
        if(flag>=120&&flag<160)
        {
        tt=0;
        fre=5000;
        beep=~beep;
        }
        if(flag>=160&&flag<200)
        {
        tt=0;
        fre=2500;
        beep=~beep;
        }
        if(flag>=200&&flag<240)
        {
        tt=0;
        fre=1250;
        beep=~beep;
        }
        if(flag>=240&&flag<280)
        {
        tt=0;
        fre=625;
        beep=~beep;
        }
        if(flag>=280&&flag<320)
        {
        tt=0;
        fre=312;
        beep=~beep;
        }
        if(flag>=320&&flag<360)
        {
        tt=0;
        fre=156;
        beep=~beep;
        }
        TR0=1;
        }
        void timer1() interrupt 3 //定時器1中斷用來產生2秒時間定時
        {
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        flag++;
        if(flag==360)
        {
        flag=0;
        fre=50000;
        }
        }

        程序四

        用定時器以間隔500MS在6位數碼管上依次顯示
        0、1、2、3....C、D、E、F,重復。

        #include //52單片機頭文件
        #include //包含有左右循環移位子函數的庫
        #define uint unsigned int //宏定義
        #define uchar unsigned char //宏定義
        sbit dula=P2^6; //數碼管段選鎖存端
        sbit wela=P2^7; ////數碼管位選鎖存端
        uchar num,tt;
        uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
        void main()
        {
        num=0;
        tt=0;
        TMOD=0x01;//設置定時器0為工作方式1
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;//開總中斷
        ET0=1;//開定時器0中斷
        TR0=1;//啟動定時器0
        dula=1;
        P0=0x3f; //給段開始送顯示0。
        dula=0;//關閉段選鎖存端,防止開始時出現亂碼。
        wela=1;//11101010
        P0=0xc0; // 打開六個數碼管位選
        wela=0;
        while(1)
        {
        if(tt==10) //每進入10次中斷即為500ms,執行一次顯示變化。
        {
        tt=0;
        num++;
        if(num==16)
        num=0;
        dula=1;
        P0=table[num];
        dula=0;
        }
        }
        }


        void exter0() interrupt 1 // 定時器0中斷
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        tt++;
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 池州市| 常宁市| 东兰县| 合阳县| 汉阴县| 衢州市| 海口市| 景东| 龙岩市| 简阳市| 剑阁县| 呼图壁县| 莱西市| 宿松县| 黎川县| 明溪县| 常山县| 黑山县| 棋牌| 阿克陶县| 天全县| 阳朔县| 福安市| 禄劝| 保山市| 达州市| 寿阳县| 乃东县| 乐清市| 香格里拉县| 公安县| 广水市| 黔南| 蛟河市| 五华县| 清原| 凉城县| 喀喇沁旗| 绥滨县| 泗阳县| 克东县|