【優(yōu)秀碩士論文參考】基于單片機的IC卡讀寫器設計_第1頁
【優(yōu)秀碩士論文參考】基于單片機的IC卡讀寫器設計_第2頁
【優(yōu)秀碩士論文參考】基于單片機的IC卡讀寫器設計_第3頁
【優(yōu)秀碩士論文參考】基于單片機的IC卡讀寫器設計_第4頁
【優(yōu)秀碩士論文參考】基于單片機的IC卡讀寫器設計_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、石家莊鐵道大學四方學院畢業(yè)設計基于單片機的IC卡讀寫器設計The Design of the IC Card Read-Write Device Based on single chip microcomputer 2012 屆 電氣工程 系專 業(yè) 學 號 學生姓名 指導教師 陳東陽 完成日期 2012年 5月 15日畢業(yè)設計成績單學生姓名 學號 班級 專業(yè) 畢業(yè)設計題目基于單片機的IC卡讀寫器設計指導教師姓名指導教師職稱評 定 成 績指導教師得分評閱人得分答辯小組組長得分成績:院長(主任) 簽字: 年 月 日畢業(yè)設計任務書題 目基于單片機的IC卡讀寫器設計學生姓名 學號 班級 專業(yè)自動化承擔

2、指導任務單位石家莊鐵道大學導師姓名陳東陽導師職稱副教授主要內容設計一款讀寫器,能通過與計算機通信,由計算機發(fā)送新數據到單片機,完成對卡的讀/寫。IC卡應用于消費電子產品對IC卡的管理,如電卡,飯卡,購物卡,娛樂消費卡等其他消費費系統(tǒng)充值與管理。這里設計的讀寫器能實現簡單的讀寫與顯示功能。二、技術參數和要求1、使用SLE4442卡,密碼用123456。2、33-36區(qū)域放置AA 55 80 FE四個字節(jié)作為卡片識別代碼。3、37區(qū)域放置能消費值MN(錢包值MN=99)4、 38區(qū)域放置MN的備份NN,5、39區(qū)域放置工作時間TT(TT=0;i-)CheckSum+=ReciveBufferi;i

3、f(CheckSum=ReciveBufferReciveBuffer1+2)return 1;elsereturn 0;void SendTrue(uchar COM) /修改IC成功發(fā)送的數據SendData(0 xaa);SendData(0 x55);SendData(COM-0 x80);SendData(0 x01);SendData(0 x01);SendData(COM-0 x80+1+1);SendData(0 xed);void SendFalse(uchar COM) /修改IC失敗發(fā)送的數據SendData(0 xaa);SendData(0 x55);SendData

4、(COM-0 x80); SendData(0 x01);SendData(0 x02);SendData(COM+1+2);SendData(0 xed);void main()uchar rec5;UartInit();Timer0Init();ET0=1;ES=1;EA=1;IsCard=1; BEE=1; /蜂鳴器while(1) IsCard=1; if(IsCard) /無卡 DisplayTemp=0 xffff; /顯示“”Power=1; /關閉電源 else Power=0; /若有卡打卡卡電源 IRcvdat_4442(MAM,33,2,rec);/從主存儲器0X33地址

