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

正文內(nèi)容

基于物聯(lián)網(wǎng)技術(shù)的室內(nèi)led智能照明控制系統(tǒng)-資料下載頁(yè)

2025-10-29 21:19本頁(yè)面

【導(dǎo)讀】基礎(chǔ)AT指令........

  

【正文】 DIO=1。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 DIO=0。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 } //低速模式數(shù)碼 BIT1(高電平時(shí)間: 2020ns 低電平時(shí)間: 500ns ) void h_dat1() { DIO=1。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 nop。 DIO=0。 } //RGB 顯示控制程序 void Reset(void) { DIO=1。 nop。 基于物聯(lián)網(wǎng)技術(shù)的室內(nèi) LED 照明控制系統(tǒng) 30 DIO=0。 delay_nms(1)。 } //===================發(fā)送 RGB 灰度數(shù)據(jù) =================== void send_single_data() //數(shù)據(jù)格式: G7~G0~R7~R0~B7~B0 { LED_DAT=GG。 if(bit7) h_dat1()。 else h_dat0()。 if(bit6) h_dat1()。 else h_dat0()。 if(bit5) h_dat1()。 else h_dat0()。 if(bit4) h_dat1()。 else h_dat0()。 if(bit3) h_dat1()。 else h_dat0()。 if(bit2) h_dat1()。 else h_dat0()。 if(bit1) h_dat1()。 else h_dat0()。 if(bit0) h_dat1()。 else h_dat0()。 LED_DAT=RR。 if(bit7) h_dat1()。 else h_dat0()。 if(bit6) h_dat1()。 else h_dat0()。 if(bit5) h_dat1()。 else h_dat0()。 if(bit4) h_dat1()。 else h_dat0()。 if(bit3) h_dat1()。 else h_dat0()。 if(bit2) h_dat1()。 else h_dat0()。 if(bit1) h_dat1()。 else h_dat0()。 if(bit0) h_dat1()。 else h_dat0()。 LED_DAT=BB。 if(bit7) h_dat1()。 else h_dat0()。 基于物聯(lián)網(wǎng)技術(shù)的室內(nèi) LED 照明控制系統(tǒng) 31 if(bit6) h_dat1()。 else h_dat0()。 if(bit5) h_dat1()。 else h_dat0()。 if(bit4) h_dat1()。 else h_dat0()。 if(bit3) h_dat1()。 else h_dat0()。 if(bit2) h_dat1()。 else h_dat0()。 if(bit1) h_dat1()。 else h_dat0()。 if(bit0) h_dat1()。 else h_dat0()。 } WIFI驅(qū)動(dòng)編寫(xiě) ESP8266 WIFI 模塊具有透?jìng)鞴δ埽诔跏蓟O(shè)置好網(wǎng)絡(luò)參數(shù)建立鏈路連接后即可通過(guò)命令進(jìn)入透?jìng)髂J?,透?jìng)髂J较?Host 通過(guò) uart 將數(shù)據(jù)發(fā)給 ESP8266, ESP8266 再通過(guò)無(wú)線網(wǎng)絡(luò)將數(shù)據(jù)傳出去; ESP8266 通過(guò)無(wú)線網(wǎng)絡(luò)接收到 的數(shù)據(jù),同理通過(guò) uart 傳到 Host。 ESP8266 只負(fù)責(zé)將數(shù)據(jù)傳到目標(biāo)地址,不對(duì)數(shù)據(jù)進(jìn)行處理,發(fā)送方和接收方的數(shù)據(jù)內(nèi)容、長(zhǎng)度完全一致,傳輸過(guò)程就好像透明一樣。 本系統(tǒng)就是采用了這種方式來(lái)實(shí)現(xiàn)的網(wǎng)絡(luò)數(shù)據(jù)包收發(fā),在串口透?jìng)髂J较?,ESP8266 模塊 擁有數(shù)據(jù)包自動(dòng)打包機(jī)制, ESP8266 判斷 UART 傳來(lái)的數(shù)據(jù)時(shí)間間隔,若時(shí)間間隔大于 20ms,則認(rèn)為一幀結(jié)束;否則,一直接收數(shù)據(jù)到上限值2KB,認(rèn)為一幀結(jié)束。 ESP8266 模塊判斷 UART 來(lái)的數(shù)據(jù)一幀結(jié)束后,通過(guò) WIFI接口將數(shù)據(jù)轉(zhuǎn)發(fā)出去。 成幀時(shí)間間隔為 20ms,一幀上限值為 2KB。 基于物聯(lián)網(wǎng)的室內(nèi) LED 照明控制系統(tǒng)在上電后會(huì)把 WIFI 模塊配置為 AP模式,然后配置好相應(yīng)網(wǎng)絡(luò)參數(shù),隨即進(jìn)入透?jìng)髂J剑旅娓缴?ESP8266 模塊初始化代碼。 UART_Init()。 delay_nms(4000)。 //ESP8266 網(wǎng)絡(luò)初始化 UART_Send_Str(AT+CWMODE=2\r\n)。 //設(shè)置成路由模式 基于物聯(lián)網(wǎng)技術(shù)的室內(nèi) LED 照明控制系統(tǒng) 32 delay_nms(1000)。 UART_Send_Str(AT+CWSAP=\My_RGB\,\0123456789\,11,4\r\n)。 //設(shè)置路由 SSID 和密碼 delay_nms(1000)。 UART_Send_Str(AT+RST\r\n)。 //復(fù)位重啟 delay_nms(4000)。 UART_Send_Str(AT+CIPMUX=0\r\n)。 //設(shè)置成單連接 delay_nms(1000)。 UART_Send_Str(AT+CIPSTART=\UDP\,\\,7136,7671\r\n)。 //連接 UDP 客戶(hù)端 delay_nms(1000)。 UART_Send_Str(AT+CIPMODE=1\r\n)。 //進(jìn)入透?jìng)髂J? delay_nms(1000)。 數(shù)據(jù)幀處理機(jī)制 通信中的數(shù)據(jù)往往以數(shù)據(jù)包的形式進(jìn)行傳送的,我們把這樣的一個(gè)數(shù)據(jù)包稱(chēng)作為一幀數(shù)據(jù)。類(lèi)似于網(wǎng)絡(luò)通信中的 TCPIP 協(xié)議一般,比較可靠的通信協(xié)議往往包含有以下幾個(gè)組成部分:幀頭、地址信息、數(shù)據(jù)類(lèi)型、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)塊、校驗(yàn)碼、幀尾。 幀頭和幀尾用于數(shù)據(jù)包完整性的判別,通常選擇一定長(zhǎng)度的固定字節(jié)組成,要求是在整個(gè)數(shù)據(jù)鏈中判別數(shù)據(jù)包的誤碼率越低越好。減小固定字節(jié)數(shù)據(jù)的匹配機(jī)會(huì),也就是說(shuō)使幀頭和幀 尾的特征字節(jié)在整個(gè)數(shù)據(jù)鏈中能夠匹配的機(jī)會(huì)最小。通常有兩種做法,一、減小特征字節(jié)的匹配幾率。二、增加特征字節(jié)的長(zhǎng)度。通常選取第一種方法的情況是整個(gè)數(shù)據(jù)鏈路中的數(shù)據(jù)不具有隨即性,數(shù)據(jù)可預(yù)測(cè),可以通過(guò)人為選擇幀頭和幀尾的特征字來(lái)避開(kāi),從而減小特征字節(jié)的匹配幾率。使用第二種方法的情況更加通用,適合于數(shù)據(jù)隨即的場(chǎng)合。通過(guò)增加特征字節(jié)的長(zhǎng)度減小匹配幾率,雖然不能夠完全的避免匹配的情況,但可以使匹配幾率大大減小,如果碰到匹配的情況也可以由校驗(yàn)碼來(lái)進(jìn)行檢測(cè),因此基于物聯(lián)網(wǎng)技術(shù)的室內(nèi) LED 照明控制系統(tǒng) 33 這種情況在絕大多說(shuō)情況下比較可靠。 下位機(jī)接收數(shù)據(jù)有兩種方式, 一、等待接收,處理器一直查詢(xún)串口狀態(tài),來(lái)判斷是否接收到數(shù)據(jù)。二、中斷接收。本系統(tǒng)采用中斷接收的方法,選擇中斷接收法效率比較高而且不會(huì)丟失數(shù)據(jù),數(shù)據(jù)包的解析過(guò)程可以設(shè)置到不同的位置。如果協(xié)議比較簡(jiǎn)單,整個(gè)系統(tǒng)只是處理一些簡(jiǎn)單的命令,那么可以直接把數(shù)據(jù)包的解析過(guò)程放入到中斷處理函數(shù)中,當(dāng)收到正確的數(shù)據(jù)包的時(shí)候,置位相應(yīng)的標(biāo)志,在主程序中再對(duì)命令進(jìn)行處理。如果協(xié)議稍微復(fù)雜,比較好的方式是將接收的數(shù)據(jù)存放于緩沖區(qū)中,主程序讀取數(shù)據(jù)后進(jìn)行解析。也有兩種方式交叉使用的,比如一對(duì)多的系統(tǒng)中,首先在接收中斷中解析 “連接 ”命 令,連接命令接收到后主程序進(jìn)入設(shè)置狀態(tài),采用查詢(xún)的方式來(lái)解析其余的協(xié)議。 在這個(gè)系統(tǒng)中,數(shù)據(jù)幀結(jié)構(gòu)并不復(fù)雜。所有的協(xié)議全部在串口中斷中進(jìn)行。數(shù)據(jù)包的解析代碼如下: /**************************************** CMD 指令解析引擎 at_scan 函數(shù)用于監(jiān)測(cè) s 開(kāi)頭 ,并存儲(chǔ)一條數(shù)據(jù) ,此例放到串口接收中斷 at_cmp 函數(shù)用于解析存儲(chǔ)的 AT 數(shù)組 ,并執(zhí)行相應(yīng)命令 結(jié)構(gòu)體部分位 AT 指令描述以及函數(shù)的對(duì)應(yīng)關(guān)系 ******************************************/ include include include unsigned int uart_timer=0。 code unsigned char at_head[AT_HEAD_LEN]={39。s39。}。 //指令開(kāi)頭 unsigned char addr_cmp=0。 //AT 指令開(kāi)頭校驗(yàn)位置 unsigned char at_addr=0。 //AT 緩沖區(qū)最后一個(gè)數(shù)據(jù)位置 bit at_head_flag=0。 //檢測(cè) AT 指令 開(kāi)頭標(biāo)志位 基于物聯(lián)網(wǎng)技術(shù)的室內(nèi) LED 照明控制系統(tǒng) 34 unsigned char at_buf[AT_BUF_MAX]={0}。 code AT_STRUCT at_array[AT_CMD_COUNT]= { {red=,4,1,amp。cmd_red}, {green=,6,1,amp。cmd_green}, {blue=,5,1,amp。cmd_blue} }。 //監(jiān)測(cè) AT 開(kāi)頭并將 AT 命令存儲(chǔ)到緩沖區(qū) void at_scan(void) { if(at_head_flag) if(at_addrAT_BUF_MAX) at_buf[at_addr++]=SBUF。 if(SBUF==at_head[addr_cmp]) addr_cmp++。 else addr_cmp=0。 if(addr_cmp==AT_HEAD_LEN) { at_head_flag=1。 addr_cmp=0。 at_addr=0。 } uart_timer=0。 } //比較兩個(gè)字符串 cont 字節(jié) ,相同為 1,否則返回 0 unsigned char at_cmp(unsigned char *s,unsigned char count) { unsigned char res。 基于物聯(lián)網(wǎng)技術(shù)的室內(nèi) LED 照明控制系統(tǒng) 35 for(res=0。rescount。res++) { if(*(s+res) != at_buf[res]) return 0。 } return 1。 } //AT 指令解析后并執(zhí)行相應(yīng)函數(shù) void CMD(void) { unsigned char i。 uart_timer++。 if(at_head_flag) { for(i=0。iAT_CMD_COUNT。i++) { if(at_addr = (at_array[i].cmd_len+at_array[i].data_len)) { if( (uart_timer 1000) amp。amp。 at_cmp(at_array[i].s,at_array[i].cmd_len)) { at_head_flag=0。 (*at_array[i].Subs)()。 } } } } 基于物聯(lián)網(wǎng)技術(shù)的室內(nèi) LED 照明控制系統(tǒng) 36 } void cmd_green(void) { unsigned char i。 GG=0。 for(i=at_array[1].cmd_len。iat_addr。i++) { GG *= 10。 GG += (at_buf[i] 0x30)。 } send_string_data()。 } void cmd_red(void) { unsigned char i。 RR=0。 for(i=at_array[0].cmd_len。iat_addr。i++) { RR *= 10。 RR += (at_buf[i] 0x30)。 } send_string_data()。 } void cmd_blue(void) { 基于物聯(lián)網(wǎng)技術(shù)的室內(nèi) LED 照明控制系統(tǒng) 37 unsigned char i。 BB=0。 // UART_Send_Str(blue\r\n)。 for(i=at_array[2].cmd_len。iat_addr。i++) { // UART_Send_Byte(at_buf[i])。 BB *= 10。 BB += (at_buf[i]
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1