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

正文內(nèi)容

糧倉管理系統(tǒng)的設(shè)計-資料下載頁

2025-10-16 09:12本頁面

【導(dǎo)讀】本文主要采用單片機技術(shù)、自動檢測技術(shù)對糧倉管理系統(tǒng)進行應(yīng)用設(shè)計。鐘芯片、液晶、儲存芯片、上位機等部分組成。無線接發(fā)模塊將檢測到糧倉的實時溫、應(yīng)的控制,為確保糧倉的良好環(huán)境提供了保證。預(yù)定的各項功能,測試各項性能指標(biāo)全部達(dá)到設(shè)計的要求。

  

【正文】 400Ms()。 } /***********按指定位置顯示一個字符 *******************************************/ void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) { if(Y1) Y=1。 if(Y4) Y=4。 X amp。= 0x0F。 //限制 X 不能大 于 16, Y 不能大于 1 switch(Y){ case 1:X|=0X80。break。 case 2:X|=0X90。break。 27 case 3:X|=0X88。break。 case 4:X|=0X98。break。 } WriteCommandLCD(X, 0)。 //這里不檢測忙信號,發(fā)送地址碼 WriteDataLCD(DData)。 } /***********按指定位置顯示一串字符 *****************************************/ void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) { unsigned char ListLength,X2。 ListLength = 0。 X2=X。 if(Y1) Y=1。 if(Y4) Y=4。 X amp。= 0x0F。 //限制 X 不能大于 16, Y 在 14 之內(nèi) switch(Y){ case 1:X2|=0X80。break。 //根據(jù)行數(shù)來選擇相應(yīng)地址 case 2:X2|=0X90。break。 case 3:X2|=0X88。break。 case 4:X2|=0X98。break。 } WriteCommandLCD(X2, 1)。 //發(fā)送地址碼 while (DData[ListLength]=0x20) //若到達(dá)字串尾則退出 { if (X = 0x0F) //X 坐標(biāo)應(yīng)小于 0xF { WriteDataLCD(DData[ListLength])。 ListLength++。 X++。 Delay5Ms()。 } } } /***********按指定位置顯示數(shù)組內(nèi)的數(shù)據(jù) *****************************************/ void DisplayDate(unsigned char X,unsigned char *DData) { unsigned char i。 WriteCommandLCD(X,1)。 for(i=0。i16。) { WriteDataLCD(*DData)。 28 DData++。 i++。 } } /***********短延時 ********************************************************/ void Delay5Ms(void) { unsigned int TempCyc = 5552。 while(TempCyc)。 } /***********長延時 ********************************************************/ void Delay400Ms(void) { unsigned char TempCycA = 5。 unsigned int TempCycB。 while(TempCycA) { TempCycB=7269。 while(TempCycB)。 } } /*************延時子函數(shù) *******************************************/ void delay(unsigned int timer) { while(timer)。 } include /***************************************************/ define TX_ADR_WIDTH 5 // 5 字節(jié)寬度的發(fā)送 /接收地址 define TX_PLOAD_WIDTH 6 //數(shù)據(jù)通道 4 個字節(jié)的有效數(shù)據(jù)寬度 uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x36,0x63,0x24,0x05,0x10}。 // 定義一個靜態(tài)發(fā)送地址 uchar RX_BUF[TX_PLOAD_WIDTH]={0}。 //接收緩沖區(qū) uchar TX_BUF[TX_PLOAD_WIDTH]={0}。 //發(fā)送緩沖區(qū) 29 uchar flag。 uchar bdata sta。 //定義一個零時狀態(tài)變量,來存儲讀操作時,讀出的配置寄存器的狀態(tài)字 sbit RX_DR = sta^6。 //剛剛定義的狀態(tài)變量的位定義,第六位定義 sbit TX_DS = sta^5。 //剛剛定義的狀態(tài)變量的位定義,第五位定義 sbit MAX_RT = sta^4。 /**************************************************/ /************************************************** 函數(shù) : init_io() 描述 : 初始化 24L01 的 IO 口 /**************************************************/ void init_io(void) { CE = 0。 // 待機 CSN = 1。 // SPI 禁止 SCK = 0。 IRQ = 1。 // 中斷復(fù)位,也可以將這個腳接在外部中斷口上,這時就不用初始化這個腳,直接由中斷程序檢測就行 EA = 0。 } /**************************************************/ /************************************************** 函數(shù): delay_ms() 描述: 延遲 x 毫秒 /************************************************** void delay_ms(uchar x) { uchar i, j。 i = 0。 for(i=0。 ix。 i++) { j = while(j)。 j = while(j)。 } } 30 /**************************************************/ /************************************************** 函數(shù): SPI_RW() 描述: 根據(jù) SPI 協(xié)議,寫一字節(jié)數(shù)據(jù)到 nRF24L01,同時從 nRF24L01 讀出一字節(jié) 這個函數(shù)的作用是選擇寄存器,并對寄存器做出相應(yīng)的操作, 至于到底做什么樣操作就取決于 byte, byte 的格式, 數(shù)值就是芯片的 SPI 指令格式,在模塊資料里的 13 頁圖 8 中有相應(yīng)的功能說明 /**************************************************/ uchar SPI_RW(uchar byte) { uchar i。 for(i=0。 i8。 i++) { 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é) ,這個字節(jié)是狀態(tài)寄存器里面的值,標(biāo)志該模塊此時的狀態(tài),時序圖里面的 Sn,用不用雖你 } /**************************************************/ /************************************************** 函數(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)寄存器 } 31 /**************************************************/ /************************************************** 函數(shù): SPI_Read() 描述: 從 reg 寄存器讀一字節(jié)(數(shù)據(jù)) /**************************************************/ uchar SPI_Read(uchar reg) { uchar reg_val。 CSN = 0。 // CSN 置低,開始傳輸數(shù)據(jù) SPI_RW(reg)。 // 選擇寄存器,此時已經(jīng)有讀回一個字節(jié)了,可是這個字節(jié)是現(xiàn)階段的狀態(tài)寄存位,即時序圖中的 Sn。不是想要的數(shù)據(jù) reg_val = SPI_RW(0)。 // 然后從該寄存器讀數(shù)據(jù),這里 SPI_RW()。函數(shù)里為什么是 0, 0 并不是意味著 MOSI 會重新設(shè)定寄存器的地址,而是延時一個語句的時間,然后繼續(xù)產(chǎn)生 sck 時鐘信號從而讀出數(shù)據(jù) CSN = 1。 // CSN 拉高,結(jié)束數(shù)據(jù)傳輸 return(reg_val)。 // 返回寄存器數(shù)據(jù) } /**************************************************/ /************************************************** 函數(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)寄存器 } /**************************************************/
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1