久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 51單片機(jī)鑰匙密碼鎖,結(jié)課時(shí)做的一個(gè)作業(yè),對電子密碼鎖做了一些改進(jìn) [打印本頁]

作者: 寒空俗火    時(shí)間: 2018-4-15 16:27
標(biāo)題: 51單片機(jī)鑰匙密碼鎖,結(jié)課時(shí)做的一個(gè)作業(yè),對電子密碼鎖做了一些改進(jìn)
#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "i2c.h"       
#include "XPT2046.h"
#include "lcd.h"
#define GPIO_KEY P1
typedef unsigned int u16;          //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;


u8 mimaweishu=0;//用于判斷輸入密碼位數(shù)

u8 count1,count2,count3,count4;//指針標(biāo)志
u8 a=0;//密碼錯(cuò)誤次數(shù)
u8 p,q;
u8 temp;
bit querenwei=0;//確認(rèn)鍵標(biāo)志位
bit mimawei=0;//用于確認(rèn)密碼是否正確
bit FANGSHI=0;//用于確認(rèn)開鎖時(shí)是否需要密碼
bit k=1;//判斷繼電器開關(guān)狀態(tài)1為關(guān) 0為開
sbit jidianqi=P2^2;
sbit red=P2^3;
sbit bell=P2^4;//繼電器,蜂鳴器,警示燈控制

u16 yaoshi=0;  //用于判斷鑰匙狀態(tài),為0時(shí)鑰匙插入并轉(zhuǎn)到底
float dyz;
int tem;
int d0;
int d1;
int d2;
int d3;  //d0-d3是電位AD值處理過后的四位數(shù)值,用于判斷是否插入鑰匙并轉(zhuǎn)到底

u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 mima[8];//初始密碼存儲數(shù)組
u8 shurumima[30];//輸入密碼存儲數(shù)組
u8 xitongmima[8]={8,8,8,8,8,8,8,8};//系統(tǒng)密碼數(shù)組

u8 code table1[]="input the passco";
u8 code table2[]="de:     --------";
u8 code table3[]="*";
u8 code table4[]="right   (^_^)   ";
u8 code table5[]="first  error!!!!";
u8 code table6[]="second error!!!!";
u8 code table7[]="third error see ";
u8 code table8[]="u tomorrow (^_^)";
u8 code table9[]="     welcom     ";
u8 code table10[]="     (^_^)      ";
u8 code table11[]="   no passcode  "; //指令數(shù)組

/*******************************************************************************
* 函 數(shù) 名         : delay
* 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
*******************************************************************************/
void delay2(u8 x)
{
        u8 a,b;
        for(a=x;a>0;a--)
         for(b=100;b>0;b--);
}

