中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機控制的簡易定時報警器電路設計(含電路圖和程序)

        單片機控制的簡易定時報警器電路設計(含電路圖和程序)

        作者: 時間:2011-06-04 來源:網(wǎng)絡 收藏

        本文引用地址:http://www.antipu.com.cn/article/172704.htm

        3.1.3 設計(僅供參考的C語言源
        //晶振:11.0592M T1-250微秒 按鍵P10 P11 P12 P13
        /*變量的定義:
        show_val: 顯示的值0-59
        init_val: 初始值
        state_val: 狀態(tài)值 0-計數(shù)狀態(tài);1-設置狀態(tài);2-閃爍狀態(tài)
        shan_val:
        key_val1: 四個按鍵的值 255-無鍵;1-設置鍵 2-增一鍵 3-減一鍵 4-確定鍵
        T1_cnt: 器計數(shù)溢出數(shù)
        cnt_val: 倒計時的數(shù)值
        led_seg_code:數(shù)碼管7段碼
        */
        #include reg51.h //包含文件
        sbit P1_0=P1^0; //設置鍵
        sbit P1_1=P1^1; //增一鍵
        sbit P1_2=P1^2; //減一鍵
        sbit P1_3=P1^3; //確定鍵
        unsigned char data shan_val; //閃爍時LED的開/關(guān)狀態(tài)
        unsigned char data cnt_val; //保存倒計數(shù)的當前值
        unsigned int data T1_cnt; //保存器溢出次數(shù)
        unsigned char data key_val_new,key_val_old;//存放當前掃描的鍵和前一次按下的鍵值
        unsigned char data state_val; //狀態(tài)值
        unsigned char data show_val; //存放需要在數(shù)碼管顯示的數(shù)字
        unsigned char data init_val; //暫存倒計數(shù)的初始值
        char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        //----------延時--------------
        void delay(unsigned int i) //大約延時i*2個微秒
        { while(--i);}
        //-----------按鍵掃描-------------
        unsigned char scan_key()
        { unsigned char i;
        i=P10x0f;
        delay(100); //延時,去抖動
        if (i==(P10x0f))
        { if (P1_0==0)
        { i=1; }
        else
        { if (P1_1==0)
        { i=2;}
        else
        { if (P1_2==0)
        { i=3;}
        else
        { if (P1_3==0)
        { i=4;} }
        } } }
        else
        { i=255; }
        return i;
        }
        //---------數(shù)碼管顯示---------------
        void led_show(unsigned int v)
        {
        unsigned char i;
        if (state_val!=2) //動態(tài)掃描
        {i=v%10; //取要顯示的數(shù)的個位
        P0=led_seg_code[i]; //轉(zhuǎn)換為7段碼
        P2=0xfe; //顯示個位
        delay(15); //延時
        i=v%100/10; //取十位
        P0=led_seg_code[i]; //轉(zhuǎn)換為7段碼
        P2=0xfd; //顯示十位
        delay(5); //延時
        }
        else
        { P0=led_seg_code[0]; //處于閃爍狀態(tài)
        if (shan_val)
        { P2=0xff; } //將數(shù)碼管的關(guān)閉
        else
        { P2=0xfc; } //將數(shù)碼管的打開
        }
        }
        //----------器T1中斷服務---------------
        void timer1() interrupt 3 //T1中斷,250us中斷一次
        { T1_cnt++;
        switch (state_val)
        { case 0:
        if(T1_cnt>3999) //如果計數(shù)>3999, 計時1s
        { T1_cnt=0;
        if(cnt_val!=0)
        { cnt_val--;}
        else
        {state_val=2;} //定時計數(shù)到0時,切換狀態(tài)
        show_val=cnt_val;
        }
        break;
        case 2:
        if(T1_cnt>1999) //如果計數(shù)>1999, 計時0.5s
        { T1_cnt=0; shan_val=!shan_val; } //閃爍狀態(tài)
        break;
        }
        }
        //---------主程序----------------
        main()
        {init_val=59; //初始化各變量
        cnt_val=init_val;
        show_val=cnt_val;
        state_val=0;
        key_val_old=255;
        T1_cnt=0;
        shan_val=0; //初始化51的寄存器
        TMOD=0x20; //用T1計時 8位自動裝載定時模式
        TH1=0x19; //250微秒溢出一次; 250=(256-x)*12/11.0592 -> x= 230.4
        TL1=0x19;
        EA=1; //打開總中斷允許
        ET1=1; //開中斷允許
        TR1=1; //開定時器T1
        while(1)
        { key_val_new=scan_key(); // 255表示無鍵按下
        if (key_val_new!=key_val_old)
        { // 只有當前掃描的鍵值與上次掃描的不同,才判斷是有鍵按下
        key_val_old=key_val_new;
        switch (key_val_new)
        { case 1: //設置鍵
        state_val=1; //處于設置狀態(tài)
        TR1=1; //停止計時
        show_val=init_val; //顯示原來的倒計數(shù)初始值
        break;
        case 2: if(state_val==1) //只有在設置狀態(tài),增1鍵才有用
        { if (init_val>0) //更改原來的倒計數(shù)初始值
        {init_val--; }
        else
        {init_val=59;}
        show_val=init_val;//顯示更改后的倒計數(shù)初始值
        }
        break;
        case 3: if(state_val==1) //只有在設置狀態(tài),減1鍵才有用
        { if (init_val59) //更改原來的倒計數(shù)初始值
        {init_val++; }
        else
        {init_val=0;}
        show_val=init_val; //顯示更改后的計數(shù)初始值
        }
        break;
        case 4: if(state_val!=0) //如果已處于計數(shù)模式,確認鍵不起作用
        { cnt_val=init_val; //將初始值賦給計數(shù)變量
        show_val=cnt_val; //將計數(shù)變量的數(shù)字顯示
        TR1=1; //啟動定時器T1
        state_val=0; //將狀態(tài)切換為計數(shù)模式
        }
        break;
        }
        }
        led_show(show_val); //動態(tài)掃描
        }
        }

        電路圖符號相關(guān)文章:電路圖符號大全



        上一頁 1 2 下一頁

        評論


        相關(guān)推薦

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

        關(guān)閉