51門(mén)禁系統(tǒng)源程序_第1頁(yè)
51門(mén)禁系統(tǒng)源程序_第2頁(yè)
51門(mén)禁系統(tǒng)源程序_第3頁(yè)
51門(mén)禁系統(tǒng)源程序_第4頁(yè)
51門(mén)禁系統(tǒng)源程序_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、. #include reg52.h#include main.h#include uart.h#include timer.h#include rc522.h#include ctrl.h#include lcd12864.h#include beep.h#include key.h #include EEPROM.hvoid init_all(void)/初始化EA = 0; /關(guān)總中斷init_timer(); /定時(shí)器初始化init_uart(); /串口初始化init_rc522(); /RC522初始化lcd_init(); /LCD初始化EEPROM_READ(0,Card_SN

2、_BUF,4);/EEPROM初始化,取出記錄的卡號(hào)EEPROM_READ(7,KEY_BUF,8);/EEPROM初始化,取出記錄的密碼send_bytes(Card_SN_BUF,4);EA = 1; /開(kāi)總中斷void main(void) /主函數(shù)INT8U key; Delay_ms(50); /讓硬件穩(wěn)定init_all(); /執(zhí)行初始化函數(shù)relay_OFF(); /關(guān)繼電器LED_BLINK_1(); /led testbeep1(); /beep test display(0,0,0); /顯示初始化while(1) key=key_scan(); /按鍵操作 if(key

3、=12) if(states0) states-; else states=0;/上一功能 if(key=13) if(+states3) states=3;/下一功能 ctrl_process(); /進(jìn)入RC522操作#include reg52.h#include string.h#include main.h#include uart.h #include rc522.h#include ctrl.h#include beep.h#include lcd12864.h#include timer.h#include EEPROM.h#include key.hINT8U states=

4、0;/狀態(tài)機(jī)INT8U Card_type2,/卡片類型 Card_SN4=0,/IC卡號(hào) Card_SN_BUF4=0*ff,0*ff,0*ff,0*ff,/卡號(hào)登記緩沖區(qū) KEY_BUF8=0,0,0,0,0,0,0,0;INT8U bPass = 0; bWarn = 0; void uart_over( void )/串口數(shù)據(jù)復(fù)原UartCount = 0;UartStart = FALSE;Uartp = FALSE;void pass( void ) beep1(); Delay_ms(2000);/讓卡片離開(kāi) LED_BLINK_1();void warn(void) LED_B

5、LINK_2();INT8U IC_READ( void ) INT8U ID_ASC8,i;if( PcdRequest( PICC_REQIDL, Card_type ) != MI_OK )/尋天線區(qū)未進(jìn)入休眠狀態(tài)的卡,返回卡片類型 2字節(jié)if( PcdRequest( PICC_REQIDL, Card_type ) != MI_OK )/尋天線區(qū)未進(jìn)入休眠狀態(tài)的卡,返回卡片類型 2字節(jié)return FALSE;if( PcdAnticoll( Card_SN ) != MI_OK ) /防沖撞,返回卡的序列號(hào) 4字節(jié)bWarn = 1;return FALSE;bPass = 1;s

6、end_bytes(Card_type,2);send_bytes(Card_SN,4);for(i=0;i9)ID_ASCi*2=Card_SNi/16+7; else ID_ASCi*2=Card_SNi/16+0; if(Card_SNi%169)ID_ASCi*2+1=Card_SNi%16+7; else ID_ASCi*2+1=Card_SNi%16+0;display2(3,0,ID: ,4); /顯示卡號(hào)display2(3,2,ID_ASC,8);return TRUE;void ctrl_process( void ) INT8U i,key_count,key_value

