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

正文內(nèi)容

基于nrf24l01無線收發(fā)模塊的無線輸入密碼鎖的設(shè)計畢業(yè)論文(編輯修改稿)

2025-07-24 18:04 本頁面
 

【文章內(nèi)容簡介】 (0x00,1)。 } }}/*LCD_write_shu: 顯示8(寬)*16(高)點陣列數(shù)字字母符號等半角類輸入?yún)?shù):c:顯示的字符;*/void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:頁 dd:字符{ unsigned char i。 LCD_set_XY(row*8, page)。// 列,頁 for(i=0。 i8。i++) { LCD_write_byte(shuzi[c*16+i],1)。 } LCD_set_XY(row*8, page+1)。// 列,頁 for(i=8。 i16。i++) { LCD_write_byte(shuzi[c*16+i],1)。 } }/*LCD_write_hanzi: 顯示16(寬)*16(高)點陣列漢字等半角類輸入?yún)?shù):c:顯示的字符;*/void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:頁 dd:字符{ unsigned char i。 LCD_set_XY(row*8, page)。// 列,頁 for(i=0。 i16。i++) { LCD_write_byte(hanzi[c*32+i],1)。 } LCD_set_XY(row*8, page+1)。// 列,頁 for(i=16。 i32。i++) { LCD_write_byte(hanzi[c*32+i],1)。 } }AT24C02程序設(shè)計本設(shè)計中數(shù)據(jù)的存儲芯片選用的是AT24C02,該芯片是串行的EEPROM,支持I2C總線數(shù)據(jù)傳送協(xié)議。在本系統(tǒng)中主要用來做掉電存儲器,能將輸入的數(shù)據(jù)存入AT24C02,也能從AT24C02中讀出,程序流程圖如圖45所示:開始初始化AT24C04向AT24C04中寫入要存儲數(shù)據(jù)據(jù)延時從AT24C04中讀出存儲數(shù)據(jù)延時結(jié)束圖45 存儲和讀出程序流程圖 AT24C02的讀寫是應(yīng)用的I2C總線。所以要對它進行操作,最核心的是要懂得I2C總線。一下是以I2C總線時序為基礎(chǔ)對AT24C02進行操作的最底層函數(shù)。 void start() //開始位 { SDA = 1。 SCL = 1。 delayNOP()。 SDA = 0。 delayNOP()。 SCL = 0。 } /**********************************************************/ void stop() // 停止位 { SDA = 0。 delayNOP()。 SCL = 1。 delayNOP()。 SDA = 1。 } /**********************************************************/ uchar shin() // 從AT24C02移出數(shù)據(jù)到MCU { uchar i,read_data。 for(i = 0。 i 8。 i++) { SCL = 1。 read_data = 1。 read_data |= SDA。 SCL = 0。 } return(read_data)。 } /**********************************************************/ bit shout(uchar write_data) // 從MCU移出數(shù)據(jù)到AT24C02 { uchar i。 bit ack_bit。 for(i = 0。 i 8。 i++) // 循環(huán)移入8個位 { SDA = (bit)(write_data amp。 0x80)。 _nop_()。 SCL = 1。 delayNOP()。 SCL = 0。 write_data = 1。 } SDA = 1。 // 讀取應(yīng)答 delayNOP()。 SCL = 1。 delayNOP()。 ack_bit = SDA。 SCL = 0。 return ack_bit。 // 返回AT24C02應(yīng)答位 } NRF24L01無線收發(fā)程序設(shè)計NRF24L01屬于SPI時序芯片。而52單片機并不帶有SPI接口。所以我們只能在軟件中模擬SPI時序。開始初始化NRF24L01設(shè)置成接收模式接收數(shù)據(jù)結(jié)束圖46 NRF24L01程序流圖以下是NRF24L01最核心的SPI讀寫程序,用于其指定寄存器的讀寫。/**************************************************函數(shù):SPI_Write_Buf()描述:把pBuf緩存中的數(shù)據(jù)寫入到nRF24L01,通常用來寫入發(fā) 射通道數(shù)據(jù)或接收/發(fā)送地址/**************************************************/uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes){ uchar status, i。 CSN = 0。 // CSN置低,開始傳輸數(shù)據(jù) status = SPI_RW(reg)。 // 選擇寄存器,同時返回狀態(tài)字 for(i=0。 ibytes。 i++) SPI_RW(pBuf[i])。 // 逐個字節(jié)寫入nRF24L01 CSN = 1。 // CSN拉高,結(jié)束數(shù)據(jù)傳輸 return(status)。 // 返回狀態(tài)寄存器}/**************************************************//**************************************************函數(shù):SPI_Read_Buf()描述:從reg寄存器讀出bytes個字節(jié),通常用來讀取接收通道 數(shù)據(jù)或接收/發(fā)送地址/**************************************************/uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes){ uchar status, i。 CSN = 0。 // CSN置低,開始傳輸數(shù)據(jù) status = SPI_RW(reg)。 // 選擇寄存器,同時返回狀態(tài)字 for(i=0。 ibytes。 i++) pBuf[i] = SPI_RW(0)。 // 逐個字節(jié)從nRF24L01讀出 CSN = 1。 // CSN拉高,結(jié)束數(shù)據(jù)傳輸 return(status)。 // 返回狀態(tài)寄存器}/**************************************************//**************************************************函數(shù):SPI_Read()描述:從reg寄存器讀一字節(jié)/**************************************************/uchar SPI_Read(uchar reg){ uchar reg_val。 CSN = 0。 // CSN置低,開始傳輸數(shù)據(jù) SPI_RW(reg)。 // 選擇寄存器 reg_val = SPI_RW(0)。 // 然后從該寄存器讀數(shù)據(jù) CSN = 1。 // CSN拉高,結(jié)束數(shù)據(jù)傳輸 return(reg_val)。 // 返回寄存器數(shù)據(jù)}/**************************************************//**************************************************函數(shù):SPI_RW_Reg()描述: 寫數(shù)據(jù)value到reg寄存器/**************************************************/uchar SPI_RW_Reg(uchar reg, uchar value){ uchar status。 CSN = 0。 // CSN置低,開始傳輸數(shù)據(jù) status = SPI_RW(reg)。 // 選擇寄存器,同時返回狀態(tài)字 SPI_RW(value)。 // 然后寫數(shù)據(jù)到該寄存器 CSN = 1。 // CSN拉高,結(jié)束數(shù)據(jù)傳輸 return(status)。 // 返回狀態(tài)寄存器}/**************************************************//**************************************************函數(shù):SPI_RW()描述:根據(jù)SPI協(xié)議,寫一字節(jié)數(shù)據(jù)到nRF24L01,同時從nRF24L01 讀出一字節(jié)/**************************************************/uchar SPI_RW(uchar byte){ uchar i。 for(i=0。 i8。 i++) // 循環(huán)8次 { MOSI = (byte amp。 0x80)。 // byte最高位輸出到MOSI byte = 1。 // 低一位移位到最高位 SCK = 1。 // 拉高SCK,nRF24L01從MOSI讀入1位數(shù)據(jù),同時從MISO輸出1位數(shù)據(jù) byte |= MISO。 // 讀MISO到byte最低位 SCK = 0。 // SCK置低 } return(byte)。 // 返回讀出的一字節(jié)}/**************************************************/ 遙控部分程序設(shè)計無線鍵盤的程序流程如圖47: 開始初始化 是否有按鍵按下? 否是發(fā)射鍵值接收模式結(jié)束圖47 無線密碼鎖部分流程圖無線鍵盤涉及到的程序有NRF24L01子程序以及矩陣鍵盤子程序,詳細(xì)程序見附錄。 5 小區(qū)智能密碼鎖系統(tǒng)調(diào)試系統(tǒng)調(diào)試是設(shè)計成功與否的關(guān)鍵步驟,好的調(diào)試技巧與方法對于調(diào)試的效率甚至成敗起到?jīng)Q定性的作用。對于該小區(qū)智能密碼鎖,模塊較多,程序龐大。因此對于調(diào)試就要求要有較高的技巧和較為系統(tǒng)的方法。對于這個系統(tǒng),我采用的是逐個模塊調(diào)試成功后將程序打包,最后將各個模塊聯(lián)調(diào)的方式。 無線收發(fā)模塊NRF24L01的調(diào)試無線信號傳輸是一種看不見摸不著的傳輸方式。載波頻率極高,一般示波器很難看到它的收發(fā)波形。這給調(diào)試帶來了極大困難。調(diào)試的第一步是要做硬件。為了使NRF24L01芯片與52單片機達到兼容,我設(shè)計了一個電平轉(zhuǎn)換電路,經(jīng)過電路仿真、實際試驗確定電平轉(zhuǎn)換電路切實可行后將它與52單片機連接。做好一對52單片機最小系統(tǒng)與NRF24L01模塊組成的電路,各自再加上一個LED燈與單片機I/O口相連。這樣,一個最簡單的NRF24L01調(diào)試電路便設(shè)計完成。為了驗證最小電路的正確性,我編寫了一個最簡單的LED閃爍程序。LED燈能夠正常閃爍則可證明硬件可行。接下來是軟件調(diào)試。目的是要利用NRF24L01進行數(shù)據(jù)傳輸。我首先設(shè)定的調(diào)試目標(biāo)是用一個電路作為發(fā)射端,另外一個作為接收端,發(fā)射端發(fā)射數(shù)據(jù)點亮接收端的LED燈。為此我嚴(yán)格按照NRF2
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1