




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 實驗報告 題目:基于IC卡的用電管理系統(tǒng) 組員A:何桐桐 10041258 組員B:馮君杰 10041256 班級:電氣09 2013-5-17【摘要】在IC卡應(yīng)用日益廣泛的今天,IC卡用電管理系統(tǒng)以其管理的安全、可靠、高效、靈活、方便,已逐步取代傳統(tǒng)的用電管理模式。我們設(shè)計的IC卡用電管理系統(tǒng)可以方便地管理和控制應(yīng)用場所的用戶。本系統(tǒng)以智能化小區(qū)為應(yīng)用背景,通過上位機(電腦)與下位機(單片機)串行通信的聯(lián)合操作,完成對刷卡用戶信息的顯示,記錄與管理。規(guī)定IC卡上存貯的內(nèi)容由規(guī)定的特征碼、卡號、姓名、卡內(nèi)余額以及權(quán)限等級構(gòu)成,特征碼為判別該卡合法性的依據(jù)。以單片機為核心的下位機系統(tǒng),可以方便
2、地對IC卡進行操作,判定卡的合法性,對非法卡予以報警,對刷卡成功后的合法卡在數(shù)碼管上顯示其卡號、卡內(nèi)余額以及扣費操作。上位機界面由C+中的MFC編寫完成。其對刷卡人基本信息詳細顯示,同時能進行充值電費,對于管理員權(quán)限用戶,可查詢所有用戶的基本信息。系統(tǒng)實現(xiàn)簡單、便于擴展,給管理者和用戶帶來了極大的方便?!娟P(guān)鍵詞】 IC24c01卡 單片機 串行通信 MFC友好界面目錄1、引言2、實驗?zāi)康募叭蝿?wù)3、具體工作內(nèi)容3.1 技術(shù)要求3.2 工作要求4、總體設(shè)計方案及分析 4.1 總體結(jié)構(gòu)設(shè)計框圖 4.2 系統(tǒng)模塊分析 4.2.1 單片機系統(tǒng)模塊功能介紹 4.2.2 單片機與上位機的串行通信 4.2.3
3、 上位機功能實現(xiàn)及界面設(shè)計5、實驗運行結(jié)果及調(diào)試6、實驗設(shè)計總結(jié)及感想7、參考資料8、附錄 8.1 源程序 8.2 原理圖及PCB圖1引言隨著智能化住宅小區(qū)的興起與迅速發(fā)展,對智能化住宅小區(qū)的現(xiàn)代化物業(yè)管理提出了更高的要求,例如用電管理。傳統(tǒng)的用電管理模式存在以下弊端:(1)人工抄表誤差大、費時、麻煩;(2)先用電后付費,收費慢,加之各單位門戶的防盜門,很不方便,甚至一部分電費收不回來。迅速發(fā)展的IC卡技術(shù)引入用電管理可以解決以上問題,還可以記錄各用戶的用電情況,備份用電數(shù)據(jù),實現(xiàn)有效的監(jiān)督管理。該類系統(tǒng)可以提高管理效率和可靠性。通過預(yù)先收費,可以增加管理部門的可用資金,為居民提供優(yōu)質(zhì)服務(wù),改
4、變對資源先消費后收費的不合理狀況。對于用戶而言,IC卡收費可消除收費人員入戶的騷擾和準(zhǔn)備現(xiàn)金零錢的煩惱;同時,還有利于用戶根據(jù)自家用電情況,進行計劃消費。2實驗?zāi)康募叭蝿?wù)(1)通過查閱相關(guān)資料,深入了解IC卡的原理及與單片機接口方式;(2)學(xué)習(xí)有關(guān)操作界面的設(shè)計方法及制作;(3)復(fù)習(xí)“MCS-51單片機原理及C語言(或匯編語言)程序設(shè)計”;(4)設(shè)計基于IC卡的用電管理系統(tǒng)的原理圖,構(gòu)建硬件平臺; (5)采用匯編或C語言編寫應(yīng)用程序,上位機可采用任一高級語言編寫應(yīng)用程序; (6)制作出樣機并測試達到功能(讀、寫的數(shù)據(jù)信息)和技術(shù)指標(biāo)要求;(7)寫出設(shè)計報告和答辯PPT。3. 具體工作內(nèi)容 3.
5、1 技術(shù)要求(1)目標(biāo)IC卡為24C01;(2) IC卡的信息量不少于256字節(jié);(3) 可識別是否用IC卡在線;(4)顯示用戶的相關(guān)信息;(5) 能夠鑒別非法IC卡;(6) 友好人性化操作界面;(7)可讀、寫的數(shù)據(jù)信息;(8)利用IC卡的信息可決定用戶的權(quán)利和義務(wù)。3.2 工作要求(1)組建基于單片機的IC卡用電管理系統(tǒng)的總體結(jié)構(gòu)框圖;(2)設(shè)計詳細的原理圖,通過理論分析和計算選擇電路參數(shù);(3)根據(jù)操作功能要求,確定操作界面的控制功能;(4)按設(shè)計要求確定顯示方式及信息量;( 5 )編寫應(yīng)用程序并調(diào)試通過;( 6 )對系統(tǒng)進行測試和結(jié)果分析; ( 7 )撰寫設(shè)計報告和答辯PPT。4. 總體
6、設(shè)計方案及分析4.1 總體結(jié)構(gòu)設(shè)計框圖 控制開關(guān)單片機上位機RS232接口串行通信蜂鳴器數(shù)碼管顯示指示燈IC卡IIC總線4.2 系統(tǒng)模塊分析4.2.1 單片機系統(tǒng)模塊功能介紹下位機系統(tǒng)的電路原理圖如附錄中所示,以下對該電路圖的基本工作原理進行簡述。 1、 晶振發(fā)生器模塊兩個輸出端分別連接單片機XTAL.1,XTAL.2端口,通過晶振與電容產(chǎn)生固定頻率的震蕩周期信號,作為單片機的時鐘信號。 XTAL.1,XTAL.2端外接石英晶體作定時元件時,內(nèi)部反向放大器自激振蕩,產(chǎn)生時鐘。時鐘發(fā)生器對振蕩脈沖二分頻,即若石英頻率為6MHz,則時鐘頻率為3MHz,本實驗中,晶振頻率為11.0592MHz。構(gòu)成
7、石英振蕩電路的電容通常取30pF,如圖中所示。2、 復(fù)位信號發(fā)生模塊如圖,VCC產(chǎn)生的信號直接連接至EA/VPP端口。當(dāng)該端口被置位為1時,地址0000H0FFFH空間訪問單片機內(nèi)部ROM,或地址1000HFFFFH空間訪問單片機內(nèi)部ROM,本次試驗中該端口為12.5V。 電阻R1上的電壓傳送至單片機RST/VPD端口處。當(dāng)開關(guān)閉合時,在時鐘電路作用下,在改引腳上出現(xiàn)兩個機器周期以上的高電平,使其內(nèi)部復(fù)位。 此外,VPD為備用電源輸入。當(dāng)單片機上主電源VCC發(fā)生故障,降低到低電平規(guī)定值時,VPD將為RAM提供備用電源,以保障存儲在RAM中的信號不會丟失。3、 外部開關(guān)觸發(fā)裝置 通過開關(guān)S1,S
8、2,S3產(chǎn)生低電平信號,傳送至單片機。其中,S1,S3經(jīng)過與門合成信號再與S2合成為INT0送至單片機INT0號中斷接口,作為外部中斷信號,設(shè)置為其下降沿有效。即當(dāng)INT0出現(xiàn)下降沿時,單片機進入中斷子程序,在中斷子程序中判斷p3.3,p3.4,p3.5端口的輸入電平就能識別是哪個開關(guān)按下,本次實驗中開關(guān)S1按下時顯示卡號,S2按下時顯示余額,S3按下時可以實行減1扣費操作。4、IC卡讀寫裝置 本系統(tǒng)設(shè)計選用的IC卡為AT24C01,AT24C01是美國ATMEL公司的低功耗CMOS串行EEPROM,它是內(nèi)含2568位存儲空間,具有工作電壓寬(2.55.5V)、擦寫次數(shù)多(大于10000次)、
9、寫入速度快(小于10ms)等特點。每寫入或讀出一個數(shù)據(jù)字節(jié)后,該地址寄存器自動加1,以實現(xiàn)對下一個存儲單元的操作。所有字節(jié)都以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8字節(jié)的數(shù)據(jù)。下圖為AT24C系列芯片的封裝圖。 各引腳功能見下表:其中,SDA控制連接單片機P1.6,SCL連接單片機P1.5,RST連接單片機P1.7。(具體見原理圖) 其工作原理為基本的I2C結(jié)構(gòu)。 IIC總線技術(shù)是一種高性能的芯片間串行傳輸總線,它僅以兩根連線實現(xiàn)了完善 n 的全雙工同步數(shù)據(jù)傳輸,即SDA與SCL。SDA是一根雙向的數(shù)據(jù)線,SCL為一根時鐘線,所有連接到IIC總線上的設(shè)備,其串行數(shù)據(jù)都要連接
10、到總線的SDA上,而各設(shè)備的時鐘均要連接到SCL線上。 在IIC總線進行數(shù)據(jù)傳輸是,在時鐘信號為高電平期間,數(shù)據(jù)線上必須保持穩(wěn)定的邏輯電平狀態(tài),高電平為數(shù)據(jù)1,低電平為數(shù)據(jù)0。只有在時鐘線為低電平期間,才允許數(shù)據(jù)線上的電平狀態(tài)變化。通過SDA與SCL的時序配合,達到傳輸與發(fā)送數(shù)據(jù)的目的。RST為寫保護位,在寫IC卡之前需將RST位進行置1操作。 在數(shù)據(jù)傳送過程中,必須確認(rèn)數(shù)據(jù)傳送的開始和結(jié)束。在I2C總線技術(shù)規(guī)范中,開始和結(jié)束信號(也稱啟動和停止信號)的定義如下:(1)開始信號:當(dāng)時鐘總線SCL為高電平時,數(shù)據(jù)線SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。 (2)結(jié)束信號:當(dāng)SCL線為高電平時,
11、SDA線從低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。 開始和結(jié)束信號都是由主器件產(chǎn)生。在開始信號以后,總線即被認(rèn)為處于忙狀態(tài),其它器件不能再產(chǎn)生開始信號。主器件在結(jié)束信號以后退出主器件角色,經(jīng)過一段時間過,總線被認(rèn)為是空閑的。 IIC總線數(shù)據(jù)傳送采用時鐘脈沖逐位串行傳送方式,在SCL的低電平期間,SDA線上高、低電平能變化,在高電平期間,SDA上數(shù)據(jù)必須保護穩(wěn)定,以便接收器采樣接收,時序如圖 所示。IIC總線發(fā)送器送到SDA線上的每個字節(jié)必須為8位長,傳送時高位在前,低位在后。與之對應(yīng),主器件在SCL線上產(chǎn)生8個脈沖;第9個脈沖低電平期間,發(fā)送器釋放SDA線,接收器把SDA線拉低,以給出一個接收確認(rèn)位
12、;第9個脈沖高電平期間,發(fā)送器收到這個確認(rèn)位然后開始下一字節(jié)的傳送,下一個字節(jié)的第一個脈沖低電平期間接收器釋放SDA。每個字節(jié)需要9個脈沖,每次傳送的字節(jié)數(shù)是不受限制的。 IIC總線的數(shù)據(jù)傳送格式是在I2C總線開始信號后,送出的第一字節(jié)數(shù)據(jù)是用來選擇從器件地址的,其中前7位為地址碼,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫到所選擇的從器件中;方向位為“1”表示主器件將從器件讀信息。格式如下:1 0 1 0 A2 A1 A0 R/W開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即被主器件尋址的器件,
13、其接收信息還是發(fā)送信息則由第8位(R/W)決定。發(fā)送完第一個字節(jié)后再開始發(fā)數(shù)據(jù)信號。數(shù)據(jù)傳輸必須帶響應(yīng)。相關(guān)的響應(yīng)時鐘脈沖由主機產(chǎn)生,當(dāng)主器件發(fā)送完一字節(jié)的數(shù)據(jù)后,接著發(fā)出對應(yīng)于SCL線上的一個時鐘(ACK)認(rèn)可位,此時鐘內(nèi)主器件釋放SDA線,一字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號將SDA線拉成低電平,使SDA在該時鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號結(jié)束后,SDA線返回高電平,進入下一個傳送周期。 通常被尋址的接收器在接收到的每個字節(jié)后必須產(chǎn)生一個響應(yīng)。當(dāng)從機不能響應(yīng)從機地址時,從機必須使數(shù)據(jù)線保持高電平,主機然后產(chǎn)生一個停止條件終止傳輸或者產(chǎn)生重復(fù)起始條件開始新的傳輸。如果從機接收器
14、響應(yīng)了從機地址但是在傳輸了一段時間后不能接收更多數(shù)據(jù)字節(jié),主機必須再一次終止傳輸。這個情況用從機在第一個字節(jié)后沒有產(chǎn)生響應(yīng)來表示。從機使數(shù)據(jù)線保持高電平主機產(chǎn)生一個停止或重復(fù)起始條件。具體的讀卡及寫卡操作步驟如下。 讀卡操作流程 寫卡操作流程5蜂鳴器報警裝置如圖,由單片機P1.0發(fā)出的電平信號經(jīng)與門處理后連接至蜂鳴器的一端,蜂鳴器另一端連接高電平信號Vcc。當(dāng)P1.0端口發(fā)出低電平信號時,蜂鳴器兩端出現(xiàn)電位差,蜂鳴器導(dǎo)通鳴響;當(dāng)P1.0端口電平信號重新拉高時蜂鳴器關(guān)閉,停止鳴響。因此在本實驗中通過單片機P1.0腳的信號來控制蜂鳴器進行工作。6、工作狀態(tài)提示燈 由單片機P1.1端口產(chǎn)生信號經(jīng)與門
15、U6B后傳送至后級裝置。信號直接傳至二極管D2。當(dāng)P1.1為低電平信號時,D2燈亮;當(dāng)P1.1為高電平信號時,D2燈熄滅。本實驗中,設(shè)置D2燈位正常工作時的指示燈。通過單片機控制判斷其工作狀態(tài),并通過該裝置進行外部顯示。7、七段數(shù)碼管顯示其總體工作電路如上所示。由兩個74LS573寄存器從單片機數(shù)據(jù)總線上獲取數(shù)據(jù)信號,其中寄存器U2為段碼寄存器,控制每個數(shù)碼管顯示的內(nèi)容。寄存器U3為位碼寄存器,通過連接譯碼器ULN2803A來控制哪個數(shù)碼管亮燈。在此定義寄存器U2的地址為0BFFFH,寄存器U3的地址為7FFFH。8.單片機程序模塊插入IC卡 合法卡?D2燈亮蜂鳴器響N結(jié)束減1扣費顯示余額顯示
16、卡號IC卡初始化 等待操作Y 下位機程序流程圖下位機與上位機的通信上位機與下位機之間的通信可以采用串行通訊和并行通訊二種方式。由于串行通訊方式具有使用線路少、成本低,特別是在遠程傳輸時,避免了多條線路特性的不一致而被廣泛采用。在串行通信時,數(shù)據(jù)一位一位地發(fā)送,此時要求通信雙方都采用一個標(biāo)準(zhǔn)接口,RS-232C接口是單片機和PC機進行通信最常用的一種接口。單片機與PC機進行串口通信最簡單的三線制法(一根發(fā)送線,一根接受線,一根地線),即接收數(shù)據(jù)針腳(RXD)與發(fā)送數(shù)據(jù)針腳(TXD)相連,彼此交叉,信號地(GND)對應(yīng)相接。但是,串口還不能直接和單片機相連,可以選用MAX232進行電平轉(zhuǎn)換。MAX
17、232 用于RS-232C標(biāo)準(zhǔn),RS-232C標(biāo)準(zhǔn)規(guī)定在碼元畸變小于4%的情況下,傳輸電纜長度最大約為15 米,最高傳輸速率為20kbit/s。RS485 標(biāo)準(zhǔn)最大傳輸距離約為1219 米,最大傳輸速率約為10Mbit/s。 上位機與下位機接口電路RS232標(biāo)準(zhǔn)總線接口(DB9插座):單片機工作電平為TTL(05V),RS232 標(biāo)準(zhǔn)電平(邏輯1:-15-5V;邏輯0:+5V+15V)。采用RS232標(biāo)準(zhǔn)總線與單片機通信時,常用MAX232作TTL與RS232的電平轉(zhuǎn)換。DB9插座信號含義如下:MAX232芯片是美信公司專門為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計的接口電路,使用+5v單電源供電。它是
18、一種把電腦的串行口RS232信號電平(-10 ,+10v)轉(zhuǎn)換為單片機所用到的TTL信號點平(0 ,+5)的芯片。其結(jié)構(gòu)如下圖:其內(nèi)部結(jié)構(gòu)基本可分三個部分:第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供給RS-232串口電平的需要。第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道。8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道。TTL/CMOS數(shù)據(jù)從T1I
19、N、T2IN輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從T1OUT、T2OUT送到電腦DB9插頭;DB9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2OUT輸出。第三部分是供電。15腳GND、16腳VCC(+5v)。 8051有一個可編程的全雙工串行通信接口,它可作UART用,也可作同步移位寄存器,其幀格式可有8位、10位或ll位,并能設(shè)置各種波特率,給使用者帶來很大的靈活性。1、 串行口控制字及控制寄存器 8051串行口是一個可編程接口,對它的編程只用兩個控制字分別寫入特殊功能寄存器:串行口控制寄存器SCON(98H)和電源控制寄存器PCON(97H)即可。 8
20、051串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標(biāo)志等均由特殊功能寄存器SCON控制和指示。SCON控制字格式如下圖:(1)SM0和SMl 串行口工作方式選擇位。(2)REN 允許接收控制位。(3)TB8 發(fā)送數(shù)據(jù)的第9位(D8)裝入TB8中。 (4)RB8 接收數(shù)據(jù)的第9位。 (5)TI 發(fā)送中斷標(biāo)志。(6)RI 接收中斷標(biāo)志。2、 串行通信工作方式 在本系統(tǒng)設(shè)計中,我們選擇最常用的方式1作為串口工作方式,其數(shù)據(jù)字是8位異步通信串口,且波特率可變。方式1以10位數(shù)據(jù)為一幀,設(shè)有一個起始位“0”和一個停止位“1”,中間是8位數(shù)據(jù)。先發(fā)送或接收最低位。 串口方式1 發(fā)送時,數(shù)據(jù)從引腳TX
21、D 端輸出,當(dāng)執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖器SBUF 的命令時就啟動了發(fā)送器開始發(fā)送。發(fā)送時的定時信號,也就是發(fā)送移位時鐘(TX 時鐘),是內(nèi)部定時器T1 送來的溢出信號經(jīng)過16 分頻或32 分頻(取決SMOD 的值)而取得的。TX 時鐘就是發(fā)送波特率,可見方式1 波特率是可變的。發(fā)送開始的同時,SEND 變?yōu)橛行В瑢⑵鹗嘉幌騎XD 輸出,此后每過個TX 時鐘周期(16 分頻計數(shù)器溢出一次為一個時鐘周期,因此,TX 時鐘頻率由波待率決定) 產(chǎn)生一個移位脈沖,并由TXD 輸出一個數(shù)據(jù)位,8 位數(shù)據(jù)位全部發(fā)送完后,置位TI,并申請中斷。再經(jīng)一個時鐘周期SEND 失效。3、 串口方式1波特率串行口工作之前,
22、應(yīng)對其進行初始化,主要是設(shè)置產(chǎn)生波特率的定時器1、串行口控制和中斷控制。具體步驟如下: (1)確定T1的工作方式(編程TMOD寄存器); (2)計算T1的初值,裝載TH1、TL1; (3)啟動T1(編程TCON中的TR1位); (4)確定串行口控制(編程SCON寄存器); 同時,串行口在中斷方式工作時,要進行中斷設(shè)置(編程IE、IP寄存器)。 串口方式1的移位時鐘脈沖由定時器T1的溢出率決定,因此8051串行口方式1的波特率由定時器T1的溢出率與SMOD值同時決定。 方式1的波特率定時器T1作波特率發(fā)生器使用時,通常選用定時器方式2(自動重裝初值定時器)比較實用。定時器方式2具有自動重新加載功
23、能,即自動加載計數(shù)初值,因此也可以說方式2是自動重新加載工作方式。在這種工作方式下,把16位計數(shù)器分為兩部分,即以TL0作計數(shù)器,以TH0作預(yù)置寄存器。初始化時把計數(shù)初值分別裝入TL0和TH0中。在初始化時,8位計數(shù)初值同時裝入TL0和TH0中。當(dāng)TL0計數(shù)溢出時,置位TF0,同時把保存在預(yù)置寄存器TH0中的計數(shù)初值自動加載TL0,然后TL0重新計數(shù),如此重復(fù)循環(huán)。 波特率與與定時器1的對應(yīng)關(guān)系在本次設(shè)計中,805l 單片機時鐘振蕩頻率為110592MHz,選用定時器T1 模式2 作波特率發(fā)生器,波持率為9600 波特。4.2.3上位機功能實現(xiàn)與界面設(shè)計上位機界面使用C+中的MFC類庫編寫的,
24、通過MSComm控件實現(xiàn)串行通信。上位機界面與下位機通信程序流程圖串口開啟并初始化參數(shù)設(shè)定握手方式,清空串口現(xiàn)有隊列讀串口?消息響應(yīng)讀串口延時等待讀是否完成?否顯示用戶信息(通過緩存區(qū)數(shù)據(jù)狀況判斷)是5. 實驗運行結(jié)果及調(diào)試通過多次得運行程序及調(diào)試,使得上位機和下位機的功能實現(xiàn)較為完整,特別是MFC界面的充值電費和查詢用戶信息的設(shè)計,更加人性化。下位機較好的完成了對于蜂鳴器、工作燈及數(shù)碼管的控制顯示。上位機和下位機的串行通信也很成功。6. 實驗設(shè)計總結(jié)及感想本次設(shè)計實驗的綜合性較強,很多知識都需要我們自己查資料獲得,這給我們設(shè)計的過程帶來了極大的挑戰(zhàn)。在下位機程序的編寫上,我們參考了教材上讀寫
25、IC卡的模塊,在主函數(shù)上通過中斷進行相應(yīng)操作。在上位機的編程上,我們傾注了很大的精力,參考了很多書籍,使得MFC界面能較好地運行及與下位機連接。通過本次的設(shè)計實驗,我們不僅學(xué)到了關(guān)于51單片機的基礎(chǔ)知識,同時也掌握了許多相關(guān)軟件的操作,如DXP的繪圖,KeilUvision 的C語言編程,MFC的面板設(shè)計及與串口通信的模塊設(shè)計。當(dāng)然,在平時的授課及實驗過程中,三位老師的幫助和輔導(dǎo)給了我們很大的鼓勵和信心。謝謝!7、參考資料1.王建校、張虹、金印彬 編著 電子系統(tǒng)設(shè)計與時間實驗指導(dǎo)書 西安交通大學(xué)出版社2.王建校 楊建國等編著 51系列單片機及C51程序設(shè)計 科學(xué)出版社2002.4 3.侯殿友
26、編著單片機C語言程序設(shè)計 人民郵電出版社2010.118.附錄(1)下位機源程序:#include #include #include #include #define SEGMENT XBYTE0XBFFF#define BIT_LED XBYTE0X7FFF#define fosc 11.0592#define time0 2500sbit a=P33;sbit b=P34;sbit c=P35;sbit SCL_IC_CARD=P15; sbit SDA_IC_CARD=P16;sbit zhuangtai=P11;sbit zaixian=P14;sbit WP_IC_CARD =P1
27、7;sbit warning=P10;int sw=0,control2=0;unsigned char data display_bit ;unsigned char data time0_h,time0_l;unsigned int idata time0_times;unsigned char dat,control,control1;unsigned int sum,sum1,sum2,sum3,sum4;bdata char com_data;sbit mos_bit=com_data7;sbit low_bit=com_data0;unsigned char get_code(un
28、signed char i);void display(void);unsigned char data display_buffer8,buffer4; void delay(int n);void xianshi();void Init_Com(void);unsigned char rd_24c01(char a);void wr_24c01(char a,char b);void chushi();void rd_kahao();void rd_name();void rd_left();void rd_class();void jifei();void rd_add();/=/內(nèi)部地
29、址分配/0-7:識非法卡的密碼;/10-13:余額;/14-17:卡號;/20-30: 名字;/30-31: 權(quán)限等級;main( ) unsigned char i,j;EA=1;EX0=ET0=ES=1; while(!zaixian);zhuangtai=0; chushi(); Init_Com();/串口初始化while(1) if(zaixian=0) zhuangtai=1;else if(zaixian=1)zhuangtai=0;WP_IC_CARD=1;for (i=0;i=7;i+) /讀取并校驗密碼,若為非法卡,報警 j=rd_24c01(i);delay(250);i
30、f(j!=i*i)break; if(i8) warning=0; /蜂鳴器報警delay(1000);warning=1;if(zaixian=1&control1=1) jifei(); xianshi(); control1=0;if(control=1)if(sw=1) rd_kahao();else if(sw=2) rd_name();else if(sw=3) rd_left(); else if(sw=4) rd_class(); else if(sw=5) rd_add();control=0; void chushi()unsigned char m,i; unsigned
31、 char name5;name0=t;name1=o;name2=n;name3=g; for(m=0;m=7;m=m+1) wr_24c01(m,m*m);delay(250); /將初始信息寫入IC卡(使IC卡成為合法卡);wr_24c01(10,5);delay(250);wr_24c01(11,0);delay(250);wr_24c01(12,0);delay(250);wr_24c01(13,0);delay(250);/這是卡里剩余電量;wr_24c01(14,1);delay(250);wr_24c01(15,2);delay(250);wr_24c01(16,0);dela
32、y(250);wr_24c01(17,5);delay(250);/這是卡的編號; for(i=0;i4;i+)wr_24c01(i+20,namei);delay(250);/寫入姓名;存在name10中;wr_24c01(30,0);delay(250);wr_24c01(31,0);delay(250);/這是卡的權(quán)限等級;void rd_kahao()unsigned char j; for(j=0;j4;j+)display_bufferj =rd_24c01(j+14) ;delay(250); for(j=0;j4;j+)SBUF =display_bufferj+0x30;wh
33、ile(!TI);TI=0;void rd_name()unsigned char j;for(j=0;j4;j+)display_bufferj =rd_24c01(j+20) ;delay(250);for(j=0;j4;j+)SBUF =display_bufferj;while(!TI);TI=0;void rd_left()unsigned char j; for(j=0;j4;j+)display_bufferj =rd_24c01(j+10) ;delay(250);for(j=0;j4;j+)SBUF =display_bufferj+0x30;while(!TI);TI=0;
34、void rd_class()unsigned char j; for(j=0;j2;j+)display_bufferj =rd_24c01(j+30) ;delay(250);for(j=0;j2;j+)SBUF =display_bufferj+0x30;while(!TI);TI=0;void jifei( )/減1計費函數(shù)unsigned char i;sum=0;for (i=0;i0)sum=sum-1;for(i=0;i4;i+)buffer3-i=sum%10;sum=sum/10;xianshi( );for(i=0;i4;i+)wr_24c01(i+10,bufferi)
35、;delay(250);/delay(600);/根據(jù)需要調(diào)整void rd_add( )unsigned char i;sum4=0;sum3=0;for (i=0;i4;i+) bufferi=rd_24c01(i+10);delay(250);sum4=1000*buffer0+100*buffer1+10*buffer2+buffer3;sum3=(int)(dat-0);sum3=sum3+sum4;for(i=0;i4;i+)buffer3-i=sum3%10;sum3=sum3/10;xianshi( );for(i=0;i4;i+)wr_24c01(i+10,bufferi);
36、delay(250);/delay(600);/根據(jù)需要調(diào)整 void inter0(void) interrupt 0 /開關(guān)S1,S2 觸發(fā)中斷,分別顯示卡號和余額unsigned char i;if(a=0)for (i=0;i4;i+) bufferi=rd_24c01(i+14);delay(250);/開關(guān)S1觸發(fā)中斷,顯示卡號xianshi( );else if(c=0)for (i=0;i=0&dat=9)sw=5; /充值電費/*以下為IC卡讀寫相關(guān)程序*void start()/啟動讀寫時序 SDA_IC_CARD=1; SCL_IC_CARD=1; SDA_IC_CARD
37、=0; SCL_IC_CARD=0;void stop()/停止操作 SDA_IC_CARD=0; SCL_IC_CARD=1; SDA_IC_CARD=1;void ack()/應(yīng)答函數(shù) SCL_IC_CARD=1; SCL_IC_CARD=0;void shift8(char a)/8位移位輸出 data unsigned char i; com_data=a;for(i=0;i8;i+) SDA_IC_CARD=mos_bit; SCL_IC_CARD=1; SCL_IC_CARD=0; com_data=com_data*2; unsigned char rd_24c01(char a
38、)/讀IC卡函數(shù) data unsigned char i,command; SDA_IC_CARD=1; SCL_IC_CARD=0; start(); command=160; shift8(command); ack(); shift8(a); ack(); start(); command=161; shift8(command); ack(); SDA_IC_CARD=1; for(i=0;i8;i+) com_data=com_data*2;SCL_IC_CARD=1; low_bit=SDA_IC_CARD; SCL_IC_CARD=0; stop(); return(com_d
39、ata);void wr_24c01(char a,char b)/寫IC卡函數(shù) data unsigned char command; WP_IC_CARD=0;_nop_();SDA_IC_CARD=1; SCL_IC_CARD=0; start(); command=160; shift8(command); ack(); shift8(a); ack(); shift8(b); ack(); stop();_nop_();WP_IC_CARD=1;void xianshi( ) /BIT_LED=0;TMOD=0X21;time0_times=65336-time0*fosc/12;t
40、ime0_h=(time0_times/256);time0_l=(time0_times%256);TH0=time0_h;TL0=time0_l;TR0=1;display_bit=0x01;/*以下為數(shù)碼管動態(tài)顯示相關(guān)程序*void time0_int(void) interrupt 1 /動態(tài)顯示控制中斷 TH0=time0_h;TL0=time0_l;display( );unsigned char get_code(unsigned char i)unsigned char p;switch(i)case 0:p=0x3f;break;case 1:p=0x06;break;cas
41、e 2:p=0x5b;break;case 3:p=0x4f;break;case 4:p=0x66;break;case 5:p=0x6d;break;case 6:p=0x7d;break;case 7:p=0x07;break;case 8:p=0x7f;break;case 9:p=0x67;break;default:break;return(p);void display(void)unsigned char i;switch(display_bit)case 1:i=0;break;case 2:i=1;break; case 4:i=2;break;case 8:i=3;bre
42、ak;default:break;BIT_LED=0;SEGMENT=get_code(buffer3-i);BIT_LED=display_bit;if(display_bit0x08)display_bit=display_bit*2;elsedisplay_bit=0x01;void Init_Com(void)/功能:串口初始化,波特率9600,方式1TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;void delay(int n)/延時函數(shù)int i;for (i=1;iLoadIcon(IDR_MA
43、INFRAME);void CMy111Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CMy111Dlg)DDX_Control(pDX, IDC_BUTTON1, m_serial);DDX_Control(pDX, IDC_MSCOMM1, m_comm1);DDX_Text(pDX, IDC_EDIT1, m_namedata);DDX_Text(pDX, IDC_EDIT2, m_nodata);DDX_Text(pDX, IDC_EDIT3, m_leftdata);DD
44、X_Text(pDX, IDC_EDIT4, m_strText);DDX_Text(pDX, IDC_EDIT5, m_classdata);DDX_Text(pDX, IDC_EDIT6, m_adddata);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMy111Dlg, CDialog)/AFX_MSG_MAP(CMy111Dlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICK
45、ED(IDC_BUTTON3, OnButton3)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON5, OnButton5)ON_BN_CLICKED(IDC_BUTTON7, OnButton7)ON_BN_CLICKED(IDC_BUTTON6, OnButton6)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMy111Dlg message handlersBOOL CMy111Dlg:OnInitDialog()CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereif(! m_comm1.GetPortOpen
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 混凝土設(shè)備轉(zhuǎn)讓協(xié)議書
- 空調(diào)拆機協(xié)議書
- 美國航空協(xié)議書
- 清展廳出租轉(zhuǎn)讓協(xié)議書
- 老板分紅協(xié)議書
- 約定分?jǐn)倕f(xié)議書
- 調(diào)解劃扣協(xié)議書
- 肇事車輛協(xié)議書
- 菜園賠償協(xié)議書
- 員工簽署無薪資協(xié)議書
- 工程造價員勞動合同
- 服飾搭配藝術(shù)(山東聯(lián)盟)智慧樹知到期末考試答案章節(jié)答案2024年德州學(xué)院
- 2024山東財經(jīng)大學(xué)東方學(xué)院教師招聘考試筆試試題
- 工作餐配送合同范本
- 水污染治理微波技術(shù)研究
- 安全生產(chǎn)檢查咨詢服務(wù)安全生產(chǎn)隱患檢查服務(wù)方案
- 異常產(chǎn)程的識別和處理
- 中國普通食物營養(yǎng)成分表一覽
- 2024年甘肅省臨夏州永靖縣部分學(xué)校中考物理一模試卷+
- 傳染病孕婦的管理與預(yù)防
- 機織產(chǎn)品工藝設(shè)計與計算改樣本
評論
0/150
提交評論