7、=16,table8=-,statesbuf;if(states!=statesbuf) /狀態(tài)改變,清屏 display_clear_line(2); display_clear_line(3);statesbuf=states; switch(states) case 0: /IC卡讀卡輸入 display(1,0,1); if(IC_READ() if (Card_SN0=Card_SN_BUF0) &(Card_SN1=Card_SN_BUF1) &(Card_SN2=Card_SN_BUF2) &(Card_SN3=Card_SN_BUF3) relay_ON();/燈開(kāi)關(guān)displ

8、ay(2,0,5); else display(2,0,6); relay_OFF(); break; case 1: display(1,0,2); /密碼輸入 display2(3,0,table,8); key_count=0; while(1) key_value=key_scan(); if(key_value=12) states-; return; if(key_value=13) states+; return; if(key_value=0 & key_value =9)/有按鍵輸入 tablekey_count+=key_value+0;display2(3,0,table

9、,8); if(key_value=11)/退格 table-key_count=-;display2(3,0,table,8); if(key_count=8) if( table0=KEY_BUF0 & table1=KEY_BUF1 & table2=KEY_BUF2 & table3=KEY_BUF3 & table4=KEY_BUF4 & table5=KEY_BUF5 & table6=KEY_BUF6 & table7=KEY_BUF7 ) /密嗎正確 bPass=1; relay_ON();/燈開(kāi)關(guān) display(2,0,5); relay_OFF(); break; els

10、e /密碼錯(cuò)誤 relay_OFF();beep1() ;bWarn=1; display(2,0,6); break; break ; case 2: display(1,0,3); /IC卡登記 if(IC_READ() for(i=0;i=0 & key_value =9)/有按鍵輸入 tablekey_count+=key_value+0;display2(3,0,table,8); if(key_value=11)/退格 table-key_count=-;display2(3,0,table,8); if(key_count=8 & key_value = 15) /按下確定鍵 f

11、or(i=0;i8;i+) KEY_BUFi=tablei; EEPROM_WRITE(7,KEY_BUF,8);/寫(xiě)入EEPROM break; break ;default : break; if( bPass ) /處理成功bPass = 0;pass();if( bWarn ) /處理失敗bWarn = 0;warn(); #include reg52.h #include intrins.h #include main.h #include rc522.h #include string.hvoid delay_ns(unsigned int ns)unsigned int i;fo

12、r(i=0;ins;i+)nop();nop();nop();/-/ 讀SPI數(shù)據(jù)/-unsigned char SPIReadByte(void)unsigned char SPICount; / Counter used to clock out the dataunsigned char SPIData; SPIData = 0;for (SPICount = 0; SPICount 8; SPICount+) / Prepare to clock in the data to be readSPIData =1; / Rotate the dataCLR_SPI_CK; /nop();

13、/nop(); / Raise the clock to clock the data out of the MA*7456if(STU_SPI_MISO) SPIData|=0*01;SET_SPI_CK; /nop();/nop(); / Drop the clock ready for the ne*t bit / and loop backreturn (SPIData); / Finally return the read data /-/ 寫(xiě)SPI數(shù)據(jù)/-void SPIWriteByte(unsigned char SPIData)unsigned char SPICount;

14、/ Counter used to clock out the datafor (SPICount = 0; SPICount 8; SPICount+)if (SPIData & 0*80)SET_SPI_MOSI;elseCLR_SPI_MOSI; nop();nop();CLR_SPI_CK;nop();nop();SET_SPI_CK;nop();nop();SPIData = 1; /功能:讀RC632存放器/參數(shù)說(shuō)明:AddressIN:存放器地址/返回:讀出的值/unsigned char ReadRawRC(unsigned char Address)unsigned char

15、 ucAddr; unsigned char ucResult=0;CLR_SPI_CS; ucAddr = (Address1)&0*7E)|0*80;SPIWriteByte(ucAddr);ucResult=SPIReadByte();SET_SPI_CS;return ucResult;/功能:寫(xiě)RC632存放器/參數(shù)說(shuō)明:AddressIN:存放器地址/ valueIN:寫(xiě)入的值/void WriteRawRC(unsigned char Address, unsigned char value) unsigned char ucAddr;CLR_SPI_CS; ucAddr = (

16、Address1)&0*7E);SPIWriteByte(ucAddr);SPIWriteByte(value);SET_SPI_CS; /功能:清RC522存放器位/參數(shù)說(shuō)明:regIN:存放器地址/ maskIN:清位值/void ClearBitMask(unsigned char reg,unsigned char mask) char tmp = 0*00; tmp = ReadRawRC(reg); WriteRawRC(reg, tmp & mask); / clear bit mask /功能:置RC522存放器位/參數(shù)說(shuō)明:regIN:存放器地址/ maskIN:置位值/vo