void delay(u16 z)
{
        u16 x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void delay0(u16 r)
{
        while(r--);

}
/*******************************************************************************
* 函 數(shù) 名         : yaoshichuli
* 函數(shù)功能                   : 用于轉(zhuǎn)換鑰匙轉(zhuǎn)動所改變的電位器AD值
*******************************************************************************/
void yaoshichuli()
{
        u16 temp;
        static u8 z;
        if(z==50)
        {
                z=0;
                temp = Read_AD_Data(0x94);                //   AIN0 電位器
                dyz=(float)temp/4096.*5;
                tem=dyz*1000;
                d0=tem/1000;
                d1=tem%1000/100;
                d2=tem%100/10;
                d3=tem%10;
                yaoshi=d0+d1;
        }
  z++;
}


void Timer1Init()
{
        TMOD|=0X10;

        TH1=(65536-50000)/256;       
        TL1=(65536-50000)%256;       
        ET1=1;
        EA=1;
        TR1=0;                       
}
/*******************************************************************************
* 函 數(shù) 名         : mimabijiao
* 函數(shù)功能                   : 用于確認(rèn)密碼是否正確?
*******************************************************************************/
bit mimabijiao()
{
        bit i;
        u8 m;
        for(m=0;m<8;m++)
  {
      if(mima[m]==shurumima[m])
            i=1;
         else
        {
              i=0;
               m=8;
         }
   }
        return i;

}

///**********************************LCD跟隨密碼顯示’*‘函數(shù)**************************************
void lcd_display()
{
  u8 i=0;
  LcdWriteCom(0x80+0x40+8);
  for(i=0;i<mimaweishu;i++)
  {
    LcdWriteData(table3[0]);
  }
}
/*******************************************************************************
* 函 數(shù) 名         : k1-k16chuli
* 函數(shù)功能                   : 處理各個(gè)按鍵功能
k1-k10為數(shù)字:0-9
k11 k12 為無效鍵  k13用于取消密碼鎖  k14為關(guān)鎖鍵  k15 k16分別是確認(rèn)鍵和取消鍵
*******************************************************************************/
void k1chuli()
{
        shurumima[mimaweishu]=0;
        mimaweishu++;
}

void k2chuli()
{
        shurumima[mimaweishu]=1;
        mimaweishu++;
}

void k3chuli()
{
        shurumima[mimaweishu]=2;
        mimaweishu++;
}

void k4chuli()
{
        shurumima[mimaweishu]=3;
        mimaweishu++;
}

void k5chuli()
{
        shurumima[mimaweishu]=4;
        mimaweishu++;
}

void k6chuli()
{
        shurumima[mimaweishu]=5;
        mimaweishu++;
}

void k7chuli()
{
        shurumima[mimaweishu]=6;
        mimaweishu++;
}

void k8chuli()
{
        shurumima[mimaweishu]=7;
        mimaweishu++;
}

void k9chuli()
{
        shurumima[mimaweishu]=8;
        mimaweishu++;
}

void k10chuli()
{
        shurumima[mimaweishu]=9;
        mimaweishu++;
}

void k11chuli()
{
        shurumima[mimaweishu]=10;
        mimaweishu++;
}

void k12chuli()
{
        shurumima[mimaweishu]=11;
        mimaweishu++;
}
//方式改變鍵每按一次方式轉(zhuǎn)換一次,只有兩種方式
void k13chuli()
{
        if(a==0&&(yaoshi==0))
        {
        FANGSHI=~FANGSHI;
        }                //修改.............................
        if(FANGSHI==1)
        {
                LcdWriteCom(0x01);
                LcdWriteCom(0x80);
                for(count3=0;count3<16;count3++)
     {
       LcdWriteData(table11[count3]);        //????,?? first erro
                   delay(5);
     }
        }
        else if(FANGSHI==0)
        {
                LcdWriteCom(0x01);
    LcdWriteCom(0x80);
    for(count3=0;count3<16;count3++)
       {
         LcdWriteData(table1[count3]);      
        }
     LcdWriteCom(0x80+0x40);
     for(count3=0;count3<16;count3++)
      {
       LcdWriteData(table2[count3]);      
       }
        }
}
void k14chuli()
{
        jidianqi=1;
        k=1;
}
//確認(rèn)鍵函數(shù)****************************************************、//
void k15chuli()
{
        querenwei=1;
        if(mimaweishu==8)
        {
                mimawei=mimabijiao();
        }
        else
        {
                mimawei=0;
        }
        if(querenwei==1)
        {
                querenwei=0;
                mimaweishu=0;
       
          for(count3=0;count3<8;count3++)
    {        
       delay(5);
       shurumima[count3]=0x0f;               
    }  
                TR1=1;
                count1=0;
                 if(mimawei==1)
     {        
           a=0;
           jidianqi=0;
                             k=0;
           mimawei=0;                         
           LcdWriteCom(0x01);
           LcdWriteCom(0x80);
           for(count3=0;count3<16;count3++)
           {
              LcdWriteData(table4[count3]);      
               delay(5);
            }
      }
                 else
      {   
          mimaweishu=0;
          red=0;
          bell=0;//開啟警示燈和電鈴
                                  delay0(100);
          a++;
         if(a==1)
          {
           for(count3=0;count3<8;count3++)
                  {        
                      delay(5);
                      shurumima[count3]=0x0f;               
                   }
             LcdWriteCom(0x01);                                                                                
             LcdWriteCom(0x80);
            for(count3=0;count3<16;count3++)
                     {
                         LcdWriteData(table5[count3]);      
                         delay(5);
                      }
            TR1=1;
           }
                                        if(a==2)
          {
           for(count3=0;count3<8;count3++)
                  {        
                      delay(5);
                      shurumima[count3]=0x0f;               
                   }
             LcdWriteCom(0x01);                                                                                
             LcdWriteCom(0x80);
            for(count3=0;count3<16;count3++)
                     {
                         LcdWriteData(table6[count3]);      
                         delay(5);
                      }
            TR1=1;
           }
                                        if(a==3)
          {
           for(count3=0;count3<8;count3++)
                  {        
                      delay(5);
                      shurumima[count3]=0x0f;               
                   }
             LcdWriteCom(0x01);                                                                                
             LcdWriteCom(0x80);
            for(count3=0;count3<16;count3++)
                     {
                         LcdWriteData(table7[count3]);        
                         delay(5);
                      }
                                                LcdWriteCom(0x80+0x40);
            for(count3=0;count3<16;count3++)
                     {
                         LcdWriteData(table8[count3]);      
                         delay(5);
                      }
            TR1=0;
           }



      }
  }
}

void k16chuli()
{
        mimaweishu=0;
        LcdWriteCom(0x80);                                          
  for(count3=0;count3<16;count3++)
  {
        LcdWriteData(table1[count3]);              
        delay(5);
  }
  LcdWriteCom(0x80+0x40);
  for(count3=0;count3<16;count3++)
  {
        LcdWriteData(table2[count3]);      
        delay(5);
        shurumima[count3]=0x0f;                       
  }

}
//**************************************************第一行掃描********************************
void key_scan()
{
GPIO_KEY=0XFE;
temp=GPIO_KEY&0Xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
{
temp=GPIO_KEY;
switch(temp)
{
case 0xee:
k1chuli();
break;

case 0xde:
k2chuli();
break;

case 0xbe:
k3chuli();
break;

case 0x7e:
k4chuli();
break;
}
while(temp!=0xf0)
{
temp=GPIO_KEY&0xf0;
        red=0;
}
}
}
GPIO_KEY=0xfd;
temp=GPIO_KEY;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
{
temp=GPIO_KEY;
switch(temp)
{
case 0xed:
k5chuli();
break;

case 0xdd:
k6chuli();
break;

case 0xbd:
k7chuli();
break;

case 0x7d:
k8chuli();
break;
}
while(temp!=0xf0)
{
temp=GPIO_KEY;
temp=temp&0xf0;
}
}
}

