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

正文內(nèi)容

基于單片機的門禁系統(tǒng)設(shè)計54536(編輯修改稿)

2024-07-21 15:56 本頁面
 

【文章內(nèi)容簡介】 無線傳輸子程序,及LCD顯示程序。圖41為程序的主流程圖。開始系統(tǒng)初始化讀取門禁號監(jiān)控門禁信號有卡進(jìn)入感應(yīng)區(qū)?N門禁狀態(tài)異常?Y報警NY卡號合法?Y讀卡號圖41 主流程圖 單片機初始化設(shè)置include util/ include avr/ include util/include avr///include //宏定義define uc unsigned char define LCD_DIR DDRDdefine LCD_PORT_OUT PORTDdefine LCD_PORT_IN PIND、define RFID_START 0x10define RFID_ADDR 0xFFdefine READ_BLOCK 0x52uc rfid_rdata[20]。uc rfid_rcount。//函數(shù)聲明 void Decode_numeral(uc figure)。 void Lcd_Wcmd(uc cmd)。 void Lcd_Wdat(uc data)。 //////////////////////////////////////////////////////////定義I/O輸出端口define RST 4define RST_H() PORTB |= (1 RST)define RST_L() PORTB amp。= ~(1 RST)define RS 5define RS_DATA() PORTB |= (1 RS)define RS_INSTRUCTION() PORTB amp。= ~(1 RS)define RW 6define RW_READ() PORTB |= (1 RW)define RW_WRITE() PORTB amp。= ~(1 RW)define EN 7define EN_H() PORTB |= (1 EN)define EN_L() PORTB amp。= ~(1 EN)define M_DIR 6//定義全局變量uc numeral_hour_counter=20。uc numeral_second_counter=00。uc numeral_minute_counter=01。uc BCD_code[6]。uc int lock_number。/******************************************************** * 函數(shù)名稱:MCU_Init * * 入口參數(shù):N/A * * 返回參數(shù):N/A * * 函數(shù)說明:初始化MCU寄存器 * *******************************************************/ void MCU_Init(void){ DDRA = 0xFF。 DDRB = 0xFF。 DDRC = 0xC0。 LCD_DIR = 0xFF。 PORTA = 0xFF。 PORTB = 0x00。 PORTC |= 0xC0。 LCD_PORT_OUT = 0xFF。}在讀取讀卡器的數(shù)據(jù)時需要用到ATmega16單片機通用同步和異步串行接收器和轉(zhuǎn)發(fā)器(USART) 的功能,它是一個高度靈活的串行通訊設(shè)備。USART 支持4 種模式的時鐘: 正常的異步模式,倍速的異步模式,主機同步模式,以及從機同步模式。USART 控制位UMSEL和狀態(tài)寄存器C (UCSRC) 用于選擇異步模式和同步模式。倍速模式( 只適用于異步模式) 受控于UCSRA 寄存器的U2X。使用同步模式 (UMSEL = 1) 時,XCK 的數(shù)據(jù)方向寄存器(DDR_XCK)決定時鐘源是由內(nèi)部產(chǎn)生(主機模式)還是由外部生產(chǎn)(從機模式)。僅在同步模式下XCK 有效。本設(shè)計中采用外[鍵入文檔的引述或關(guān)注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。]部中斷T0定時掃描,檢測有否數(shù)據(jù)讀進(jìn)[16]。串口通信子程序主要負(fù)責(zé)將讀卡器里的數(shù)據(jù)通過串口讀取出來。圖42為串口接收狀態(tài)時流程圖,圖43為串口發(fā)送狀態(tài)時的流程圖。串口初始化等待接收數(shù)據(jù) NRXC=1?Y 讀接收緩沖器數(shù)據(jù)接收完畢42 串口接收流程圖 串口初始化等待發(fā)送緩沖器為空寫數(shù)據(jù)到發(fā)送緩沖器中數(shù)據(jù)發(fā)送結(jié)束YNTXC=1? 圖43 串口發(fā)送流程圖串口通信的子程序如下:/******************************************************** * 函數(shù)名稱:USART_INIT( ) * 入口參數(shù):N/A * 返回參數(shù):N/A * 函數(shù)說明:出刷串口 *******************************************************/ void USART_INIT(void){ UCSRB |= 0x18。 //時能接收發(fā)送器 UCSRB amp。= 0x04。 UCSRC |= 0x86。 UBRRL = 0x17 。 //設(shè)置波特率為19200,數(shù)據(jù)格式為8位數(shù)據(jù),無奇偶校驗,1位停止位 } /******************************************************** * 函數(shù)名稱:get_char() * * 入口參數(shù):N/A * * 返回參數(shù):a * * 函數(shù)說明:串口接收一個字符 * *******************************************************/ uc get_char(void){ uc a。 while(UCSRAamp。0x80) { UDR = a 。 while(UCSRAamp。0x80)) { } }} /******************************************************** * 函數(shù)名稱:put_char() * * 入口參數(shù):a * * 返回參數(shù):N/A * * 函數(shù)說明:串口發(fā)送一個字符 * *******************************************************/ void put_char(uc a){ while(~(UCSRAamp。0x40)) { UDR = a。 } while(UCSRAamp。0x40) { }} /******************************************************** * 函數(shù)名稱:put_str() * * 入口參數(shù):* pstr * * 返回參數(shù):N/A * * 函數(shù)說明:串口發(fā)送一個字符串 * *******************************************************/ void put_str(const char* pstr)//輸出字符串{ while(39。\039。 != *pstr) { get_char(*pstr++)。 }}/******************************************************** * 函數(shù)名稱:rfid_rblock_eb() * * 入口參數(shù):N/A * * 返回參數(shù):N/A * * 函數(shù)說明:讀RFID數(shù)據(jù) * *******************************************************/ void rfid_rblock_eb(void)//讀塊數(shù)據(jù){ uc i。 put_char(RFID_START)。 put_char(RFID_ADDR)。 put_char(READ_BLOCK)。 put_char(1)。 //塊號1 rfid_rdata[0] = get_char()。 rfid_rdata[1] = get_char()。 rfid_rdata[2] = get_char()。 rfid_rcount = rfid_rdata[2] + 3。 for(i = 3。 i rfid_rcount。 i++) { rfid_rdata[i] = get_char()。 }}無線通信子程序主要負(fù)責(zé)將單片機的數(shù)據(jù)通過串口傳輸給無線傳輸模塊,再由無線傳輸模塊發(fā)射給PC機[17]。圖44是無線通信子程序的流程圖。T0初始化開全局中斷和T0中斷T0V0=1向串口寫RFID數(shù)據(jù)命令讀串口RFID數(shù)據(jù)將接收數(shù)據(jù)發(fā)送到PC機等待接收PC端數(shù)據(jù)開鎖蜂鳴器報警NYYN鎖復(fù)位數(shù)據(jù)合法?Rfidrcount=8?圖44 無線通信流程圖無線通信子程序如下:/*******************************************************///FUNC:T0_init()///外部中斷初始化,T0掃描RFID模塊*******************************************************/void T0_init(void){ TCCR0 |= 0x05。 /// CLKio/1024 TIMSK |= 0x01。 /// enable timer0 TCNT0 = 111。}///FUNC:TIMER0_OVF_vect///定時器0中斷函數(shù) 給PC機發(fā)送從RFID接受到的數(shù)據(jù)ISR(TIMER0_OVF_vect){ rfid_rblock_eb()。 if(rfid_rcount==8) //檢測到卡數(shù)據(jù),將數(shù)據(jù)發(fā)送給PC { RF12_SEND(rfid_rdata[4])。 RF12_SEND(rfid_rdata[5])。 RF12_SEND(rfid_rdata[6])。 RF12_SEND(rfid_rdata[7])。 while(PORTBamp。0x10) { } lock_number = RF12_RECV( )。//收到PC返回的正確用戶命令,開鎖 if(lock_number==0xFF) { PORTD amp。=0xF7。 }} LCD顯示子程序LCD顯示子程序負(fù)責(zé)顯示當(dāng)前時間,根據(jù)不同的刷卡結(jié)果顯示對應(yīng)的字型。圖45為流程圖。入口LCD初始化功能設(shè)置清顯示RAM區(qū)獲得要顯示RAM地址延時1ms寫入相應(yīng)數(shù)據(jù)返回主程序NY數(shù)據(jù)顯示完畢?圖45 LCD顯示子程序流程圖LCD顯示子程序如下:/******************************************************** * 函數(shù)名稱:delay_nms * * 入口參數(shù):ms * * 返回參數(shù):N/A * * 函數(shù)說明:產(chǎn)生1ms演示 * *******************************************************/ void delay_nms(unsigned int ms) { while(ms) { _delay_ms(1)。 } }/********************************************************/******************************************************** * 函數(shù)名稱:Lcd_Init * 入口參數(shù):N/A * 返回參數(shù):N/A * 函數(shù)說明:initialize lcd *******************************************************/ void Lcd_Init(void) { RST_L()。 delay_nms(1)。
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1