17、id SetBitMask(unsigned char reg,unsigned char mask) char tmp = 0*00; tmp = ReadRawRC(reg); WriteRawRC(reg,tmp | mask); / set bit mask/用MF522計(jì)算CRC16函數(shù)/void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData) unsigned char i,n; ClearBitMask(DivIrqReg,0*04); WriteRawRC(mandReg

18、,PCD_IDLE); SetBitMask(FIFOLevelReg,0*80); for (i=0; ilen; i+) WriteRawRC(FIFODataReg, *(pIndata+i); WriteRawRC(mandReg, PCD_CALCCRC); i = 0*FF; do n = ReadRawRC(DivIrqReg); i-; while (i!=0) & !(n&0*04); pOutData0 = ReadRawRC(CRCResultRegL); pOutData1 = ReadRawRC(CRCResultRegM);/功能:通過(guò)RC522和ISO14443卡

19、通訊/參數(shù)說(shuō)明:mandIN:RC522命令字/ pInDataIN:通過(guò)RC522發(fā)送到卡片的數(shù)據(jù)/ InLenByteIN:發(fā)送數(shù)據(jù)的字節(jié)長(zhǎng)度/ pOutDataOUT:接收到的卡片返回?cái)?shù)據(jù)/ *pOutLenBitOUT:返回?cái)?shù)據(jù)的位長(zhǎng)度/char PcdMF522(unsigned char mand, unsigned char *pInData, unsigned char InLenByte, unsigned char *pOutData, unsigned int *pOutLenBit) char status = MI_ERR; unsigned char irqEn =

20、 0*00; unsigned char waitFor = 0*00; unsigned char lastBits; unsigned char n; unsigned int i; switch (mand) case PCD_AUTHENT:irqEn = 0*12;waitFor = 0*10;break;case PCD_TRANSCEIVE:irqEn = 0*77;waitFor = 0*30;break;default:break; WriteRawRC(IEnReg,irqEn|0*80); ClearBitMask(IrqReg,0*80); WriteRawRC(man

21、dReg,PCD_IDLE); SetBitMask(FIFOLevelReg,0*80); for (i=0; i MA*RLEN) n = MA*RLEN; for (i=0; in; i+) pOutDatai = ReadRawRC(FIFODataReg); else status = MI_ERR; SetBitMask(ControlReg,0*80); / stop timer now WriteRawRC(mandReg,PCD_IDLE); return status;/功能:尋卡/參數(shù)說(shuō)明: req_codeIN:尋卡方式/ 0*52 = 尋感應(yīng)區(qū)所有符合14443A標(biāo)準(zhǔn)

22、的卡/ 0*26 = 尋未進(jìn)入休眠狀態(tài)的卡/ pTagTypeOUT:卡片類型代碼/ 0*4400 = Mifare_UltraLight/ 0*0400 = Mifare_One(S50)/ 0*0200 = Mifare_One(S70)/ 0*0800 = Mifare_Pro(*)/ 0*4403 = Mifare_DESFire/返回: 成功返回MI_OK/char PcdRequest(unsigned char req_code,unsigned char *pTagType)char status; unsigned int unLen;unsigned char ucMF52

23、2BufMA*RLEN; ClearBitMask(Status2Reg,0*08);WriteRawRC(BitFramingReg,0*07);SetBitMask(T*ControlReg,0*03);ucMF522Buf0 = req_code;status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,1,ucMF522Buf,&unLen);if (status = MI_OK) & (unLen = 0*10) *pTagType = ucMF522Buf0;*(pTagType+1) = ucMF522Buf1;else status = MI_ER

24、R; return status;/功能:防沖撞/參數(shù)說(shuō)明: pSnrOUT:卡片序列號(hào),4字節(jié)/返回: 成功返回MI_OK/ char PcdAnticoll(unsigned char *pSnr) char status; unsigned char i,snr_check=0; unsigned int unLen; unsigned char ucMF522BufMA*RLEN; ClearBitMask(Status2Reg,0*08); WriteRawRC(BitFramingReg,0*00); ClearBitMask(CollReg,0*80); ucMF522Buf0

25、= PICC_ANTICOLL1; ucMF522Buf1 = 0*20; status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,2,ucMF522Buf,&unLen); if (status = MI_OK)for (i=0; i4; i+) *(pSnr+i) = ucMF522Bufi;snr_check = ucMF522Bufi;if (snr_check != ucMF522Bufi) status = MI_ERR; SetBitMask(CollReg,0*80); return status;/功能:選定卡片/參數(shù)說(shuō)明: pSnrIN:卡片

