freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于51單片機(jī)的ic卡讀寫(xiě)系統(tǒng)設(shè)計(jì)(文件)

 

【正文】 狀態(tài)拉為 L 狀態(tài)并開(kāi)始處理。通過(guò)讀寫(xiě)器插槽與 IC 卡芯片通信,由 51 單片機(jī)控制數(shù)據(jù)傳輸過(guò)程,實(shí)現(xiàn)讀卡和寫(xiě)卡操作。 ? 實(shí)現(xiàn)與卡的數(shù)據(jù)交換,并提供相應(yīng)的控制信號(hào)。 ? 提供數(shù)據(jù)通訊接口與上位機(jī)進(jìn)行數(shù)據(jù)通訊。單片機(jī)對(duì)鍵盤(pán)進(jìn)行行列掃描讀取鍵 值。 圖 AT89C51 最小系統(tǒng) 接觸式 IC卡的接口電路 IC 卡的接口電路是連接 IC 卡與讀寫(xiě)設(shè)備的通路,由它實(shí)現(xiàn)對(duì) IC 卡的供電,并滿足不帶電插拔的要求。下圖 42所示是 IC 卡接口電路。 IC 卡的 VCC 同時(shí)經(jīng) VD2 送至 CPU 的 ,檢測(cè)有無(wú)卡電源短路現(xiàn)象,以防人為破環(huán)。為了確保 IC 卡已準(zhǔn)確地插到位置,插入的識(shí)別過(guò)程必須加入消顫處理。延時(shí) 5ms MOV C,IC_SW JNC RE_DETECT 。 ISO78163 標(biāo)準(zhǔn)規(guī)定的操作順序如下 : IC 卡的激活 (上電過(guò)程 ): 10 —— RST 處于 L 狀態(tài) —— VCC 供電 —— 接口設(shè)備處于接收方式 —— Vpp上升為空閑狀態(tài) —— CLK 由相應(yīng)穩(wěn)定的時(shí)鐘提供 IC 卡的去激活過(guò)程 (下電過(guò)程 ): —— RST 為狀態(tài) L —— CLK 為狀態(tài) L —— Vpp 不起作用 —— I/O 為狀態(tài) A —— VCC 關(guān)閉 由于 IC 卡技術(shù)的進(jìn)步,現(xiàn)在的 IC 卡事實(shí)上都 己使用卡內(nèi)自帶升壓電路,因此 Vpp控制已逐漸失去具體含義。使 RST=L CLR CLK 。使 I/O 端口為高電平,準(zhǔn)備接受數(shù)據(jù) RET POWER_OFF: 。使 I/O=L LCALL DELAY_500us 。大多數(shù)符合ISO7816 標(biāo)準(zhǔn)的同步型 IC 卡的地址計(jì)數(shù)器是與時(shí)鐘緊密相關(guān)的,當(dāng)卡復(fù)位時(shí),地址計(jì)數(shù)器置 0。數(shù)據(jù)的讀出過(guò)程可分為三個(gè) 基本過(guò)程 :復(fù)位,數(shù)據(jù)字段的定位和數(shù)據(jù)讀出。 圖 33 串行通信電路 鍵盤(pán)電路 由于需要 16 個(gè)按鍵,采用并行接口的鍵盤(pán)電路至少需要 4+4=8 條 I/O 線,而串行接口的鍵盤(pán)電路只需要 3 條 I/O 口線,一條用作鍵盤(pán)行線,一條串行移位輸出列掃描信號(hào),另一條用作移位寄存器 74LS164的移位時(shí)鐘脈沖信號(hào)線。 因而選用 ,上拉電阻保證了沒(méi)有鍵輸入時(shí), I/O 口線上有確定的高電平輸入。熒光顯示器。 圖 49 是單片機(jī)與顯示器的接口電路。 主程序 主程序主要完成初始化并檢測(cè)系統(tǒng)的狀態(tài),如果是剛上電狀態(tài),則恢復(fù)掉電瞬間保存的數(shù)據(jù)。 //指針定義 if(consl==0) //判斷是否剛上電狀態(tài) { p=cons2。 //外部中斷 0 開(kāi)中斷 EA=1。 此讀寫(xiě)系統(tǒng)中,鍵盤(pán)采用編程掃描方式。圖中可見(jiàn),鍵盤(pán)掃描子程序要完成以下的功能: 1) 判斷鍵盤(pán)上有無(wú)鍵按下。但由于在按動(dòng)按鍵時(shí)總有一些抖動(dòng),因此在負(fù)脈沖的開(kāi)始和末尾部位總要出現(xiàn)一些毛齒波,毛齒 波的長(zhǎng)短與開(kāi)關(guān)的機(jī)械特性有關(guān),一般為 5~ 10ms。通過(guò)延時(shí)來(lái)等待信號(hào)穩(wěn)定,在信號(hào)穩(wěn)定后查詢(xún)鍵碼。當(dāng)閉合按鍵地鍵碼確定之后,再去查詢(xún)按鍵是否釋放,待按鍵釋放后再進(jìn)行處理,這樣 既可消除釋放抖動(dòng)的干擾。鍵值與鍵號(hào)的對(duì)應(yīng)關(guān)系如表 51 所示。 開(kāi)始 調(diào)用鍵盤(pán)程序 判斷 是否 按鍵 功能 數(shù)字 返回 18 圖 43 顯示子程序流程圖 開(kāi)始 LCD 初始化 清屏 從 緩沖區(qū)中顯示 用戶信息 顯示用戶信息 返回 19 總結(jié) 在了解研究 8051 單片機(jī)的結(jié)構(gòu)特點(diǎn)及其相關(guān)的設(shè)計(jì)實(shí)例后,本次設(shè)計(jì)充分利用其相關(guān)的功能,開(kāi)發(fā)設(shè)計(jì)了 IC 卡讀寫(xiě)器。 51 單片機(jī)的 IC 卡讀寫(xiě)器的設(shè)計(jì):以 51 單片機(jī)為核心,結(jié)合 AT24C02 作為外部存儲(chǔ)器,存放關(guān)鍵信息,液晶 SMG12232B2 作為顯示系統(tǒng)。 uchar money=0。 sbit LED =P3^3。i) for(j=4。k)。 jms。 int x。 LCD_Wr_Char(x,0,num)。 uchar input_buf[4]。 LCD_Init()。 LCD_Clear_ALL()。 if(IsCard==0) LED=0。0x0f) + 39。039。 Card_num[6]=(rec[3]amp。0x0f) + 39。039。 Card_num[10]=(rec[7]amp。 Print(0,0,Card_num)。039。039。039。 Print (0,0,Read error)。 delay()。 } } keynum=key_switch()。 Write_buf[1]=money%256。 //從 32 開(kāi)始 寫(xiě)入 8 個(gè)字節(jié) delay_ms(5)。 Write_buf[0]=money/256。 i++) { write_cm(32+i, input_buf[i])。 //如果按下聯(lián)機(jī)鍵,則領(lǐng) ES=1 開(kāi)啟串口中 while(IsCard == 0)。 delay()。 //讀取卡中的數(shù)據(jù)緩沖 unsigned char rxbuf[20]。 //錢(qián)數(shù)緩存 EA=0。 RI=0。i++) { while(!RI)。i3。 //讀取金額 SBUF= _read。j7。 } } else if(rxbuf[0]==change_id) //修改卡號(hào)命令 { for(i=0。 i=7。 //IIC STOP //從 0x32 地址開(kāi)始寫(xiě)入 5 個(gè)字節(jié)的數(shù)據(jù) } else if(rxbuf==_add) { read_cm(addr_money,2,rdbuf)。 Write_Buf[0]=money/256。 i++) { write_cm(addr_money+i, Write_Buf[i])。 //減錢(qián) { money=rdbuf[0]*256+rdbuf[1]。 Write_Buf[1]=money%256。 //從 addr_money 開(kāi)始 寫(xiě)入 2 個(gè)字節(jié) delay_ms(5)。 while(!TI)。 SendComm(RMM_COMM,addr,0xff)。 SendComm(WMM_COMM, addr, dat)。 SendComm(RPM_COMM,0xff,0xff)。 SendComm(WPM_COMM, addr, *pt)。 //開(kāi)始發(fā)送命令 WriteByte(a)。 //結(jié)束發(fā)送命令 } /******************************************************************** 函 數(shù) 名 : StartComm() 功 能 : 開(kāi)始命令模式 說(shuō) 明 : (內(nèi)部函數(shù) ) 調(diào) 用 : 返 回 值 : 無(wú) ********************************************************************/ void StartComm(void) { CARD_CLK = 0。 Delay5us()。 CARD_DATA = 0。 CARD_DATA = 1。 CARD_RST = 0。 CARD_RST = 1。 Delay10us()。 Delay5us()。 //空讀 32Bit (4Byte) temp = ReadByte()。 //IC sets I/O to state H Delay5us()。 Delay5us()。 32 Delay5us()。 CARD_RST = 0。 for (i = 8。 //從低位讀起 if((unsigned char)CARD_DATA) ch |= 0x80。 。 CARD_CLK = 1。 i) { CARD_CLK = 0。 } /******************************************************************** 函 數(shù) 名 : ReadByte() 功 能 : 從 SLE4442 讀一個(gè)字節(jié) 說(shuō) 明 : (內(nèi)部函數(shù) ) 返 回 值 : uchar ********************************************************************/ unsigned char ReadByte(void) { unsigned char i,ch。 CARD_DATA = 1。 CARD_RST = 0。 _nop_()。 temp = ReadByte()。 Delay10us()。 Delay10us()。 CARD_CLK = 1。 CARD_DATA = 1。 } /******************************************************************** 31 函 數(shù) 名 : ResetCard() 功 能 : 卡復(fù)位和復(fù)位應(yīng)答 說(shuō) 明 : (內(nèi)部函數(shù) ) 返 回 值 : 無(wú) ********************************************************************/ void ResetCard(void) { unsigned char temp = 0。 CARD_CLK = 1。 Delay5us()。 Delay5us()。 //b: 發(fā)地址 WriteByte(c)。 BreakOperate()。 //讀出 BreakOperate()。 BreakOperate()。 BreakOperate()。 } } EA=1。 //IIC STOP //從 money 地址開(kāi)始寫(xiě)入 2 個(gè)字節(jié)的數(shù)據(jù) } else { money=money_temp。 i=1。 money=(rxbuf[7]*256+rxbuf[8])。 } BreakOperate()。 if(money=9999) { for(i=0。 } money_temp=money。//從 32 開(kāi)始 寫(xiě)入 8 個(gè)字節(jié) delay_ms(5)。i++) { Write_Buf[i]=rxbuf[i+2]。 while(!TI)。 TI=0。 } if(checkpsw(psw)==1) //密碼校驗(yàn)成功,進(jìn)入下一步功能 { if(rxbuf[0]==_read) //讀卡命令 { read_cm(0x32,8,rdbuf)。 rxbuf[2+i]=SBUF。 } if(rxbuf[1]!=0) //如果字節(jié)數(shù)不是 0,則繼續(xù)
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1