GPIO_KEY=0xfb;
temp=GPIO_KEY;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
{
temp=GPIO_KEY;
switch(temp)
{
case 0xeb:
k9chuli();
break;

case 0xdb:
k10chuli();
break;

case 0xbb:
k11chuli();
break;

case 0x7b:
k12chuli();
break;
}
while(temp!=0xf0)
{
temp=GPIO_KEY;
temp=temp&0xf0;
}
}
}

GPIO_KEY=0xf7;
temp=GPIO_KEY;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
{
temp=GPIO_KEY;
switch(temp)
{
case 0xe7:
k13chuli();
break;

case 0xd7:
k14chuli();
break;

case 0xb7:
k15chuli();
break;

case 0x77:
k16chuli();
break;
}
   while(temp!=0xf0)
   {
      temp=0xf7;
      temp=temp&0xf0;
    }
   }
}
}

//用于無鑰匙工作方式時(shí)掃描按鍵,專門改變工作方式無其他功能
void key_scan1()
{
        u16 temp;
        P1=0xf7;
  temp=P1;
  temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(100);
                if(temp!=0xf0)
                {
                        temp=P1;
                        if(temp==0xe7)
                        {
                                k13chuli();
                        }
                }
        }
}
//初始化函數(shù),集合定時(shí)器,LCD顯示,初始顯示,以及各種變量希望的初始值
void chushihua()
{
        u8 i;
        Timer1Init();
        LcdInit();
              for(i=0;i<8;i++)
        {
                At24c02Write(i,xitongmima[i]);
                delay2(100);
        }
        for(i=0;i<8;i++)
        {
                mima[i]=At24c02Read(i);
                delay(5);
        }
        count1=0;
        count3=0;
        jidianqi=1;
        k=1;
  red=1;
  bell=1;
  p=2;
  q=2;
  a=0;               
  LcdWriteCom(0x80);
                for(count3=0;count3<16;count3++)
                        {
                                LcdWriteData(table9[count3]);      
                        }
                LcdWriteCom(0x80+0x40);
                for(count3=0;count3<16;count3++)
                        {
                                LcdWriteData(table10[count3]);      
                        }                               
}
void chuli()
{
        if((yaoshi!=0)&&(a!=3))
                {
                        q=2;
                        for(;p>1;p--)
                        {
                          LcdWriteCom(0x01);
        LcdWriteCom(0x80);
        for(count3=0;count3<16;count3++)
        {
          LcdWriteData(table9[count3]);      
        }
        LcdWriteCom(0x80+0x40);
        for(count3=0;count3<16;count3++)
        {
         LcdWriteData(table10[count3]);      
        }
                  }
                        mimaweishu=0;
                }
                else
                {
                          p=2;
                    if(FANGSHI==1)
                    {
                                 if(yaoshi==0&&(a!=3))
                                 {
                                           jidianqi=0;
                                 }
                                 key_scan1();
                     }
                     else if(FANGSHI==0)
                     {
                                  if(yaoshi==0&&(a!=3))
                                  {
                                            // key_scan();
                                       // lcd_display();   
                                                                       
                                                                        if(mimaweishu==0)
                                        {
                                            if(k==1)  
                                                  {
                                                                                                                for(;q>1;q--)
                                                                                                                {
                                                           LcdWriteCom(0x01);
                              LcdWriteCom(0x80);
                                for(count3=0;count3<16;count3++)
                                  {
                                      LcdWriteData(table1[count3]);      
                                  }
                                   LcdWriteCom(0x80+0x40);
                               for(count3=0;count3<16;count3++)
                                 {
                                 LcdWriteData(table2[count3]);      
                                 }
                                                                                                                        }
                                             }
                                        }
                                        key_scan();
                                        lcd_display();
                             }                               
           }         
        }       
}