26、序列號(hào),4字節(jié)/返回: 成功返回MI_OK/char PcdSelect(unsigned char *pSnr) char status; unsigned char i; unsigned int unLen; unsigned char ucMF522BufMA*RLEN; ucMF522Buf0 = PICC_ANTICOLL1; ucMF522Buf1 = 0*70; ucMF522Buf6 = 0; for (i=0; i4; i+) ucMF522Bufi+2 = *(pSnr+i); ucMF522Buf6 = *(pSnr+i); CalulateCRC(ucMF522Buf

27、,7,&ucMF522Buf7); ClearBitMask(Status2Reg,0*08); status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,9,ucMF522Buf,&unLen); if (status = MI_OK) & (unLen = 0*18) status = MI_OK; else status = MI_ERR; return status;/功能:驗(yàn)證卡片密碼/參數(shù)說(shuō)明: auth_modeIN: 密碼驗(yàn)證模式/ 0*60 = 驗(yàn)證A密鑰/ 0*61 = 驗(yàn)證B密鑰/ addrIN:塊地址/ pKeyIN:密碼/ pSnrIN:

28、卡片序列號(hào),4字節(jié)/返回: 成功返回MI_OK/ char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr) char status; unsigned int unLen; unsigned char ucMF522BufMA*RLEN; ucMF522Buf0 = auth_mode; ucMF522Buf1 = addr;memcpy(&ucMF522Buf2, pKey, 6); memcpy(&ucMF522Buf8, pSnr, 6); s

29、tatus = PcdMF522(PCD_AUTHENT,ucMF522Buf,12,ucMF522Buf,&unLen); if (status != MI_OK) | (!(ReadRawRC(Status2Reg) & 0*08) status = MI_ERR; return status;/功能:讀取M1卡一塊數(shù)據(jù)/參數(shù)說(shuō)明: addrIN:塊地址/ pDataOUT:讀出的數(shù)據(jù),16字節(jié)/返回: 成功返回MI_OK/ char PcdRead(unsigned char addr,unsigned char *pData) char status; unsigned int unL

30、en;unsigned char ucMF522BufMA*RLEN; ucMF522Buf0 = PICC_READ; ucMF522Buf1 = addr; CalulateCRC(ucMF522Buf,2,&ucMF522Buf2); status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,4,ucMF522Buf,&unLen); if (status = MI_OK) & (unLen = 0*90) memcpy(pData, ucMF522Buf, 16); else status = MI_ERR; return status;/功能:寫(xiě)數(shù)據(jù)到M

31、1卡一塊/參數(shù)說(shuō)明: addrIN:塊地址/ pDataIN:寫(xiě)入的數(shù)據(jù),16字節(jié)/返回: 成功返回MI_OK/ char PcdWrite(unsigned char addr,unsigned char *pData) char status; unsigned int unLen; unsigned char ucMF522BufMA*RLEN; ucMF522Buf0 = PICC_WRITE; ucMF522Buf1 = addr; CalulateCRC(ucMF522Buf,2,&ucMF522Buf2); status = PcdMF522(PCD_TRANSCEIVE,ucM

32、F522Buf,4,ucMF522Buf,&unLen); if (status != MI_OK) | (unLen != 4) | (ucMF522Buf0 & 0*0F) != 0*0A) status = MI_ERR; if (status = MI_OK) memcpy(ucMF522Buf, pData, 16); CalulateCRC(ucMF522Buf,16,&ucMF522Buf16); status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,18,ucMF522Buf,&unLen); if (status != MI_OK) | (u

33、nLen != 4) | (ucMF522Buf0 & 0*0F) != 0*0A) status = MI_ERR; return status;/功能:命令卡片進(jìn)入休眠狀態(tài)/返回: 成功返回MI_OK/char PcdHalt(void) char status; unsigned int unLen; unsigned char ucMF522BufMA*RLEN; ucMF522Buf0 = PICC_HALT; ucMF522Buf1 = 0; CalulateCRC(ucMF522Buf,2,&ucMF522Buf2); status = PcdMF522(PCD_TRANSCEI

34、VE,ucMF522Buf,4,ucMF522Buf,&unLen); return MI_OK;/功能:復(fù)位RC522/返回: 成功返回MI_OK/char PcdReset(void)SET_RC522RST; delay_ns(10);CLR_RC522RST; delay_ns(10);SET_RC522RST; delay_ns(10); WriteRawRC(mandReg,PCD_RESETPHASE); delay_ns(10); WriteRawRC(ModeReg,0*3D); /和Mifare卡通訊,CRC初始值0*6363 WriteRawRC(TReloadRegL,

35、30); WriteRawRC(TReloadRegH,0); WriteRawRC(TModeReg,0*8D); WriteRawRC(TPrescalerReg,0*3E);WriteRawRC(T*AutoReg,0*40);/必須要 return MI_OK;/設(shè)置RC632的工作方式/char M500PcdConfigISOType(unsigned char type) if (type = A) /ISO14443_A ClearBitMask(Status2Reg,0*08); WriteRawRC(ModeReg,0*3D);/3F WriteRawRC(R*SelReg

36、,0*86);/84 WriteRawRC(RFCfgReg,0*7F); /4F WriteRawRC(TReloadRegL,30);/tmoLength);/ TReloadVal = h6a =tmoLength(dec) WriteRawRC(TReloadRegH,0); WriteRawRC(TModeReg,0*8D); WriteRawRC(TPrescalerReg,0*3E); delay_ns(1000); PcdAntennaOn(); else return -1; return MI_OK;/開(kāi)啟天線/每次啟動(dòng)或關(guān)閉天險(xiǎn)發(fā)射之間應(yīng)至少有1ms的間隔/void Pc

