單片機(jī)課程設(shè)計(jì)---單片機(jī)門禁系統(tǒng)的設(shè)計(jì)_第1頁
已閱讀1頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  課程設(shè)計(jì)報告</b></p><p>  設(shè)計(jì)題目: 單片機(jī)門禁系統(tǒng)的設(shè)計(jì) </p><p>  摘要:門禁系統(tǒng)采用89C52 單片機(jī)作為控制核心,外圍加蜂鳴器控制電路、開門指示燈電路、電控鎖控制電路等。采用射頻卡完成刷卡進(jìn)門,按鈕出門功能。本系統(tǒng)設(shè)計(jì)簡單、性能優(yōu)良,具有一定的

2、實(shí)用性。</p><p>  關(guān)鍵詞:門禁;電控鎖;控制</p><p><b> ?。?一)、系統(tǒng)設(shè)計(jì)</b></p><p>  1. 系統(tǒng)方案的比較</p><p><b>  (1)選題論證</b></p><p>  在現(xiàn)今社會,隨著人們對門禁系統(tǒng)各方面要求的不斷提

3、高,門禁系統(tǒng)的應(yīng)用范圍越來越廣泛,因此,門禁系統(tǒng)的研發(fā)已成為現(xiàn)代科技領(lǐng)域的一個熱門課題。</p><p>  目前,門禁系統(tǒng)已成為安全防范系統(tǒng)中極其重要的一部分,在一些發(fā)達(dá)國家,門禁系統(tǒng)正以遠(yuǎn)遠(yuǎn)高于其它類安防產(chǎn)品迅猛發(fā)展;門禁系統(tǒng)之所以能在眾多安防產(chǎn)品中脫穎而出,根本原因是因?yàn)槠涓淖兞艘酝卜喇a(chǎn)品,如:閉路監(jiān)控,防盜報警等被動的安防方式,以主動的控制替代了被動監(jiān)視的方式,通過對主要通道的控制,大大的防止了罪犯從正

4、常通道的侵入,并且可以在罪案發(fā)生時通過對通道門的控制限制罪犯的活動范圍,制止犯罪或減少損失。此外,人們對門禁系統(tǒng)的應(yīng)用已不局限在單一的出入口控制,而且還要求它不僅可應(yīng)用于智能大廈或智能社區(qū)的門禁控制、考勤管理、安防報警、停車場控制、電梯控制、樓宇自控等,還可與其它系統(tǒng)聯(lián)動控制等多種控制功能。</p><p><b> ?。?)方案選擇</b></p><p>  門禁

5、系統(tǒng)有許多種方案:主要有聯(lián)網(wǎng)和不聯(lián)網(wǎng)型。</p><p>  聯(lián)網(wǎng)型:結(jié)構(gòu)圖如圖示</p><p>  聯(lián)網(wǎng)型門禁系統(tǒng)的優(yōu)點(diǎn):</p><p><b>  實(shí)時聯(lián)網(wǎng)</b></p><p>  刷卡后立即把數(shù)據(jù)傳輸?shù)街鳈C(jī)上;</p><p>  便于查詢并能生成報表;</p><

6、;p><b>  缺點(diǎn):</b></p><p>  計(jì)算機(jī)要求24小時開機(jī);</p><p>  計(jì)算機(jī)或管理機(jī)萬一有故障系統(tǒng)癱瘓;</p><p><b>  有問題影響面大。</b></p><p>  不聯(lián)網(wǎng)型門禁系統(tǒng)的優(yōu)點(diǎn):單臺刷卡機(jī)就能工作,不用布線,操作簡單方便。</p&g

7、t;<p><b>  缺點(diǎn):不便于查詢。</b></p><p>  根據(jù)以上分析,我們的課題選擇了不聯(lián)網(wǎng)型。因?yàn)榇嗽O(shè)計(jì)簡單,提交作品方便,易操作。</p><p><b>  (3)射頻卡的選擇</b></p><p>  目前市面上的卡有很多種類:條碼、磁卡、接觸式IC卡,非接觸式IC卡等,條碼和磁卡,