void main()
{       
        chushihua();
        while(1)
        {
                yaoshichuli();
          chuli();       
  }
}
//****************************************定時(shí)器1中斷函數(shù)*****************************
void Timer1() interrupt 3
{        

        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        if(count1<20)
        {
                count1++;
        }
        else                                                        
        {
                TR1=0;
                count1=0;
                mimawei=0;

                red=1;
                bell=1;
                                        if(a!=0)
                                        {
                LcdWriteCom(0x01);
                LcdWriteCom(0x80);
                for(count3=0;count3<16;count3++)
                        {
                                LcdWriteData(table1[count3]);      
                        }
                LcdWriteCom(0x80+0x40);
                for(count3=0;count3<16;count3++)
                        {
                                LcdWriteData(table2[count3]);      
                        }
                                        }
                                        else
                                        {
                                                    LcdWriteCom(0x01);
                LcdWriteCom(0x80);
                for(count3=0;count3<16;count3++)
                        {
                                LcdWriteData(table9[count3]);      
                        }
                LcdWriteCom(0x80+0x40);
                for(count3=0;count3<16;count3++)
                        {
                                LcdWriteData(table10[count3]);      
                        }
                                        }
        }

}


6、鑰匙電子鎖.zip

82.82 KB, 下載次數(shù): 8, 下載積分: 黑幣 -5






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: a级片网站 | 日本a视频 | 免费麻豆视频 | 国产成人综合一区二区三区 | 成人在线观看免费爱爱 | 狠狠婷婷综合久久久久久妖精 | 一区二区三区国产 | 日韩在线播放av | 久久99精品久久久久子伦 | 欧美精品综合 | 免费h视频 | 免费一级欧美在线观看视频 | 亚洲天堂日韩精品 | 欧美视频第三页 | 亚洲一区二区av | 欧美日韩国产一区二区 | 亚洲国产精品日韩av不卡在线 | 午夜爽爽爽男女免费观看影院 | 久久成人精品 | 成人在线精品视频 | 国产精品久久久久久妇女6080 | av资源网站 | 国产中文在线观看 | 999视频在线播放 | 中文成人无字幕乱码精品 | 成人精品国产一区二区4080 | 在线视频一区二区三区 | 久久久做 | 91在线影院 | 精品1区2区 | 精品日韩一区二区 | 亚洲国产精品suv | 在线国产99 | 精品久久网 | 最新日韩精品 | 欧美视频中文字幕 | 国产午夜精品一区二区三区 | 在线不卡视频 | 亚洲综合一区二区三区 | 久久国内 | 精品在线看 |