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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14733|回復: 16
打印 上一主題 下一主題
收起左側

在家無聊自己給家里做個門禁

  [復制鏈接]
跳轉到指定樓層
樓主
ID:3721 發表于 2015-1-5 14:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
由于上個月丟了家鑰匙,今天無聊中沒啥事兒,就想自己動手設計個自己用的門禁來玩,至少鑰匙丟了也不愁了,還可以一卡通。由于基本上目前沒硬件來設計,那就先用軟件來模擬一下吧,到時感覺不錯再買元器件。
    今天估計也做不了什么,就大概分析下機器的一些東東吧。
    首先考慮使用的卡的類型,是使用id卡還是ic卡還是二代身份證呢?身份證嘛怕丟,不能老是隨身帶。id卡和ic卡都行,不過ic卡的讀頭要貴很多又不方便自做,所以最后決定用id卡吧,就算自己做也沒什么,大不了買個芯片讀曼徹斯特*碼也應該容易,況且讀卡器,卡片也便宜嘛。
    id讀卡器到時買最便宜的就行了,不用多想什么了,只要記得到時搞清楚到手的參數就行,不要拿個維根32的當成維根26的來用,就可能走很多彎路了。
    主控芯片就用89s52吧,二個外部中斷,二個定時中斷,32個I/O應該夠用了。
    存儲器的話只存開門卡號和密碼等數據,不用太大,就用24c02夠了,幾十個用戶容量夠家里用了。
    其他的配件都是小件散件,用到時再考慮吧。
    用電腦做上位機進行聯網遠程開門,加卡刪卡等操作,電腦軟件以后做好下位機后再寫了,唉,英語不行,VB,DP等流行軟件都不能用,看來只能用易語言了。
    現在到晚上了,今天白天已經畫好了proteus圖,大概說一一分布:1,電源12v輸入12v/5v輸出。2,主控P3口控制繼電器蜂鳴器LED輸出和曼碼,IIC,中斷(讀卡器輸入)輸入和串口通訊。P2,P1口留做讀卡器輸入(用查詢法來讀數據)和信號輸出。P0口做鍵盤輸入了。主控就暫時就樣分布到時需要時再改吧。
今天就先做到就里,任務才剛剛開始,單片機程序估計要幾天才能寫好吧。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:3721 發表于 2015-1-5 14:08 | 只看該作者
今天開始寫下位機也就是89s52的程序。一個早上才搞定鍵盤掃描程序,程序基本上正確,只是明明加了松開檢測了,怎么有時在按下時會發送呢。實在是檢查不出哪兒的問題,也許是模擬軟件的問題吧。
    現在突然想到怎么先寫鍵盤程序呢,應該寫重要的先才對啊,不然到最后重要的部分沒寫成那不是浪費很多精力?但是沒有實際硬件做起來費勁,串口通訊不知怎么用軟件模擬,也就是因為這樣早上的鍵盤程序都是靠軟件調試和蜂鳴器來提示來叛斷是否正確,所以做起來很慢。如果有終端來顯示那就方便多了。不想買液晶顯示,雖然1602液晶應該沒多少錢但是怕以后用不到還是用電腦來做顯示吧,接上串口來通訊就行。但問題是現在要有芯片,數據線,基本外圍元件和洞洞板等等才行。家里街上和工業城市不一樣,東西應該不好買,到市區里去看看吧,不行再淘寶了,馬上去了……
   貼上我的鍵盤程序:
/*////////////////////////////////////
函數原型: uchar key(void)
函數說明:鍵盤掃描
版本:V1.0.0        
程序員:LIY12586
////////////////////////////////////*/
uchar key(void)
{
   uchar temp,number;
   P0=0x0f;
  
   if(P0!=0x0f)
   {
      P0=0xfe;
      if(P0!=0xfe)
       {      
         temp=P0;
         switch (temp)
         {             //11110000
            case 0xee:    //01111110
               number=4;
              
               break;
            case 0xde:
               number=3;
            
               break;
            case 0xbe:
               number=2;
              
               break;
            case 0x7e:
               number=1;
              
               break;
         }
      
         while(P0!=0xfe);
         sound(1);
         return number;
       }
      P0=0xfd;
      if(P0!=0xfd)
       {      
         temp=P0;
         switch (temp)
         {
            case 0xed:
               number=8;
               break;
            case 0xdd:
               number=7;
               break;
            case 0xbd:
               number=6;
               break;
            case 0x7d:
               number=5;
               break;
         }
         while(P0!=0xfd);
         sound(1);
         return number;
       }
      P0=0xfb;
       //temp=P0;
      //temp=temp|0xf0;
      if(P0!=0xfb)
       {      
         temp=P0;
         switch (temp)
         {
            case 0xeb:
               number=12;
               break;
            case 0xdb:
               number=11;
               break;
            case 0xbb:
               number=10;
               break;
            case 0x7b:
               number=9;
               break;
         }
         while(P0!=0xfb);
         sound(1);
         return number;
       }
      P0=0xf7;
       //temp=P0;
      //temp=temp|0xf0;
      if(P0!=0xf7)
       {      
         temp=P0;
         switch (temp)
         {
            case 0xe7:
               number=16;
               break;
            case 0xd7:
               number=15;
               break;
            case 0xb7:
               number=14;
               break;
            case 0x77:
               number=13;
               break;
         }
         while(P0!=0xf7);
         sound(1);
         return number;
       }      
   }return 0;
}
回復

使用道具 舉報

板凳
ID:3721 發表于 2015-1-5 14:09 | 只看該作者
終于完成了韋根26查詢法的程序了,IIC和串口通詢昨天改好,因為現在沒做到聯網部分,所以沒做聯網方面的通訊協議和程序。
串口通訊程序
void Init(void)
{
  
   TMOD|=0x21;//定時器1為方式2,定時器0方式1
   TL1=0xfd;  //初始值設置波特率為9600    //
   TH1=0xfd;
   ET0=1;
   TR1=1;     //開定時器1
   REN=1;   //允許接收數據//
   SM0=0;
   SM1=1;
   EA=1;      //開所有中斷
   ES=1;

        
}
void SEND(unsigned char *a)
{
      uchar b;
      for(b=0;b<8;b++)
      {
        
         SBUF=*a;
          while(TI==0);
         TI=0;
         a=a+1;
        
      }
}
IIC總線24cxx讀寫通用程序
#include<config.h>
//#include<delay.h>
#ifndef MCU_MODEL
   #define  MCU_MODEL 51   //<----在此設定mcu類型, 51代表51系列; avr代表avr系列
#endif

//-----------------------51類MCU-------------------------------------------
#if MCU_MODEL==51  

//   #include<reg51.h>      //在此設定51類MCU的頭文件
//   #include<intrins.h>     //_nop_()函數需要
//   #include"xd.h"
//   #include"xdprj.h"
  
   //---------定義I2總線端口, 可根據實際使用改變-----------
   sbit SCL=P2^0;      //I2總線時鐘線
   sbit SDA=P2^1;      //I2總線數據線
  
   #define SCL_L SCL=0
   #define SCL_H SCL=1
   #define SDA_L SDA=0
   #define SDA_H SDA=1
  
   #define SDA_TO_IN      //為配合avr共用次程序而空定義的宏
   #define SDA_TO_OUT      //為配合avr共用次程序而空定義的宏
  
   #define SDA_IF_L SDA==0   //如果sda為低
   #define SDA_IF_H SDA==1   //如果sda為高
  
   //------------------------------------------------------
   #define DELAY_us _nop_(); _nop_(); _nop_(); _nop_(); _nop_()   //延時用,如果要加長延時,可增加或減少 _nop_();
  
//------------------------avr類MCU-----------------------------------------
#elif MCU_MODEL==avr  

   #include<iom16v.h>      //在此設定avr類MCU的頭文件
   #include<macros.h>
//   #include"xd.h"
//   #include"xdprj.h"
  
   //-----定義I2總線端口, 可根據實際使用改變----
   #define SCL_L PORTC&=~BIT(0)   //I2總線時鐘線
   #define SCL_H PORTC|=BIT(0)
   #define SDA_L PORTC&=~BIT(1)   //I2總線數據線
   #define SDA_H PORTC|=BIT(1)
  
   #define SDA_TO_IN DDRC&=~BIT(1); _NOP()   //設數據線位輸入
   #define SDA_TO_OUT DDRC|=BIT(1); _NOP()   //設數據線位輸出
  
   #define SDA_IF_L (PINC&BIT(1))==0      //如果sda為低
   #define SDA_IF_H (PINC&BIT(1))==BIT(1)   //如果sda為高
   //-------------------------------------------

   #define DELAY_us tus(7)   //avr單片機在晶振為8MHz時,延時5us, 可根據實際情況改變
  