8、在超市和銀行方面應(yīng)用的比較多,接觸式IC卡,以前在公共電話中用的比較多,但接觸式IC卡,芯片外露易壞、易折,而非接觸式IC卡既射頻卡,它把芯片和線圈封裝卡片內(nèi),不容易損壞、不怕惡劣的環(huán)境,現(xiàn)在社會上很流行,可靠性也高。根據(jù)卡的分析,選擇目前流行最廣,可靠性高,成本低的只讀卡,即采用EM4000型的ID卡。</p><p> ?。ǘ?硬件電路的設(shè)計(jì)</p><p><b>  流

9、程圖:</b></p><p>  門禁系統(tǒng)主要組成:由CPU、復(fù)位電路、電源指示、工作指示、振蕩電路、蜂鳴器電路、出門按鈕、讀卡模塊、電機(jī)轉(zhuǎn)動模塊組成。</p><p>  門禁系統(tǒng)的工作原理:</p><p>  首先,按下開始按鍵,電源指示燈亮起。</p><p>  當(dāng)刷卡時,蜂鳴器響一聲,讀卡權(quán)限獲得允許,顯示燈點(diǎn)開始閃

10、,同時繼電器動作使電機(jī)轉(zhuǎn)動,延時5秒時間后繼電器再次動作使電機(jī)停止運(yùn)轉(zhuǎn),顯示燈熄滅。</p><p>  當(dāng)非法卡刷卡時,顯示燈將一直閃,并且蜂鳴器將發(fā)出報警聲。</p><p> ?。ㄈ┲麟娐吩韴D:</p><p>  (四) 各部分電路原理</p><p><b>  1 開門電機(jī)電路:</b></p>

11、;<p>  門控鎖電路工作原理:當(dāng)P2.7口輸出高電平時Q2導(dǎo)通,Q3截止,此時繼電器的控制線圈為開路,繼電器不動作。門鎖接于繼電器常閉端,電機(jī)不轉(zhuǎn),門處于鎖死狀態(tài)。</p><p>  當(dāng)P2.7口輸出低電平時Q2截止,Q3導(dǎo)通,此時繼電器的控制線圈閉合,繼電器動作。繼電器常閉端斷開,電機(jī)開始轉(zhuǎn)動,門處于打開狀態(tài)。</p><p><b>  2 蜂鳴器電路:&

12、lt;/b></p><p><b>  工作原理:</b></p><p>  當(dāng) P3.5輸出高電平時,Q1截止,蜂鳴器回路開路,蜂鳴器不響。</p><p>  當(dāng) P3.5輸出低電平時,Q1導(dǎo)通,蜂鳴器回路閉合,蜂鳴器發(fā)出響聲。</p><p><b>  3 開門按鍵電路:</b>&

13、lt;/p><p>  (三) 非接觸式IC卡性能簡介(M1)</p><p><b>  主要指標(biāo)</b></p><p>  容量為8K位EEPROM</p><p>  分為16個扇區(qū),每個扇區(qū)為4塊,每塊16個字節(jié),以塊為存取單位</p><p>  每個扇區(qū)有獨(dú)立的一組密碼及訪問控制<

14、/p><p>  每張卡有唯一序列號,為32位</p><p>  具有防沖突機(jī)制,支持多卡操作</p><p>  無電源,自帶天線,內(nèi)含加密控制邏輯和通訊邏輯電路</p><p>  數(shù)據(jù)保存期為10年,可改寫10萬次,讀無限次</p><p>  工作溫度:-20℃~50℃(濕度為90%)</p>&l