5、讀2個字節(jié)放到rec數組DisplayTemp=rec0*10+rec1;if(ReciveOver) ReciveOver=0; if(Check() if(ReciveBuffer0=COM_Read)/讀命令 uchar checksum; IRcvdat_4442(MAM,33,2,rec); SendData(0 xaa);SendData(0 x55);SendData(0 x01);checksum=0 x01;SendData(0 x02);checksum+=0 x02;SendData(rec0);checksum+=rec0;SendData(rec1);checksum

6、+=rec1;SendData(checksum);SendData(0 xed); else if(ReciveBuffer0=COM_Write)/寫命令 if(IChkpsw_4442(0 xff,0 xff,0 xff)=0)/密碼校驗if(ISenddat_4442(MAM,33,2,&ReciveBuffer2)SendTrue(COM_Write);else SendFalse(COM_Write);elseSendFalse(COM_Write); else if(ReciveBuffer0=COM_ADD)/加命令 uchar x2,y; y=DisplayTemp+Reci

7、veBuffer2*10+ReciveBuffer3; if(y99) y=99; x0=y/10; x1=y%10;if(IChkpsw_4442(0 xff,0 xff,0 xff)=0)if(ISenddat_4442(MAM,33,2,x)SendTrue(COM_ADD);else SendFalse(COM_ADD);elseSendFalse(COM_ADD); else if(ReciveBuffer0=COM_DEC)/減命令 uchar x2,y; if(y(ReciveBuffer2*10-ReciveBuffer3) y=DisplayTemp-ReciveBuffer

8、2*10-ReciveBuffer3; else y=0; x0=y/10; x1=y%10;if(IChkpsw_4442(0 xff,0 xff,0 xff)=0)if(ISenddat_4442(MAM,33,2,x)SendTrue(COM_DEC);else SendFalse(COM_DEC);elseSendFalse(COM_DEC); UpDisplay();uchar ZhenTou2;bit RecFlag=0;uchar length=0;void Uart_Isr() interrupt 4 /串口中斷 if (RI) RI = 0; /Clear receive i

9、nterrupt flagif(RecFlag=0) ZhenTou0=ZhenTou1;ZhenTou1=SBUF;if(ZhenTou0=0 xaa)&(ZhenTou1=0 x55)/讀幀頭AA 55RecFlag=1;elseReciveBufferlength=SBUF;if(ReciveBufferlength=0 xed)length=0;ReciveOver=1;RecFlag=0;elselength+; void Time0Int() interrupt 1/數碼中斷if(TimeCount+=50)/定時50次TimeCount=0; DisPort=DisplayCod

10、eDisplayDataDisplayDig;/輸出段選 DigPort=(DigDisplayDig&0 x1e)|(DigPort&0 xe1);/輸出位選 if(DisplayDig+=3)DisplayDig=0; (2)SLE4442卡函數聲名程序#includestc89C51.h#include #define uchar unsigned char #define uint unsigned intvoid Start_COM();void Stop_COM();void SendByte(uchar c);uchar RcvByte();void AnRst();void W

11、rmOption() ;void BreakN() ;void SendCOM(uchar com1,uchar com2,uchar com3);bit IRcvdat_4442(uchar area,uchar addr,uchar num,uchar buf);bit ISenddat_4442(uchar area,uchar addr,uchar num,uchar buf);uchar IChkpsw_4442(uchar psw1,uchar psw2,uchar psw3); (3)SLE4442卡操作程序#includesle4442.h#define uchar unsig

12、ned char /*宏定義*/ #define MAM 0 /*定義主存儲器代號*/ #define SCM 1 /*定義加密存儲器代號*/ #define PRM 2 /*定義保護存儲器代號*/ #define _Nop() _nop_() /*定義空指令*/ #define DELAY5us() _Nop();_Nop();_Nop();_Nop();_Nop() /*端口位定義*/ sbit RST=P36; sbit IO=P34; sbit CLK=P35;/*起動總線函數函數原型: void Start_COM(); 功能: 啟動發(fā)送命令起始條件. */ void Start_C

13、OM() IO=1; /*發(fā)送起始條件的數據信號*/ _Nop(); CLK=1; DELAY5us(); /*起始條件建立時間大于 4.7us,延時*/ IO=0; /*發(fā)送起始信號*/ DELAY5us(); /*起始條件鎖定時間大于 4 s*/ CLK=0; /*鉗住總線準備發(fā)送或接收數據 */ _Nop(); _Nop(); /*結束總線函數函數原型: void Stop_COM(); 功能: 命令發(fā)送結束信號 */ void Stop_COM() IO=0; /*發(fā)送結束條件的數據信號*/ _Nop(); /*發(fā)送結束條件的時鐘信號*/ CLK=1; /*結束條件建立時間大于 4 s

14、*/ DELAY5us(); IO=1; /*發(fā)送總線結束信號*/ _Nop(); _Nop();/*字節(jié)數據傳送函數函數原型: void SendByte(uchar c);功能: 將數據c發(fā)送出去,可以是命令,也可以是數據 */ void SendByte(uchar c) uchar BitCnt; for(BitCnt=0;BitCntBitCnt)&0 x01)IO=1; /*判斷發(fā)送位 */ else IO=0; _Nop();_Nop(); CLK=1; /*置時鐘線為高通知被控器開始接收數據位*/ DELAY5us(); /*保證時鐘高電平周期大于 4 s*/ CLK=0; /

15、*字節(jié)數據接收函數函數原型: uchar RcvByte();功能: 用來接收從卡傳來的數據 */ uchar RcvByte() uchar retc; uchar BitCnt;retc=0; for(BitCnt=0;BitCnt1; if(IO=1)retc=retc+0 x80; /*讀數據位,接收的數據位放入 retc中 */ _Nop(); _Nop(); CLK=0; _Nop();_Nop(); return(retc); /*復位和復位響應函數函數原型 void AnRst();功能:復位IC卡并接收響應字節(jié) */ void AnRst() RST=1; /*產生復位時序*

16、/ DELAY5us(); CLK=1; DELAY5us(); CLK=0; DELAY5us(); RST=0; _Nop(); RcvByte(); /*讀出 32字節(jié)響應數據*/ RcvByte(); RcvByte(); RcvByte(); /*發(fā)送4442處理脈沖函數函數原型 void WrmOption();功能:發(fā)送處理模式指令后要調用此程序發(fā)送脈沖 */ void WrmOption() while(1) CLK=0; DELAY5us(); IO=1; _Nop();_Nop(); if(IO=1)break; /*沒有處理完則繼續(xù)發(fā)送脈沖*/ CLK=1; DELAY5

17、us(); /*中止操作函數函數原型 void BreakN();功能中止當前操作*/ void BreakN() CLK=0; DELAY5us(); RST=1; /*發(fā)出中止操作的時序*/ DELAY5us(); RST=0; /*命令發(fā)送函數函數原型 void SendCOM(ucahr com1,ucahr com2,uchar com3);功能負責起動命令發(fā)送3字節(jié)命令*/ void SendCOM(uchar com1,uchar com2,uchar com3) Start_COM(); SendByte(com1); /*連續(xù)發(fā)送 3字節(jié)指令*/ SendByte(com2)

18、; SendByte(com3); Stop_COM(); /*SLE4442卡讀數據函數函數原型: bit IRcvdat_4442(uchar area,ucahr addr,uchar num,uchar buf); 功能: 對 SLE4442卡進行讀操作 area為存儲器類型 addr為起始地址 num為讀取數據字節(jié)數 buf為數據緩沖區(qū)指針說明操作成功返回 1參數 area錯誤返回 0使用前用判斷卡插好沒有*/ bit IRcvdat_4442(uchar area,uchar addr,uchar num,uchar buf) uchar i; switch(area) case

19、MAM: AnRst(); /*復位 SLM4442卡接收復位響應*/ SendCOM(0X30,addr,0 x00); /*讀主存儲器*/ for(i=0;inum;i+) *buf=RcvByte(); buf+; BreakN(); break; case SCM: AnRst(); SendCOM(0 x31,0 x00,0 x00); for(i=0;inum;i+) *buf=RcvByte(); buf+; BreakN(); break; case PRM: AnRst(); SendCOM(0 x34,0 x00,0 x00); for(i=0;inum;i+) *buf=

20、RcvByte(); buf+; BreakN(); break; default: return(0); return(1); /* SLE4442卡寫數據函數函數原型: bit ISenddat_4442(uchar area,ucahr addr,uchar num,uchar buf); 功能: 對 SLE4442卡進行寫操作 area為存儲器類型 addr為起始地址 num為讀取數據字節(jié)數 buf為數據緩沖區(qū)指針說明:操作成功返回1錯誤返回0使用前用判斷卡插好沒有*/ bit ISenddat_4442(uchar area,uchar addr,uchar num,uchar bu

21、f) uchar i; switch(area) case MAM: AnRst(); for(i=0;inum;i+) SendCOM(0X38,addr+i,*buf); /*寫主存儲器*/ buf+; WrmOption(); /*發(fā)送操作脈沖*/ break; case SCM: AnRst(); for(i=0;inum;i+) SendCOM(0 x39,addr+i,*buf); buf+; WrmOption(); break; case PRM: AnRst(); for(i=0;inum;i+) SendCOM(0 x3c,addr+i,*buf); buf+; WrmOption(); break; default: return(0); return(1); /* SLE4442卡校驗密碼函數函數原型: uchar IChkpsw_

溫馨提示

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

評論

0/150

提交評論