#endif
//---------------------------------------------------------------------------



//------在此設定芯片型號------
#define e2prom 2      // <---在此設定芯片型號, 1代表24C01; 16代表24C16; 512代表24C512

#if e2prom==1
   #define PAGE_SIZE 8       //芯片頁寫緩沖器大小,單位:字節/
   #define SIZE 0x007f       //   芯片內含有多少個8位的字節/
#elif e2prom==2
   #define PAGE_SIZE 8
   #define SIZE 0x00ff
#elif e2prom==4
   #define PAGE_SIZE 16
   #define SIZE 0x01ff
#elif e2prom==8
   #define PAGE_SIZE 16
   #define SIZE 0x03ff
#elif e2prom==16
   #define PAGE_SIZE 16
   #define SIZE 0x07ff
#elif e2prom==32
   #define PAGE_SIZE 32
   #define SIZE 0x0fff
#elif e2prom==64
   #define PAGE_SIZE 32
   #define SIZE 0x1fff
#elif e2prom==128
   #define PAGE_SIZE 64
   #define SIZE 0x3fff
#elif e2prom==256
   #define PAGE_SIZE 64
   #define SIZE 0x7fff
#elif e2prom==512
   #define PAGE_SIZE 128
   #define SIZE 0xffff
#endif
//--------------------------

//--------在此設定芯片地址-------
#define W_ADD_COM 0xa0   //寫字節命令及器件地址(根據地址實際情況改變), 1010 A2 A1 A0 0
#define R_ADD_COM 0xa1   //讀命令字節及器件地址(根據地址實際情況改變), 1010 A2 A1 A0 1
//-------------------------------


//-----在此改變預置錯誤號-----
//#define I2C_ERR   ERR_10   //寫字節命令及器件地址錯, 在此也就是讀寫器件錯!!
//---------------------------

//-------------------------------以下為其它I2總線器件可調用的函數--------------------------
//起始信號
void i2cstart(void)
{  
   //SCL_L;
   //DELAY_us;
    SDA_H;        //發送起始條件的數據信號*/
   DELAY_us;
    SCL_H;
   DELAY_us;   //起始條件建立時間大于4.7us,延時*/
    SDA_L;       //發送起始信號*/
   DELAY_us;  //起始條件鎖定時間大于4μs*
    SCL_L;       //鉗住I2C總線,準備發送或接收數據/
   DELAY_us;
}  