15、t;p>  工作頻率:13.56MHZ</p><p>  通信速率:106 KBPS</p><p>  讀寫距離:10 cm以內(nèi)(與讀寫器有關(guān))</p><p><b>  存儲結(jié)構(gòu)</b></p><p>  M1卡分為16個扇區(qū),每個扇區(qū)由4塊(塊0、塊1、塊2、塊3)組成,(我們也將16個扇區(qū)的64個塊按

16、絕對地址編號為0~63,存貯結(jié)構(gòu)如下圖所示:</p><p>  第0扇區(qū)的塊0(即絕對地址0塊),它用于存放廠商代碼,已經(jīng)固化,不可更改。</p><p>  每個扇區(qū)的塊0、塊1、塊2為數(shù)據(jù)塊,可用于存貯數(shù)據(jù)。</p><p>  數(shù)據(jù)塊可作兩種應(yīng)用:</p><p>  用作一般的數(shù)據(jù)保存,可以進(jìn)行讀、寫操作。</p>&

17、lt;p>  用作數(shù)據(jù)值,可以進(jìn)行初始化值、加值、減值、讀值操作。</p><p>  每個扇區(qū)的塊3為控制塊,包括了密碼A、存取控制、密碼B。具體結(jié)構(gòu)如下:</p><p>  密碼A(6字節(jié)) 存取控制(4字節(jié)) 密碼B(6字節(jié)) </p><p>  每個扇區(qū)的密碼和存取控制都是獨(dú)立的,可以根據(jù)實(shí)際需要設(shè)定各自的密碼及存取控制。存取控制為4個字節(jié),共

18、32位,扇區(qū)中的每個塊(包括數(shù)據(jù)塊和控制塊)的存取條件是由密碼和存取控制共同決定的,在存取控制中每個塊都有相應(yīng)的三個控制位,定義如下:</p><p>  塊0: C10 C20 C30</p><p>  塊1: C11 C21 C31</p><p>  塊2: C12 C22 C32</p><p>

19、  塊3: C13 C23 C33</p><p>  三個控制位以正和反兩種形式存在于存取控制字節(jié)中,決定了該塊的訪問權(quán)限(如 </p><p>  進(jìn)行減值操作必須驗(yàn)證KEY A,進(jìn)行加值操作必須驗(yàn)證KEY B,等等)。三個控制</p><p>  位在存取控制字節(jié)中的位置,以塊0為例:</p><p><b> 

20、 對塊0的控制:</b></p><p>  bit 7 6 5 4 3 2 1 0</p><p>  ( 注: C10_b表示C10取反 )</p><p>  存取控制(4字節(jié),其中字節(jié)9為備用字節(jié))結(jié)構(gòu)如下所示:</p><p>  bit 7 6

21、 5 4 3 2 1 0</p><p>  ( 注: _b表示取反 )</p><p>  6、數(shù)據(jù)塊(塊0、塊1、塊2)的存取控制如下:</p><p> ?。↘eyA|B 表示密碼A或密碼B,Never表示任何條件下不能實(shí)現(xiàn))</p><p>  例如:當(dāng)塊0的存取控制位C10

22、C20 C30=1 0 0時,驗(yàn)證密碼A或密碼B正確后可讀;</p><p>  驗(yàn)證密碼B正確后可寫;不能進(jìn)行加值、減值操作。</p><p>  7、控制塊塊3的存取控制與數(shù)據(jù)塊(塊0、1、2)不同,它的存取控制如下:</p><p>  例如:當(dāng)塊3的存取控制位C13 C23 C33=1 0 0時,表示:</p><p>  密碼A:不

23、可讀,驗(yàn)證KEYA或KEYB正確后,可寫(更改)。</p><p>  存取控制:驗(yàn)證KEYA或KEYB正確后,可讀、可寫。</p><p>  密碼B:驗(yàn)證KEYA或KEYB正確后,可讀、可寫。</p><p><b>  工作原理</b></p><p>  卡片的電氣部分只由一個天線和ASIC組成。</p&g

24、t;<p>  天線:卡片的天線是只有幾組繞線的線圈,很適于封裝到IS0卡片中。</p><p>  ASIC:卡片的ASIC由一個高速(106KB波特率)的RF接口,一個控制單元和一個</p><p>  8K位EEPROM組成。</p><p>  工作原理:讀寫器向M1卡發(fā)一組固定頻率的電磁波,卡片內(nèi)有一個LC串聯(lián)諧振電路,其頻率與讀寫器發(fā)射的頻

