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

          新聞中心

          AVR單片機(jī)密碼鎖程序

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

          這是一款用單片機(jī)實(shí)現(xiàn)的,它分別由硬件16個(gè)、數(shù)碼管以及蜂鳴器組成的。系統(tǒng)正確的初始密碼為0、1、2、3。當(dāng)我們按下按鍵次數(shù)在4次以內(nèi),系統(tǒng)才判斷密碼對(duì)與否,當(dāng)輸入密碼正確時(shí),蜂鳴器報(bào)響起,即表示密碼是正確的,當(dāng)我們按下按鍵的次數(shù)超過(guò)4次,即使按下的密碼正確,蜂鳴器也不響,還有按下密碼順序必須是0、1、2、3,如果按下0、2、1、3或者是其它的,都不能正常開(kāi)蜂鳴器。如果按鍵次數(shù)超過(guò)4次了,密碼就無(wú)法正常輸入了,此時(shí)只要按下第16個(gè)按鍵時(shí),就可以回到初始狀態(tài),即清除我們以前按鍵按下的次數(shù),(因?yàn)槊艽a輸入時(shí)必須在4次以內(nèi)完成的,超過(guò)了4次你怎么輸,也進(jìn)入密碼判斷模式)此時(shí)就可以重新輸入正確的密碼了。另外當(dāng)按下按鍵時(shí),可以在數(shù)碼管上顯示我們按下的數(shù),以方便我們看我們按下的數(shù)是否正確。
          硬件連接:矩陣按鍵接PD口,數(shù)碼管段接PB口,位控制端接PC低4位,蜂鳴器接PA1口。
          以下是完整程序下載地址:http://www.51hei.com/f/mmsavr.rar

          #includeiom16v.h>
          #includemacros.h>
          #define uchar unsigned char
          #define uint unsigned int
          #define setb(val,bitn) (val|=(1(bitn)))//設(shè)置某IO口某位為1,即設(shè)置IO口進(jìn)行位操縱
          #define clr(val,bitn) (val=~(1(bitn)))//設(shè)置某IO口某位為0 即設(shè)置IO口進(jìn)行位操縱
          #define get(val,bitn) (val(1(bitn)))//讀取某位狀態(tài)如if(get(PORTC,7))即判斷PC7口是否為1 即設(shè)置IO口進(jìn)行位操縱
          #pragma data:code//定義程序存在ROM里面
          uchar yin,yin1,yin2,yin3;//4位密碼初始變量
          uchar qing,qing1,qing2,qing3;//4位密碼比較變量
          uchar num;//按鍵按下次數(shù)變量
          uchar temp;//比較標(biāo)志位變量,即按下后比較變量與初始密碼變量比較,如果是相等,則些標(biāo)志位生效,它自動(dòng)變量加1
          const table[]={
          0xc0,0xf9,0xa4,0xb0,0x99,
          0x92,0x82,0xf8,0x80,0x90,
          0x88,0x83,0xc6,0xa1,0x86,
          0x8e,0xff
          };
          /***********************************************/
          /*******************延時(shí)子程序******************/
          /***********************************************/
          void delay(uint z)
          {
          uint x,y;
          for(x=0;x50;x++)
          for(y=0;yz;y++);
          }
          /***********************************************/
          /*****************蜂鳴器響子程序****************/
          /***********************************************/
          void bbt()
          {
          setb(DDRA,1);
          clr(PORTA,1);
          delay(2550);
          setb(PORTA,1);
          delay(2550);
          }
          /***********************************************/
          /*******************顯示子程序******************/
          /***********************************************/
          void xian(uchar num)
          {
          uchar i;
          PORTB=table[num];
          PORTC=0x00;//打開(kāi)位選端
          }
          /***********************************************/
          /***************按鍵按下處理程序***************/
          /***********************************************/
          uchar key_press()
          {
          uchar i;
          DDRD=0XFF;//設(shè)置PD口全為輸出
          PORTD=0XF0;//設(shè)置PD高四位為高電平,以便進(jìn)行判斷
          DDRD=0X0F;//設(shè)置高4位為輸入,低4位為輸出
          i=PIND;//讀出IO口狀態(tài)
          if(i==0XF0)//如果它等于0XF0就執(zhí)返回0
          {
          DDRD=0XFF;//將IO口值讀回來(lái)
          return 0;
          }
          else//否則它就執(zhí)返回1
          {
          DDRD=0XFF;
          return 1;
          }
          }
          /***********************************************/
          /***************按鍵鍵值處理程序***************/
          /***********************************************/
          uchar key_scan()
          {
          uchar key,i=0X7F,j;//將變量I設(shè)置為01111111B
          if(key_press())//判斷按鍵是否被按下了
          {
          delay(10);//如果被按下了,消下抖
          if(key_press())//再次判斷下按鍵是否被按下了
          {

          do//先執(zhí)行一次
          {
          i=(i1|i>>7);/*將變量I內(nèi)容左移1位,11111110
          然后將I右移7位,11111110,即實(shí)現(xiàn)11111110
          11111101 11111011 11110111*/
          PORTD=i;//將移位后的值給PD口
          DDRD=0X0F;//將PD口高位設(shè)為輸入,低位設(shè)為輸出
          key=PIND;//將IO口高位值讀一下
          j=key0XF0;//只需要讀高4位
          }
          while(j==0XF0);//如果按鍵沒(méi)有按下,則再執(zhí)行上面的do語(yǔ)句

          while(key_press());//如果有按下則釋放一下
          num++;//計(jì)數(shù)改變變量值
          //if(num>3)
          //num=0;

          蜂鳴器相關(guān)文章:蜂鳴器原理

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: AVR 密碼鎖 矩陣鍵盤(pán)

          評(píng)論


          相關(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); })();