//停止信號 /
void i2cstop(void)
{  
   //SCL_L;
   //DELAY_us;
    SDA_L;        //發送結束條件的數據信號*
   DELAY_us;   
    SCL_H;        
   DELAY_us;     //    結束條件建立時間大于4μs
   SDA_H;        //   發送I2C總線結束信號*
   DELAY_us;
}
//等待從器件應答/
void i2cask()  
{
   uchar i;
   SCL_H;
   DELAY_us;
   while((SDA==1)&&(i<250))i++;
   SCL_L;
   DELAY_us;
}
/*/MCU應答信號/
void i2cack()
{
  
   SDA_L;
   DELAY_us;
   SCL_H;
   DELAY_us;
   SCL_L;
   DELAY_us;
}              */
//i2c讀要調用的函數
//從器件讀出一個字節
uchar i2crd(void)
{   uchar i,temp;
//i2c讀要調用的函數
//從器件讀出一個字節
uchar i2crd(void)
{   uchar i,temp;
  
     SCL_L; DELAY_us;     // 準備接收數據位*時鐘低電平周期大于4.7μs
     SDA_H; DELAY_us;    //置數據線接上內部上拉(數據輸入方式),此為必須/
              
    for(i=0;i<8;i++)
    {   
      SCL_H;           //   置時鐘線為高使數據線上數據有效/
      DELAY_us;
        temp<<=1;
        
        SDA_TO_IN;         //如果是avr單片機,就設SDA引腳位輸入狀態
        
      if(SDA_IF_H)
      temp=temp+1; //讀數據位,接收的數據位放入temp中;
      SCL_L;
        DELAY_us;
        
        SDA_TO_OUT;         //如果是avr單片機,就設SDA引腳位輸出狀態
   }
//    SCL_L;
//   DELAY_us;      //主器件應答脈沖
//   SDA_L; DELAY_us;
//   SCL_H; DELAY_us;
    return(temp);
}//把一個字節數據輸入器件,并以收到應答信號為止/
//寫入成功返回1,失敗返回0
uchar i2cwt(uchar a)
{ uchar i;

for(i=0;i<8;i++) //要寫入的數據長度為8位*
{
SCL_L;
DELAY_us;
if((a<<i)&0x80) // 判斷發送位(按位與,只要最高位為1則真)
SDA_H;
else
SDA_L;
DELAY_us;
SCL_H; //置時鐘線為高,通知被控器開始接收數據位*
DELAY_us; //保證時鐘高電平周期大于4μs*
}
SCL_L;
DELAY_us;
SDA_H; // 8位發送完后釋放數據線,準備接收應答位*
DELAY_us;
SCL_H;
DELAY_us;

SDA_TO_IN; //如果是avr單片機,就設SDA引腳位輸入狀態/

if(SDA_IF_L) //測試有無應答/
{ SDA_TO_OUT;
return(1); //有應答返回1
}
else
{ SDA_TO_OUT;
return(0); //無應答
}
}
void wt24c(uchar address,uchar date)
{

i2cstart();
i2cwt(0xa0);
i2cask();
i2cwt(address);
i2cask();
i2cwt(date);
i2cask();
i2cstop();
}
uchar rd24c(uchar address)
{
uchar temp;
i2cstart();
i2cwt(0xa0);
i2cask();
i2cwt(address);
i2cask();
i2cstart();
i2cwt(0xa1);
i2cask();
temp=i2crd();
return temp;
i2cstop();
}
查詢法讀韋根26程序
idata unsigned char WGDATA[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//接收韋根數據26位
idata unsigned char WG[8]={0xaa,0xbb,0,0,0,0,0xcc,0xdd};//存韋根ID卡卡號的HID和PID碼,其中HID碼為8位即一字節,PID碼16位兩字節
uchar a,x,j,LL,II,YY;

void ys100us(uint u)
{ uint y;
uchar x;
for(y=u;y>0;y--)
{

for(x=20;x>0;x--)
_nop_();

}


}





void DATA(void)
{
if(DATA0!=DATA1)
{
if(DATA0==0)
{
WGDATA[Cnt]=0;

if(Cnt==25)
a=1;
Cnt++;
ys100us(15);
}
if(DATA1==0)
{
WGDATA[Cnt]=1;

if(Cnt==25)
a=1;
Cnt++;
ys100us(15);
}


}

}
bit re(void)
{
if(Read_Card())
{
WG[3]=WGDATA[1];
WG[4]=WGDATA[2];
WG[5]=WGDATA[3];
return 1;
// SEND(&WG[0]);
}
DATA();
if(a==1)
{

EA=0; //關中斷以免外部中斷的干擾
a=0;
Cnt=0;
// rd24c(ptr,0,10);
// WG[0]=*ptr;
for(x=1;x<9;x++)
LL=(LL<<1)|WGDATA[x];
for(x=9;x<17;x++)
II=(II<<1)|WGDATA[x];
for(x=17;x<25;x++)
YY=(YY<<1)|WGDATA[x];
//WG[0]=rd24c(0);
//ysms(100);
WG[3]=LL;
WG[4]=II;
WG[5]=YY;
EA=1;
// SEND(&WG[0]);
return 1;
}
return 0;
}
回復

使用道具 舉報

地板
ID:3721 發表于 2015-1-5 14:10 | 只看該作者
寫好的部分程序
累啊!腦力勞動比體力勞動要累多了!寫得并調式好幾個程序花了我不少精力,打字都嫌累了,貼上幾個程序:
/*////////////////////////////////////
函數原型:
函數說明:串口接收中斷
版本:V1.0.0
程序員:LIY12586
////////////////////////////////////*/
void ser() interrupt 4
{
   RI=0;
   z=SBUF;
   ai=1;
  
}
/*////////////////////////////////////
函數原型:void sound(uchar a)
函數說明:蜂鳴器發聲,a為需要發出多少次DIDI音
版本:V1.0.0
程序員:LIY12586
////////////////////////////////////*/
void sound(uchar a)
{
    uchar x,y;
   for(;a>0;a--)
   {
      for(x=255;x>0;x--)
      {
         beep=0;
         for(y=150;y>0;y--)
         beep=1;
         beep=0;
       }
       ysms(500);
    }  
}
void ysms(unsigned int x)
{
   unsigned int a;
   unsigned int b;
   for(a=x;a>0;a--)
   {
       for(b=50;b>0;b--);
   }
}
/*////////////////////////////////////
函數原型:void inscard(void)
函數說明:存入卡號到EEPROM
版本:V1.0.0
程序員:LIY12586
////////////////////////////////////*/
void inscard(void)
{
    while(1)
   {
       if(re())
      {
          if(iscard()==0)//如果沒有這卡號/
         {
            uchar a,b;
        
            b=ckdz();     //查找空置/
            for(a=3;a<6;a++)
            {
               wt24c(b,WG[a]);
               ys100us(1000);
               b++;
                        
            }
         //   wt24c(0,b);
            ys100us(1000);
            sound(1);
            break;
         }
         sound(2);
         break;
      }
      if(key()==12)
      {
         sound(1);
         break;
      }
  
   }
}

/*////////////////////////////////////
函數原型:void delcard(void)
函數說明:從EEPROM中刪除卡號
版本:V1.0.0
程序員:LIY12586
////////////////////////////////////*/
void delcard(void)
{
    while(1)
   {
       if(re())
      {
          if(iscard()!=0)   //如果有這張卡號/
         {
            uchar a,b;
        
            b=iscard();     //查找空置/
            for(a=0;a<3;a++)
            {
               wt24c(b,0xff);
               ys100us(1000);
               b=b+1;
                  
            }
         //   wt24c(0,b);
            ys100us(1000);      
            sound(1);
            break;
         }
         sound(2);
         break;
      }
      if(key()==12)
      {
         sound(2);
         break;
      }
   }
}
/*////////////////////////////////////
函數原型:uchar iscard(void)
函數說明:查找是否有此卡
版本:V1.0.0
程序員:LIY12586
////////////////////////////////////*/
uchar iscard(void)
{
   
       uchar a,b;
      for(a=8;a<128;a++)
      {
         if(rd24c(a)==WG[3])
         {
            a++;
            if(rd24c(a)==WG[4])
            {
               a++;
               if(rd24c(a)==WG[5])
               {
                  b=a-2;
                  return b;
               }
            }      
         }
         if(a==127)return 0;
       }
  
}
/*////////////////////////////////////
函數原型:uchar ckdz(void)
函數說明:查找EEPROM的空白位置地址
版本:V1.0.0
程序員:LIY12586
////////////////////////////////////*/
uchar ckdz(void)//查空地址/
{
    uchar a,b,c;
   for(a=2;a<126;a++)
   {
      c=a;
      c++;
      if(rd24c(a)==0xff)
      {
         a++;
         if(rd24c(a)==0xff)
         {
            a++;
            if(rd24c(a)==0xff)
            {
               b=a-2;
               return b;
            }
         }      
      }
      if(c==126)return 0xff;
    }
}
/*////////////////////////////////////
函數原型:void readcard(void)
函數說明:讀卡正確
版本:V1.0.0
程序員:LIY12586
////////////////////////////////////*/
void readcard(void)
{
   if(re())
   {
      
        if(iscard()!=0)
      {
         SEND(&WG[0]);
         open();

      }sound(2);
    }
}
/*////////////////////////////////////
函數原型:void open(void)
函數說明:打開
版本:V1.0.0
程序員:LIY12586
////////////////////////////////////*/
void open(void)
{
   
       //out=0;
      SEND(&WG[0]);
      sound(1);
      ysms(10000);
      //out=1;
      
   
}
回復

使用道具 舉報

5#
ID:3721 發表于 2015-1-5 14:10 | 只看該作者
完成按鍵操作
  1. 昨天晚上終于完成了按鍵操作,由于太晚沒上傳,大部分功能已經完成,一個簡單(功能相對于專業門禁來說簡單,制作對我來說相當復雜,但也是體現我的單片機和電子技術水平又有提高)的門禁可以使用了,目前的功能有:讀卡開門,密碼開門,加卡,刪卡,更改密碼,系統初始化。后期要加上:遠程控制開門,加卡,刪卡,監控等。下面是程序:
  2. /*////////////////////////////////////
  3. 函數原型:void psw(void)
  4. 函數說明:密碼寫入EEPROM中
  5. 版本:V1.0.0
  6. 程序員:LIY12586
  7. ////////////////////////////////////*/
  8. void psw(void)
  9. {
  10.    uchar a=0,b=2,c,d,x=0;
  11.    timer=0;
  12.    while(1)
  13.    {      
  14.         
  15.          c=key();
  16.          if(c==12)
  17.             {            
  18.                sound(1);
  19.                break;
  20.             }
  21.          if(ex==1)
  22.          {
  23.             
  24.             sound(1);
  25.             ex=0;
  26.              break;
  27.          }  
  28.             if(c!=0)
  29.             {
  30.                if(a<6)
  31.                {
  32.                   keybuff[a]=c;
  33.                   a++;
  34.                   if(a==6)sound(2);
  35.                }
  36.                else if(a>6,a<13)
  37.                {
  38.                   if(c!=keybuff[x])
  39.                   {
  40.                   
  41.                      sound(20);
  42.                      x=0;
  43.                      a=0;
  44.                      break;
  45.                   }
  46.                      a++;
  47.                      x++;
  48.               
  49.                   if(a==12)
  50.                   {
  51.                      a=0;
  52.                      x=0;
  53.                      b=2;
  54.                      for(d=0;d<6;d++)
  55.                      {
  56.                         wt24c(b,keybuff[d]);
  57.                         ys100us(1000);
  58.                         b++;
  59.                      }
  60.                      SEND(&keybuff[0]);
  61.                      break;
  62.                   }
  63.               
  64.                 }
  65.               
  66.              }
  67.       
  68.         
  69.       
  70.       
  71.    }
  72. }
  73. /*////////////////////////////////////
  74. 函數原型:bit keyscan(void)
  75. 函數說明:鍵盤操作掃描
  76. 版本:V1.0.0
  77. 程序員:LIY12586
  78. ////////////////////////////////////*/
  79. bit keyscan(void)
  80. {
  81.    uchar a=1,c,d;
  82.    scan=key();
  83.    if(scan!=0)
  84.    {
  85.       
  86.       if(scan!=11)
  87.       {
  88.          d=scan;
  89.          timer=0;
  90.          keybuff[0]=scan;
  91.          scan=0;
  92.         
  93.          while(1)
  94.          {
  95.             if(d==12)
  96.             {            
  97.                sound(1);
  98.                break;
  99.             }
  100.             
  101.             c=key();
  102.             if(c==12)
  103.             {            
  104.                sound(1);
  105.                break;
  106.             }
  107.             else if(ex==1)
  108.             {
  109.               
  110.                sound(1);
  111.                ex=0;
  112.                 break;
  113.             }  
  114.             else if(c!=0)
  115.             {
  116.                keybuff[a]=c;
  117.                a++;
  118.                if(a==6)
  119.                {
  120.                   a=0;
  121.                   SEND(&keybuff[0]);
  122.                   return 1;
  123.                   break;
  124.                }
  125.             }
  126.   
  127.          }
  128.       }
  129.       
  130.    }
  131.   
  132.    return 0;
  133. }
  134. /*////////////////////////////////////
  135. 函數原型:void password(void)
  136. 函數說明:確認密碼
  137. 版本:V1.0.0
  138. 程序員:LIY12586
  139. ////////////////////////////////////*/
  140. bit password(void)
  141. {
  142.    uchar a,b;
  143.    if(keyscan())
  144.    {
  145.          b=2;
  146.          for(a=0;a<6;a++)
  147.          {
  148.             if(keybuff[a]!=rd24c(b))
  149.             {
  150.             break;
  151.             }
  152.             b++;
  153.             if(b==8)return 1;
  154.          }
  155.          if(b!=8)
  156.          {  

  157.             sound(5);
  158. //            LED=0;
  159.             return 0;
  160.          }
  161.       
  162.         
  163.    }
  164. }

  165. /*////////////////////////////////////
  166. 函數原型:void systeminit(void)
  167. 函數說明:系統初始化
  168. 版本:V1.0.0
  169. 程序員:LIY12586
  170. ////////////////////////////////////*/
  171. void systeminit(void)
  172. {
  173.     uchar a;
  174.       wt24c(0,0x02);
  175.       ys100us(1000);
  176.       wt24c(1,0xab);
  177.       ys100us(1000);
  178.       wt24c(2,0x01);
  179.       ys100us(1000);
  180.       wt24c(3,0x02);
  181.       ys100us(1000);
  182.       wt24c(4,0x03);
  183.       ys100us(1000);
  184.       wt24c(5,0x04);
  185.       ys100us(1000);
  186.       wt24c(6,0x05);
  187.       ys100us(1000);
  188.       wt24c(7,0x06);
  189.       ys100us(1000);
  190.       
  191.    for(a=8;a<128;a++)
  192.    {
  193.       if(rd24c(a)!=0xff)
  194.       {
  195.          //ysms(100)
  196.          wt24c(a,0xff);
  197.          ys100us(1000);
  198.       }
  199.       
  200.    }
  201.    sound(5);
  202. }
復制代碼
回復

使用道具 舉報

6#
ID:70266 發表于 2015-1-20 22:42 | 只看該作者
xuexixia ding
回復

使用道具 舉報

7#
ID:80021 發表于 2015-5-14 21:45 | 只看該作者
樓主你好!!!做畢業設計,,,需要這樣的,,,系統,,,求分享,,,proteus圖等,,,謝謝。1138279190@QQ.com
回復

使用道具 舉報

8#
ID:73815 發表于 2015-6-10 06:34 | 只看該作者
單片機是怎樣看門把關的能教教別人嗎
回復

使用道具 舉報

9#
ID:91104 發表于 2015-9-26 14:04 | 只看該作者
樓主你好 求分享proteus圖 硬軟件設計 萬分感謝   謝謝,謝謝364640663@qq.com
回復

使用道具 舉報

10#
ID:205941 發表于 2017-5-29 22:27 | 只看該作者
你好!能不能把門禁的代碼給我參考一下?
回復

使用道具 舉報

11#
ID:205941 發表于 2017-5-29 22:28 | 只看該作者
你好!能不能把門禁的代碼給我參考一下?
liuwei058@163.com
回復

使用道具 舉報

12#
ID:106211 發表于 2017-12-17 23:58 | 只看該作者
做個記號,以后學習使用 謝謝樓主
回復

使用道具 舉報

13#
ID:253767 發表于 2017-12-19 15:05 | 只看該作者
等待分享樓主的成果
回復

使用道具 舉報

14#
ID:23303 發表于 2018-10-6 20:00 | 只看該作者
想學習一下,請多幫助,謝謝!
回復

使用道具 舉報

15#
ID:406598 發表于 2018-11-30 22:59 | 只看該作者
好強呀,有實物圖嗎樓主?
回復

使用道具 舉報

16#
ID:685488 發表于 2020-1-12 23:54 | 只看該作者
大師就是牛x
回復

使用道具 舉報

17#
ID:715507 發表于 2020-4-5 22:11 | 只看該作者
樓主你好 求分享軟、硬件設計 萬分感謝   謝謝,謝謝739004020@qq.com
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区四区视频 | 国产福利在线 | 欧美成人免费在线 | 18成人在线观看 | 欧美一级二级在线观看 | 国产精品久久久久久久久久久新郎 | 国产福利资源 | 国产精品一卡二卡三卡 | 一区二区在线免费观看 | 亚洲精品日韩一区二区电影 | 国产视频久久久 | 亚洲精品在线国产 | 日本韩国电影免费观看 | 男人天堂av网站 | 免费视频99 | www.亚洲一区二区三区 | 成人深夜福利网站 | 亚洲欧洲在线看 | 中文字幕在线观看第一页 | 中文字幕在线视频网站 | 91在线精品一区二区 | 91欧美| 亚洲黄色网址视频 | 麻豆精品久久久 | 欧美日韩国产精品一区 | www.操com| 成人免费观看视频 | 国产免费福利小视频 | 91电影院 | 九九热在线视频免费观看 | 插插插干干干 | 精品久久久久久久久久久久久久 | 一级黄色毛片免费 | 欧美精品在线一区二区三区 | 精品91久久 | aⅴ色国产 欧美 | 暖暖成人免费视频 | 欧美极品视频在线观看 | 请别相信他免费喜剧电影在线观看 | 久久精品久久久 | 精品国产区|