25、率相同,在電磁波的激勵下,LC諧振電路產(chǎn)生共振,從而使電容內(nèi)有了電荷,在這個電容的另一端,接有一個單向?qū)ǖ碾娮颖?,將電容?nèi)的電荷送到另一個電容內(nèi)儲存,當(dāng)所積累的電荷達(dá)到2V時,此電容可做為電源為其它電路提供工作電壓,將卡內(nèi)數(shù)據(jù)發(fā)射出去或接取讀寫器的數(shù)據(jù)。</p><p>  M1射頻卡與讀寫器的通訊</p><p><b>  改變扇區(qū)</b></p>

26、<p><b>  不改變扇區(qū)</b></p><p>  復(fù)位應(yīng)答(Answer to request)</p><p>  M1射頻卡的通訊協(xié)議和通訊波特率是定義好的,當(dāng)有卡片進(jìn)入讀寫器的操作范圍時,讀寫器以特定的協(xié)議與它通訊,從而確定該卡是否為M1射頻卡,即驗(yàn)證卡片的卡型。</p><p>  防沖突機(jī)制 (Anticolli

27、sion Loop)</p><p>  當(dāng)有多張卡進(jìn)入讀寫器操作范圍時,防沖突機(jī)制會從其中選擇一張進(jìn)行操作,未選中的則處于空閑模式等待下一次選卡,該過程會返回被選卡的序列號。</p><p>  選擇卡片(Select Tag)</p><p>  選擇被選中的卡的序列號,并同時返回卡的容量代碼。</p><p>  三次互相確認(rèn)(3 Pa

28、ss Authentication)</p><p>  選定要處理的卡片之后,讀寫器就確定要訪問的扇區(qū)號,并對該扇區(qū)密碼進(jìn)行密碼校驗(yàn),在三次相互認(rèn)證之后就可以通過加密流進(jìn)行通訊。(在選擇另一扇區(qū)時,則必須進(jìn)行另一扇區(qū)密碼校驗(yàn)。)</p><p><b>  對數(shù)據(jù)塊的操作 </b></p><p>  讀 (Read):讀一個塊;</p

29、><p>  寫 (Write):寫一個塊;</p><p>  加(Increment):對數(shù)值塊進(jìn)行加值;</p><p>  減(Decrement):對數(shù)值塊進(jìn)行減值;</p><p>  存儲(Restore):將塊中的內(nèi)容存到數(shù)據(jù)寄存器中;</p><p>  傳輸(Transfer):將數(shù)據(jù)寄存器中的內(nèi)容寫入

30、塊中;</p><p>  中止(Halt):將卡置于暫停工作狀態(tài);</p><p><b> ?。ㄋ模?程序:</b></p><p>  #include "reg52.h"</p><p>  #include <string.h></p><p>  #in

31、clude "lcd.h"</p><p>  #include "main.h"</p><p>  #include "mfrc522.h"</p><p>  typedef struct Record {</p><p>  unsigned char Name[16];&

32、lt;/p><p>  unsigned char No[16];</p><p>  unsigned long CardID;</p><p>  } RECORD ;</p><p>  code RECORD student[3] ={</p><p>  "Name:LingLong ",

33、" No.:3080432021 ",0x501909e0,</p><p>  "Name:ZhangSan "," No.:3080432022 ",0xacebd854,</p><p>  "Name:LiSi "," No.:3080432023 ",0x87654

34、321</p><p><b>  };</b></p><p>  char getData(void)</p><p><b>  {</b></p><p><b>  char c;</b></p><p>  while (!RI);</

35、p><p><b>  c=SBUF;</b></p><p><b>  RI=0;</b></p><p>  return (c);</p><p><b>  }</b></p><p>  //---------------------------

