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

正文內容

基于stm32的智能家居系統(tǒng)設計(編輯修改稿)

2025-07-23 09:40 本頁面
 

【文章內容簡介】 主存儲塊的編程:主存儲模塊的程序編寫每一次只可以寫16bit,當寄存器的PG位被設置為1時,在一個Flash地址寫入一個16位將會進行一次編程;寫入任何其他的數(shù)字或者數(shù)據(jù),總線上都會產生錯誤信息,當發(fā)現(xiàn)讀取閃存時會使CPU停止工作,有可能是FPEC設置錯誤產生的。 建議對主存儲塊使用如下過程進行編寫程序: 1.檢查寄存器的BSY位,確認所有的其他程序操作沒有占用。2.選擇編程操作。 3.在指定的地址寫入要編程的半字,切記不要輸入其他的數(shù)字。 4.設置一段延時,等待寄存器的BSY位變?yōu)?。 5.再一次查詢寄存器的EOP位,若EOP為1表示此次操作是成功的。 顯示方案分析在數(shù)據(jù)顯示方面上,常用的實驗器材有兩種可供選擇,12864液晶和1602液晶,12864 顧名思義像素是128乘以64,能顯示32個漢字,如果型號不同,待的漢子庫不同,能顯示的數(shù)字和效果都會有所不同,功能相比1602強大很多,1602只能顯示符號、數(shù)字和字母能顯示32個字符,但寄存器不止32個,可以將內容滾動顯示出來,顯示字符的順序也可以設置,從左往右或者相反都可以,因為其功能和顯示效果簡單,價格比12864少很多,在嵌入式使用方面,兩者難度差不多,原理也相近,只要配置好指令、地址、數(shù)據(jù)即可。智能家居的在顯示方面需要同時顯示幾行數(shù)據(jù),而1602每一次顯示的數(shù)據(jù)過少,相互比較而言12864是不錯的選擇。 功能設計智能家居設備可以同時檢測三個不同區(qū)域的氣體濃度,三個地方溫濕度情況,三個地域光照強度并且控制燈光,超過標準值時的報警功能,采用整屏顯示模式。產品功能設計如圖31所示。照明顯示模塊ADC0809采集模塊I/O I/OI/O I/OT1 STM32T0 I/OT2 I/O煙霧傳感器模塊液晶顯示12864模塊溫濕度傳感器模塊 光照強度信息采集模塊 報警器 圖31智能家居整體功能設計第4章 詳細設計與實現(xiàn) 界面設計 圖41 溫濕度顯示界面2. 煙霧顯示界面圖42 煙霧顯示界面 原理圖設計顯示供電中央處理器CPULED電路溫濕度電路繼電器電路煙感電路電源電路液晶電路控制控制數(shù)據(jù)圖43 硬件系統(tǒng)原理本智能家居系統(tǒng)的設計分為溫濕度數(shù)據(jù)采集模塊、煙霧數(shù)據(jù)存采集模塊、光照數(shù)據(jù)采集模塊、燈光控制模塊、報警模塊和顯示模塊等6部分組成。每個模塊的設計上均有其難點和特殊性,需要嚴格按照原理圖設計規(guī)范來設計[13],原理圖設計要點如下所示:1. 各功能塊布局要合理,整份原理圖需要布局均衡,避免有些地方很擠,而有些地方很松。2.將溫度信息采集模塊、如溫度采集模塊、濕度數(shù)據(jù)采集,光照信息采集,報警部分各功能部分模塊化,方便差錯和修改程序。3在接插口時盡量將外設分布在四周,不要分布不均一面造成一側的端口不夠用。例如電源輸入,輸出負載接口等等。4對于一些像滑阻類似的可調元件,都應該標清楚方向以及物體說明,以免在實驗中損壞器件。5外部的元器件在向主控電路接入的過程中,采取就近原則即可。6濾波器件應該就近排放,減少不必要的空間浪費。7重點的模塊、信號和器件,應該用標簽標注清楚,接線清楚,接口也要標注清楚,如果有條件可以用PCB畫板技術。9將所需要的所有二極管統(tǒng)一放在一個表格中,進行標注作用,方便后續(xù)的錯誤檢測與查找。10在寫文檔時,將重要的程序可以用黑體或者加粗。11用于特別表示的文字,或者標簽,為了更好的區(qū)分可以不同的用不同的顏色區(qū)分,例如器件用紅色,接口用黃色等等。12在標注元器件參數(shù)時,應該格外注重電阻的阻止,或者器件的工作電壓,和工作條件,為查找故障提供方便條件。 數(shù)據(jù)采集模塊設備的數(shù)據(jù)采集,即ADC 數(shù)據(jù)轉換模塊,利用了MCU 自帶的ADC 模塊和外部設備ADC0809兩種數(shù)據(jù)轉換模式,將傳感器的模擬信號轉換為數(shù)字量存儲起來。本設備設計的傳感器為6路,所以需要MCU 的6個ADC 模擬量輸入引腳,在綜合考慮MCU 引腳使用情況后,決定使用PA0~PA3,PB0,PB1 引腳作為模擬信號輸入端。為簡化下位機電路,沒有將傳感器模擬信號采集部分設計到下位機上[14]。電路設計圖如圖44所示:圖44 AD輸入端電路圖各個模擬量輸入端子全部直接連接到MCU 的ADC 模擬輸入引腳上AD數(shù)據(jù)采集程序:void AD_data(uchar x){double i。 int j。int ge,shi,bai。init()。cs=1。cs=0。rd=1。 while(x){x。for(a=0。a13。a++) {write_(0x80+a)。write_date(table[a])。delay(5)。}delay(5)。wr=1。wr=0。wr=1。delay(10)。rd=0。delay(5)。i=P1。i=i/255。i*=5。i*=100。j=(int)i。ge=j%10。put_str(4,ge)。j=ge。shi=j/10。shi=shi%10。 write_date(shi)。bai=j/100。put_str1(2,39。.39。)。delay(5)。put_str(1,bai)。delay(5)。 rd=1。delay(5)。write_(0x80+0x40+4)。delay(5)。write_date(39。V39。)。delay(5)。}} 溫濕度傳感器模塊為了測量的準確性和多通道數(shù)據(jù)采集,這里選擇3片dht11 連接到stm32芯片上,由芯片上的IO引腳作為3片dht11 的器件數(shù)據(jù)及時鐘選擇端口。電路圖設計如圖45所示:圖45 溫濕度設計電路圖溫濕度數(shù)據(jù)采集程序:u8 DHT11_Rea }d_Bit(void) {u8 retry=0。while(DHT11_DQ_INamp。amp。retry100){retry++。delay_us(1)。}retry=0。while(!DHT11_DQ_INamp。amp。retry100){retry++。delay_us(1)。}delay_us(40)。if(DHT11_DQ_IN)return 1。else return 0。 }u8 DHT11_Read_Byte(void) { u8 i,dat。 dat=0。for (i=0。i8。i++) {dat=1。 dat|=DHT11_Read_Bit()。} return dat。}u8 DHT11_Read_Data(u8 *temp,u8 *humi) { u8 buf[5]。u8 i。DHT11_Rst()。if(DHT11_Check()==0){for(i=0。i5。i++){buf[i]=DHT11_Read_Byte()。if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0]。*temp=buf[2]。}}else return 1。return 0。} 煙霧傳感模塊傳感器采用兩種數(shù)據(jù)采集方法,一種是數(shù)字量DO的采集判斷有無氣體,一種是模擬量輸出AO檢測氣體的濃度狀態(tài)情況,以及判斷該濃度對人體是否有害。詳細電路設計如下圖46所示:圖46 煙霧傳感電路設計圖煙霧傳感數(shù)據(jù)采集程序:u16 Get_Adc(u8 ch) { ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 )。 ADC_SoftwareStartConvCmd(ADC1, ENABLE)。 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ))。 return ADC_GetConversionValue(ADC1)。 }u16 Get_Adc_Average(u8 ch,u8 times){u32 temp_val=0。u8 t。 for(t=0。ttimes。t++) {temp_val+=Get_Adc(ch)。delay_ms(5)。} return temp_val/times。} adcx=Get_Adc_Average(ADC_Channel_1,10)。if(!adcx1){adcx1=adcx。}longdu=(adcxadcx1)*100/256。printf(\r\n您發(fā)送的消息為:濃度:%d\r\n\r\n,longdu)。 液晶顯示電路設計本系統(tǒng)液晶顯示采用LCM12864液晶作為顯示器。顯示相關的提示信息和數(shù)據(jù)的輸出。該液晶模塊支持串行通信和并口通信。串行通信為單根數(shù)據(jù)線,通信速率低于并口通信,占用端口少。并口通信通信速率塊但是占用端口多。為了節(jié)約IO口采用串行方式設計電路電路圖設計如圖47下:圖47 液晶顯示電路設計圖液晶初始化程序:void SendByte(unsigned char dat){unsigned char i。CLK_L。for(i=0。i8。i++){if(datamp。0x80) {SID_H。}else {SID_L。} CLK_L。delay(10)。CLK_H。dat=dat1。}CLK_L。}void WriteCommandLCD(unsigned char dat,unsigned char tt){ CS_H。delay(10)。CLK_L。delay(10)。 SendByte(0xF8)。//11111,00,0 RW=0,RS=0 同步標志 delay(10)。SendByte(datamp。0xF0)。//高四位 SendByte((datamp。0x0F)4)。//低四位 delay_ms(1)。CS_L。}void WriteDataLCD(unsigned char dat){CS_H。delay(10)CLK_L。delay(10)。SendByte(0xFA)。//11111,01,0 RW=0,RS=1 delay(10)。SendByte(datamp。0xF0)。//高四位 delay(10)。SendByte((datamp。0x0F)4)。//低四位delay_ms(1)。CS_L。} void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){ CS_H。 if(Y1) Y=1。 if(Y4) Y=4。 X amp。= 0x0F。 switch(Y){ case 1:X|=0X80。break。 case 2:X|=0X90。break。 case 3:X|=0X88。break。 case 4:X|=0X98。break。}WriteCommandLCD(X, 0)。 WriteDataLCD(DData)。 delay(100)。 CS_L。}void SET_ADDR(unsigned char X, unsigned char Y){ CS_H。 if(Y1) Y=1。if(Y4)Y=4。 X amp。= 0x0F。 switch(Y){ case 1:X|=0X80。break。 case 2:X|=0X90。break。 case 3:X|=0X88。break。 case 4:X|=0X98。break。}WriteCommandLCD(X, 0)。 delay(100)。CS_L。}void SET_ADDR1(unsigned char X, unsigned char Y){ CS_H。 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。 case 3:X|=0X88。break。 case 4:X|=0X98。break。}WriteCommandLCD(X, 0)。 delay(100)。 CS_L。}void LCDInit(void) //LCM初始化{ CS_H。delay_ms(100)。CLK_L。WriteCommandLCD(0x30,1)。 //顯示模式設置,開始要求每次檢測忙信號WriteCommandLCD(0x02,1)。 WriteCommandLCD(0x06,1)。 // 顯示光標移動設置WriteCommandLCD(0x0C,1)。 // 顯示開及光標設置WriteCommandLCD(0x01,1)。 //顯示清屏WriteCommandLCD(0x80,1)。 //顯示清屏CS_L。}void LCDClear(void) //清屏{CS_H。CLK_L。WriteCommandLCD(0x01,1)。 //顯示清屏WriteCommandLCD(0x34,1)。 // 顯示光標移動設置WriteCommandLCD(0x30,1)。 // 顯示開及光標設置CS_L。}void
點擊復制文檔內容
職業(yè)教育相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1