37、dAntennaOn(void) unsigned char i; i = ReadRawRC(T*ControlReg); if (!(i & 0*03) SetBitMask(T*ControlReg, 0*03); /關(guān)閉天線/void PcdAntennaOff(void)ClearBitMask(T*ControlReg, 0*03);void init_rc522(void) PcdReset(); PcdAntennaOff(); PcdAntennaOn(); M500PcdConfigISOType( A );/功能:扣款和充值/參數(shù)說(shuō)明: dd_modeIN:命令字/ 0*

38、C0 = 扣款/ 0*C1 = 充值/ addrIN:錢包地址/ pValueIN:4字節(jié)增(減)值,低位在前/返回: 成功返回MI_OK/ /*char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue) char status; unsigned int unLen; unsigned char ucMF522BufMA*RLEN; /unsigned char i; ucMF522Buf0 = dd_mode; ucMF522Buf1 = addr; CalulateCRC(ucMF522Buf

39、,2,&ucMF522Buf2); status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,4,ucMF522Buf,&unLen); if (status != MI_OK) | (unLen != 4) | (ucMF522Buf0 & 0*0F) != 0*0A) status = MI_ERR; if (status = MI_OK) memcpy(ucMF522Buf, pValue, 4); /for (i=0; i16; i+) / ucMF522Bufi = *(pValue+i); CalulateCRC(ucMF522Buf,4,&ucMF5

40、22Buf4); unLen = 0; status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,6,ucMF522Buf,&unLen);if (status != MI_ERR) status = MI_OK; if (status = MI_OK) ucMF522Buf0 = PICC_TRANSFER; ucMF522Buf1 = addr; CalulateCRC(ucMF522Buf,2,&ucMF522Buf2); status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,4,ucMF522Buf,&unLen); if

41、 (status != MI_OK) | (unLen != 4) | (ucMF522Buf0 & 0*0F) != 0*0A) status = MI_ERR; return status;*/功能:備份錢包/參數(shù)說(shuō)明: sourceaddrIN:源地址/ goaladdrIN:目標(biāo)地址/返回: 成功返回MI_OK/*char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr) char status; unsigned int unLen; unsigned char ucMF522BufMA*RLEN; ucMF5

42、22Buf0 = PICC_RESTORE; ucMF522Buf1 = sourceaddr; CalulateCRC(ucMF522Buf,2,&ucMF522Buf2); status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,4,ucMF522Buf,&unLen); if (status != MI_OK) | (unLen != 4) | (ucMF522Buf0 & 0*0F) != 0*0A) status = MI_ERR; if (status = MI_OK) ucMF522Buf0 = 0; ucMF522Buf1 = 0; ucMF52

43、2Buf2 = 0; ucMF522Buf3 = 0; CalulateCRC(ucMF522Buf,4,&ucMF522Buf4); status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,6,ucMF522Buf,&unLen);if (status != MI_ERR) status = MI_OK; if (status != MI_OK) return MI_ERR; ucMF522Buf0 = PICC_TRANSFER; ucMF522Buf1 = goaladdr; CalulateCRC(ucMF522Buf,2,&ucMF522Buf2);

44、status = PcdMF522(PCD_TRANSCEIVE,ucMF522Buf,4,ucMF522Buf,&unLen); if (status != MI_OK) | (unLen != 4) | (ucMF522Buf0 & 0*0F) != 0*0A) status = MI_ERR; return status;*/#include #include #include main.h#define uchar unsigned char#define uint unsigned int/*LCD12864 端口定義*/#define LCD_data P0 /數(shù)據(jù)口sbit LC

45、D_RS = P25; /存放器選擇輸入sbit LCD_RW = P26; /液晶讀/寫(xiě)控制sbit LCD_EN = P27; /液晶使能控制sbit LCM_RST = P32;/sbit LCD_PSB = P04; /串/并方式控制,局部液晶不需要uchar code dis0= IC卡門(mén)禁系統(tǒng) ;uchar code dis1=1.IC卡輸入 ;uchar code dis2=2.密碼輸入:8位 ;uchar code dis3=3.IC卡登記 ;uchar code dis4=4.密碼設(shè)置:8位 ;uchar code dis5=成功 ;uchar code dis6=失敗 ;v

46、oid delay(int ms) /延時(shí)*ms while(ms-) uchar i; for(i=0;i250;i+) _nop_(); _nop_();_nop_();_nop_(); void delayNOP() /延時(shí)4us _nop_(); _nop_(); _nop_(); _nop_(); /*/* */*因?yàn)橐_的定義DB0.DB7是從P1.7.P1.0排列的 */*所以順序需要調(diào)換一下 */* */*/ INT8U swapbit(INT8U udata) INT8U ii,tmp=0; for(ii=0;ii8;ii+) tmp=1; return tmp;/*/* *