36、----------------------</p><p>  char sendData(char c)</p><p><b>  {</b></p><p>  while (!TI);</p><p><b>  TI = 0;</b></p><p>  retu

37、rn (SBUF = c);</p><p><b>  }</b></p><p><b>  //蜂鳴器函數(shù)</b></p><p>  void beep()</p><p><b>  {</b></p><p>  unsigned char

38、 i = 0;</p><p><b>  EA=0;</b></p><p>  for (i=0;i<200;i++)</p><p><b>  {</b></p><p><b>  sond = 0;</b></p><p>  dela

39、yuS(20);</p><p><b>  sond = 1;</b></p><p>  delayuS(20);</p><p><b>  }</b></p><p><b>  EA=1;</b></p><p><b>  }<

40、;/b></p><p>  unsigned char idata RevBuffer[1]; //調(diào)試用</p><p>  unsigned char data SerBuffer[1]; //調(diào)試用</p><p>  bit CmdValid; //調(diào)試用</p><p>  //////////////////////

41、///////////////////////////////////////////////</p><p><b>  //系統(tǒng)初始化</b></p><p>  /////////////////////////////////////////////////////////////////////</p><p>  void Init

42、ializeSystem()</p><p><b>  {</b></p><p>  TMOD=0x20;//mode 2 auto reload</p><p><b>  TL1=0xfd;</b></p><p>  TH1=0xfd;//baudRate:9600</p>

43、<p>  SCON=0x52; //sm0,sm1,sm2,ren,tb,rb8,ti,ri</p><p>  PCON&=0x7f;//smod=0;</p><p>  TR1=1;//timer1 reset</p><p>  PcdReset();</p><p>  PcdAntennaOff();<

44、;/p><p>  PcdAntennaOn(); </p><p>  M500PcdConfigISOType( 'A' );</p><p><b>  }</b></p><p>  #define IDLE (0)</p><p>  #define CARDOK

45、 (1)</p><p>  #define IDOK0 (2)</p><p>  #define IDOK1 (3)</p><p>  #define IDOK2 (4)</p><p>  #define IDERROR0 (5)</p><p>  #define IDERROR1 (6)

46、</p><p>  #define IDERROR2 (7)</p><p>  #define UNLOCK (8)</p><p>  unsigned char state = IDLE;</p><p>  unsigned char buf[4];</p><p><b>  //主函數(shù)<

