在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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)用 > 51單片機(jī)實(shí)現(xiàn)按健連加減程序

            51單片機(jī)實(shí)現(xiàn)按健連加減程序

            作者: 時(shí)間:2012-10-08 來源:網(wǎng)絡(luò) 收藏
            ************************************************************************/
            /********按鍵記數(shù)0-99 長按鍵連續(xù)加或者連續(xù)減實(shí)驗(yàn)******************/
            /********按k1鍵加一,超過一定時(shí)間連續(xù)加一,加到99后k1在按無效*******/
            /********按k2鍵減一,超過一定時(shí)間連續(xù)減一,減到00后k2在按無效*******/
            /************************************************************************/

            /****************宏定義*******************/

            #includereg51.h>

            #define uchar unsigned char
            #define uint unsigned int
            #define SEG P2 //段碼
            #define DIG P0 //位碼

            sbit k1=P3^0; //按鍵加1按鈕
            sbit k2=P3^1; //按鍵減1按鈕
            uchar code SegTabl[11] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};
            uchar DispData[8] = {10,10,10,10,10,10,0,0};

            uchar count; //記數(shù)
            uchar IntCount; //中斷記數(shù)
            uchar keyk1; //k1按下后等待的時(shí)間
            uchar keyk2; //k2按下后等待的時(shí)間

            void delay(uint); //延時(shí)函數(shù)
            void key(void); //按鍵判斷函數(shù)
            void display(void); //掃描顯示函數(shù)

            /****************主程序********************/

            void main(void)
            {
            //**************硬件初始化***********

            //* 使用定時(shí)器T0,定時(shí)模式,工作方式1;晶振頻率f=22.1184MHz-即1S鐘有22118400個``````
            //晶振脈沖,也就是22118400/12=1843200個機(jī)器周期-即1843200個機(jī)器周期就是`````````
            //1S;考慮到單片機(jī)本身設(shè)計(jì)成倍頻方式,所以實(shí)際上1S是3686400個機(jī)器周期。 */`*`

            DIG = 0xff; //關(guān)位碼
            TMOD = 0x01; //選用T0定時(shí)器,T0為定時(shí)方式,工作方式為1````
            TH0 = 0x10; //中斷初值
            TL0 = 0x00; //中斷初值
            EA = 1; //開總中斷
            ET0 = 1; //允許T0中斷
            TR0 = 0; //關(guān)閉定時(shí)器T0

            //**************超級循環(huán)**************

            while(1)
            {
            key(); //調(diào)用按鍵判斷函數(shù)
            display(); //調(diào)用掃描顯示函數(shù)
            }
            }

            /****************按鍵掃描*******************/

            void key(void)
            {
            uchar q,w;

            //******k1按鍵掃描******

            if(k1==0) //判斷k1是否按下
            {
            delay(5); //去抖
            if(k1==0) //在判斷k1是否真的按下
            {
            TR0 = 1; //開啟定時(shí)器0
            keyk1=0; //k1按鍵按下時(shí)間清0
            count++; //k1按下就加一
            while(k1==0) //等待按鍵彈起
            {
            display(); //調(diào)用掃描顯示,讓按鍵進(jìn)入等待時(shí)數(shù)碼管也顯示
            if(keyk1 >= 2) //k1按鍵按下超過1.5秒連續(xù)加一
            {
            if(count!=99) //要顯示的數(shù)超過99就不執(zhí)行下列語句
            {
            for(w=0;w8;w++) //為了使加一的過程變的緩慢一些,以便看的清
            { //如果有需要就改變for語句循環(huán)的次數(shù)
            display( );
            delay(2);
            display( );
            delay(2);
            display( );
            delay(2);
            display( );
            delay(2);
            display( );
            }
            count++; //上面for循環(huán)完畢后記數(shù)加一
            }
            }
            }
            }
            }

            //*************k2按鍵掃描************

            if(k2==0)
            {
            delay(5);
            if(k2==0)
            {
            TR0 = 1;
            keyk2 = 0;
            if(count) //記數(shù)值為0不執(zhí)行減一功能
            count--;
            while(k2==0) //等待按鍵彈起
            {
            display(); //調(diào)用掃描顯示,讓按鍵進(jìn)入等待時(shí)數(shù)碼管也顯示
            if(keyk2 >= 2)
            {
            for(q=0;q8;q++)
            {
            display( );
            delay(2);
            display( );
            delay(2);
            display( );
            delay(2);
            display( );
            delay(2);
            display( );
            }
            if(count) //記數(shù)值為0是不執(zhí)行減一功能
            count--;
            }
            }
            //EA = 0;//關(guān)總中斷
            //ET0 = 0;//禁止T0中斷
            TR0 = 0;//關(guān)閉定時(shí)器T0
            }
            }
            }

            /**************定時(shí)器T0中斷程序****************/

            void IntTimer0(void) interrupt 1
            {
            TH0 = 0x10;
            TL0 = 0x00;
            IntCount++; //中斷記數(shù)
            if(IntCount == 45) //中斷60次為1秒
            {
            IntCount=0;
            keyk1++; //K1加一
            keyk2++; //k2加一
            }
            }

            /****************掃描顯示******************/

            void display(void)
            {
            uchar i;
            uchar scan = 0xfe;
            if(count >= 99) //超過99或者等于99的只顯示99
            count = 99;
            DispData[6] = count/10;
            DispData[7] = count%10;
            for(i=0;i8;i++) //掃描顯示8位
            {
            SEG = SegTabl[DispData[i]]; //輸出顯示碼
            DIG = scan; //掃描位
            delay(2); //延時(shí)
            DIG = 0xff; //關(guān)顯示
            scan = (scan1)|0x01; //掃描下一位
            }
            }

            /**************延時(shí)****************/

            void delay(uint time)
            {
            uint i;
            uint j;
            for(i=0;itime;i++)
            {
            for(j=0;j130;j++);
            }
            }


            關(guān)鍵詞: 51單片機(jī) 按健 加減程序

            評論


            相關(guān)推薦

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

            關(guān)閉