47、/*檢查L(zhǎng)CD忙狀態(tài) */*lcd_busy為1時(shí),忙,等待。lcd-busy為0時(shí),閑,可寫(xiě)指令與數(shù)據(jù)。 */* */*/bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(LCD_data&0*80); LCD_EN = 0; return(result); /*/* */*寫(xiě)指令數(shù)據(jù)到LCD */*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */* */*/void write_cmd(unsigned char WCLCM,BuysC) unsign

48、ed int K=20000; while(lcd_busy() & K-); /預(yù)防沒(méi)插LCD時(shí)候停在這 LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); LCD_data = swapbit(WCLCM); delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */*寫(xiě)顯示數(shù)據(jù)到LCD */*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */* */*/void lcd_wdat(unsigned char WDLCM) unsigned int K=20000; while

49、(lcd_busy() & K-); /預(yù)防沒(méi)插LCD時(shí)候停在這 LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; LCD_data= swapbit(WDLCM); delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */* LCD初始化設(shè)定 */* */*/void lcd_init() / LCD_PSB = 1; /并口方式,局部液晶不需要 / LCM_RST =0; write_cmd(0*36); /擴(kuò)大指令操作 delay(5); write_cmd(0*30); /根本指令操delay(5); writ

50、e_cmd(0*0C); /顯示開(kāi),關(guān)光標(biāo) delay(5); write_cmd(0*01); /去除LCD的顯示容 delay(5); /*/* */* 設(shè)定顯示位置 */* */*/void lcd_pos(uchar *,uchar Y) uchar pos; if (*=0) *=0*80; else if (*=1) *=0*90; else if (*=2) *=0*88; else if (*=3) *=0*98; pos = *+Y ; write_cmd(pos); /顯示地址/*/* */* 顯示主程序 */* */*/void display_all() uchar i

51、; lcd_pos(0,0); /第一行顯示數(shù)字09 i = 0; while(dis0i != 0) lcd_wdat(dis0i); /顯示字母 i+; lcd_pos(1,0); /第二行顯示字母 i = 0; while(dis1i != 0) lcd_wdat(dis1i); /顯示字母 i+; lcd_pos(2,0); /第三行顯示文字 i = 0; while(dis2i != 0) lcd_wdat(dis2i); i+; lcd_pos(3,0); /第四行顯示廣工無(wú)線電社 i = 0; while(dis3i != 0) lcd_wdat(dis3i); i+; /*/* */* 特定字符顯示主程序 */* C:0= IC卡點(diǎn)臺(tái)燈 ;1=1.讀卡中. ;2=2.登記. ;3=成功 ;4=失敗 ;/*/void display(uchar a,uchar b,uchar c) uchar i; lcd_pos(a,b); /第一行顯示數(shù)字09 i = 0; switch(c) case 0: while(dis0i != 0) lcd_wdat(dis0i); /顯示字母 i+; break; case 1: while(dis1i != 0) lcd_wdat(dis

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論