47、;/b></p><p>  void main( )</p><p><b>  { </b></p><p>  unsigned char baud,i,Debug,result,updated;</p><p>  unsigned long ltmp;</p><p>  D

48、ebug = 0;</p><p><b>  //打開電源指示燈</b></p><p>  Power = 0;</p><p><b>  //初始化單片機(jī)</b></p><p>  InitializeSystem( );</p><p>  CARD_LED =

49、0;</p><p><b>  beep();</b></p><p>  delayms0(200);</p><p>  CARD_LED = 0;</p><p>  delayms0(200);</p><p>  CARD_LED = 1;</p><p>&l

50、t;b>  while (1)</b></p><p><b>  {</b></p><p>  switch (state)</p><p><b>  {</b></p><p>  case IDLE : </p><p><b>  /

51、/刷新顯示</b></p><p>  PcdRequest(0x26,buf);</p><p>  sendData(buf[0]);</p><p>  sendData(buf[1]);</p><p>  delayms0(100);</p><p>  if (buf[0] != 0x04)&l

52、t;/p><p><b>  {</b></p><p>  PcdRequest(0x52,buf);</p><p><b>  }</b></p><p>  delayms0(100);</p><p>  sendData(buf[0]);</p><

53、;p>  sendData(buf[1]);</p><p>  if (buf[0] == 0x04)</p><p><b>  {</b></p><p>  delayms0(200);</p><p>  state = CARDOK;</p><p><b>  }&l

54、t;/b></p><p><b>  break;</b></p><p>  case CARDOK:</p><p>  PcdAnticoll(buf);</p><p>  sendData(0x55);</p><p>  sendData(buf[0]);</p>

55、<p>  sendData(buf[1]);</p><p>  sendData(buf[2]);</p><p>  sendData(buf[3]);</p><p><b>  //查找學(xué)生記錄</b></p><p>  ltmp = (((unsigned long)buf[0])<<

56、;24)|(((unsigned long)buf[1])<<16)|(((unsigned long)buf[2])<<8)|(((unsigned long)buf[3]));</p><p>  result = 0;</p><p>  for (i=0;i<3;i++)</p><p>  if (student[i].Car

57、dID == ltmp)</p><p><b>  {</b></p><p>  result =1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  if (result == 1)&l

58、t;/p><p><b>  {</b></p><p>  state = IDOK0;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

59、<p>  state = IDERROR0;</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case IDOK0:</p><p>  delayms0(50);</p><p>  PcdReq

60、uest(0x26,buf);</p><p>  delayms0(50);</p><p>  if (buf[0] != 0x04)</p><p><b>  {</b></p><p>  PcdRequest(0x52,buf);</p><p><b>  }</b&

61、gt;</p><p>  if (buf[0] == 0x04)</p><p><b>  {</b></p><p>  PcdAnticoll(buf);</p><p><b>  //查找學(xué)生記錄</b></p><p>  ltmp = (((unsigned

62、long)buf[0])<<24)|(((unsigned long)buf[1])<<16)|(((unsigned long)buf[2])<<8)|(((unsigned long)buf[3]));</p><p>  result = 0;</p><p>  for (i=0;i<3;i++)</p><p> 

63、 if (student[i].CardID == ltmp)</p><p><b>  {</b></p><p>  result =1;</p><p><b>  break;</b></p><p><b>  }</b></p><p> 

64、 if (result == 1)</p><p><b>  {</b></p><p><b>  beep();</b></p><p>  state = IDOK1;</p><p><b>  }</b></p><p><b> 

65、 else</b></p><p>  state = IDLE;</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case IDOK1:</p><p>  state = IDOK2;</p&

66、gt;<p><b>  break;</b></p><p>  case IDOK2:</p><p>  CARD_LED = !CARD_LED;</p><p>  for (i = 0; i< 10;i ++)</p><p><b>  {</b></p>

67、;<p>  delayms0(10);</p><p>  if ((key1 == 0)||(key2 == 0))</p><p><b>  {</b></p><p>  state = UNLOCK;</p><p><b>  }</b></p><p

68、><b>  }</b></p><p><b>  break;</b></p><p>  case IDERROR0:</p><p>  delayms0(50);</p><p>  PcdRequest(0x26,buf);</p><p>  delaym

69、s0(50);</p><p>  if (buf[0] != 0x04)</p><p><b>  {</b></p><p>  PcdRequest(0x52,buf);</p><p><b>  }</b></p><p>  if (buf[0] == 0x04

70、)</p><p><b>  {</b></p><p>  PcdAnticoll(buf);</p><p><b>  //查找學(xué)生記錄</b></p><p>  ltmp = (((unsigned long)buf[0])<<24)|(((unsigned long)buf

71、[1])<<16)|(((unsigned long)buf[2])<<8)|(((unsigned long)buf[3]));</p><p>  result = 0;</p><p>  for (i=0;i<3;i++)</p><p>  if (student[i].CardID == ltmp)</p>&

72、lt;p><b>  {</b></p><p>  result =1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  if (result == 1)</p><p><b&

73、gt;  {</b></p><p>  updated =1;</p><p>  state = IDLE;</p><p><b>  }</b></p><p><b>  else</b></p><p>  state = IDERROR1;</

74、p><p><b>  }</b></p><p><b>  break;</b></p><p>  case IDERROR1:</p><p>  state = IDERROR2;</p><p><b>  break;</b></p>

75、;<p>  case IDERROR2:</p><p><b>  beep();</b></p><p>  CARD_LED = !CARD_LED;</p><p>  if ((key1 == 0)||(key2 == 0))</p><p><b>  {</b><

76、/p><p>  state = IDLE;</p><p>  updated =1;</p><p>  CARD_LED = 1;</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case

77、 UNLOCK:</p><p>  Relay = 0;</p><p>  CARD_LED = 0;</p><p>  delayms0(1500);</p><p>  CARD_LED = 1;</p><p>  Relay = 1;</p><p>  state = IDLE;

78、</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  state = IDLE;</p><p>  updated = 1;</p><p><b>  break;</b><

79、;/p><p><b>  }</b></p><p>  //用于調(diào)試,正常工作跳過</p><p>  if (Debug)</p><p><b>  {</b></p><p>  CmdValid = FALSE;</p><p>  if(Re

80、vBuffer[0]==11) //為了加快相應(yīng)速度 測試風(fēng)鳴器</p><p><b>  {</b></p><p>  RevBuffer[2]=RevBuffer[1];</p><p>  RevBuffer[0]=1; //contact</p><p>  RevBuffer[1]=

