在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的簡(jiǎn)易定時(shí)報(bào)警器電路設(shè)計(jì)(含電路圖和程序)

            基于單片機(jī)的簡(jiǎn)易定時(shí)報(bào)警器電路設(shè)計(jì)(含電路圖和程序)

            作者: 時(shí)間:2012-09-02 來源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/170952.htm

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

            電路圖文章專題:電路圖符號(hào)大全


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



            上一頁 1 2 下一頁

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