<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機實現(xiàn)按健連加減程序

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

          作者: 時間:2012-10-08 來源:網(wǎng)絡(luò) 收藏
          ************************************************************************/
          /********按鍵記數(shù)0-99 長按鍵連續(xù)加或者連續(xù)減實驗******************/
          /********按k1鍵加一,超過一定時間連續(xù)加一,加到99后k1在按無效*******/
          /********按k2鍵減一,超過一定時間連續(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按下后等待的時間
          uchar keyk2; //k2按下后等待的時間

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

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

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

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

          DIG = 0xff; //關(guān)位碼
          TMOD = 0x01; //選用T0定時器,T0為定時方式,工作方式為1````
          TH0 = 0x10; //中斷初值
          TL0 = 0x00; //中斷初值
          EA = 1; //開總中斷
          ET0 = 1; //允許T0中斷
          TR0 = 0; //關(guān)閉定時器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; //開啟定時器0
          keyk1=0; //k1按鍵按下時間清0
          count++; //k1按下就加一
          while(k1==0) //等待按鍵彈起
          {
          display(); //調(diào)用掃描顯示,讓按鍵進入等待時數(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)用掃描顯示,讓按鍵進入等待時數(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)閉定時器T0
          }
          }
          }

          /**************定時器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); //延時
          DIG = 0xff; //關(guān)顯示
          scan = (scan1)|0x01; //掃描下一位
          }
          }

          /**************延時****************/

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


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

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();