81、0;</p><p>  CALL_isr_UART();</p><p>  LED_GREEN = 1;</p><p>  delay_10ms(RevBuffer[2]);</p><p>  LED_GREEN = 0;</p><p><b>  }</b></p>

82、<p>  else if(RevBuffer[0]==13) //設(shè)置通訊波特率</p><p><b>  {</b></p><p>  switch(RevBuffer[1])</p><p><b>  {</b></p><p><b>  case 0:<

83、/b></p><p>  baud=BAUD_9600;</p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>  baud=BAUD_14400;</p><p><b>  break;&l

84、t;/b></p><p><b>  case 2:</b></p><p>  baud=BAUD_19200;</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  baud

85、=BAUD_28800;</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  baud=BAUD_38400;</p><p><b>  break;</b></p><p><

86、;b>  case 5:</b></p><p>  baud=BAUD_57600;</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>  baud=BAUD_115200;</p><p&g

87、t;<b>  break;</b></p><p><b>  default:</b></p><p>  baud=BAUD_9600;</p><p><b>  break;</b></p><p><b>  }</b></p&g

88、t;<p>  RevBuffer[0]=1; //contact</p><p>  RevBuffer[1]=0;</p><p>  CALL_isr_UART();</p><p>  delay_10ms(5);</p><p>  TR1 = 0;</p><p> 

89、 TH1 = baud;</p><p>  TL1 = TH1;</p><p>  delay_10ms(2);</p><p>  TR1 = TRUE;</p><p><b>  }</b></p><p><b>  else</b></p>

90、;<p><b>  {</b></p><p>  iccardcode();</p><p>  CALL_isr_UART();</p><p><b>  }</b></p><p><b>  }</b></p><p><

91、b>  }</b></p><p><b>  }</b></p><p><b>  //用于串口,測試</b></p><p>  void iccardcode()</p><p><b>  { </b></p><p&g

92、t;  unsigned char cmd;</p><p>  unsigned char status;</p><p>  cmd = RevBuffer[0];</p><p>  switch(cmd)</p><p><b>  {</b></p><p>  case 1:

93、// Halt the card //終止卡的操作</p><p>  status= PcdHalt();</p><p>  RevBuffer[0]=1;</p><p>  RevBuffer[1]=status;</p><p><b>  break;</b></p><

94、;p>  case 2: // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)</p><p>  // 尋卡,防沖突,選擇卡 返回卡類型(2 bytes)+ 卡系列號(4 bytes)</p><p>  status= PcdRequest(RevBuffer[1],&am

95、p;RevBuffer[2]);</p><p>  if(status!=0)</p><p><b>  {</b></p><p>  status= PcdRequest(RevBuffer[1],&RevBuffer[2]);</p><p>  if(status!=0)</p>

96、<p><b>  {</b></p><p>  RevBuffer[0]=1;</p><p>  RevBuffer[1]=status;</p><p><b>  break;</b></p><p><b>  }</b></p><

97、;p><b>  } </b></p><p>  RevBuffer[0]=3;</p><p>  RevBuffer[1]=status;</p><p><b>  break;</b></p><p>  case 3: // 防沖

98、突 讀卡的系列號 MLastSelectedSnr</p><p>  status = PcdAnticoll(&RevBuffer[2]);</p><p>  if(status!=0)</p><p><b>  {</b></p><p>  RevBuffer[0]=1;</p>&l

99、t;p>  RevBuffer[1]=status;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  //memcpy(MLastSelectedSnr,&RevBuffer[2],4);</p><p>  RevB

100、uffer[0]=5;</p><p>  RevBuffer[1]=status;</p><p><b>  break;</b></p><p>  case 4: // 選擇卡 Select Card</p><p>  //status=PcdSelect(ML

101、astSelectedSnr);</p><p>  if(status!=MI_OK)</p><p><b>  {</b></p><p>  RevBuffer[0]=1;</p><p>  RevBuffer[1]=status;</p><p><b>  break;&

102、lt;/b></p><p><b>  }</b></p><p>  RevBuffer[0]=3;</p><p>  RevBuffer[1]=status;</p><p><b>  break;</b></p><p>  case 5: /

103、/ Key loading into the MF RC500's EEPROM</p><p>  // status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校驗(yàn)卡密碼</p><p>  RevBuffer[0]=1;</p>&

104、lt;p>  RevBuffer[1]=status;</p><p>  break;</p><p><b>  case 6: </b></p><p>  RevBuffer[0]=1;</p><p>  RevBuffer[1]=status;</p><p

105、>  break;</p><p>  case 7: </p><p>  RevBuffer[0]=1;</p><p>  RevBuffer[1]=status;</p><p><b>  break;</b></p><p>  case 8: //

106、 Read the mifare card</p><p><b>  // 讀卡</b></p><p>  status=PcdRead(RevBuffer[1],&RevBuffer[2]);</p><p>  if(status==0)</p><p>  {RevBuffer[0]=17;}</

107、p><p><b>  else</b></p><p>  {RevBuffer[0]=1;}</p><p>  RevBuffer[1]=status;</p><p><b>  break;</b></p><p>  case 9: // Write t

108、he mifare card</p><p>  // 寫卡 下載密碼</p><p>  status=PcdWrite(RevBuffer[1],&RevBuffer[2]);</p><p>  RevBuffer[0]=1;</p><p>  RevBuffer[1]=status;</p><p

109、><b>  break;</b></p><p><b>  case 10:</b></p><p>  PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);</p><p>  RevBuffer[0]=1;</p><p>  

110、RevBuffer[1]=status;</p><p><b>  break;</b></p><p>  case 12: // 參數(shù)設(shè)置</p><p>  PcdBakValue(RevBuffer[1], RevBuffer[2]);</p><p>  RevBuffer[0]=1;//contac

111、t</p><p>  RevBuffer[1]=0;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  (五) 結(jié)束語</b

112、></p><p>  經(jīng)過近半年的鍛煉和學(xué)習(xí),我們學(xué)到了許多書本上沒有的知識,從方案的論證、課題的選擇、電路原理,到電路上元器件的焊接、電路的調(diào)試,程序的編寫,調(diào)試下載,一步步,我們收獲很大。在設(shè)計(jì)中,我們力求硬件電路簡單,充分發(fā)揮軟件靈活方面的特點(diǎn),滿足系統(tǒng)設(shè)計(jì)要求。這中間,我們也遇到了許多困難,在老師的幫助下,一個個也都戰(zhàn)勝了。</p><p><b> ?。?參

113、考文獻(xiàn)</b></p><p>  [1] 李忠國.單片機(jī)應(yīng)用技能訓(xùn)練[M].北京:人民郵電出版社,2006.</p><p>  [2] 何立民.潛入式系統(tǒng)可靠性設(shè)計(jì)得探討[J ]浙江:浙江大學(xué)學(xué)報,1998(增刊)</p><p>  [3] 劉守義.智能卡技術(shù)[M].西安:西安電子科技大學(xué)出版社,2004. </p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論