版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
西昌學(xué)院畢業(yè)論文(設(shè)計(jì))①將GPIO調(diào)成輸出模式;②讓定時(shí)器TIM3輸出化6ms低電平向傳感器請(qǐng)求數(shù)據(jù)包;③將GPIO調(diào)成模擬輸入模式;④采用定時(shí)器捕獲模式及中斷響應(yīng),在傳感器返回了數(shù)據(jù)之后,將之存入HUMI中。⑤調(diào)用數(shù)據(jù)處理函數(shù)計(jì)算有效數(shù)據(jù)并將之存入指定變量以及計(jì)算串口發(fā)送數(shù)據(jù)包并存入指定數(shù)組;⑥等待主程序調(diào)用HUMI輸出函數(shù)。溫濕度采集模塊在本設(shè)計(jì)中至關(guān)重要,在DHT11程序編寫及調(diào)試時(shí)應(yīng)注意其時(shí)序,端口,電平的跳變等。主機(jī)控制DHT11完成溫濕度轉(zhuǎn)換時(shí),在每一次讀寫之前,都要對(duì)DHT11進(jìn)行復(fù)位。DHT11主機(jī)發(fā)送開始信號(hào),即:拉低數(shù)據(jù)線,保持t1(至少18ms)時(shí)間,然后拉高數(shù)據(jù)線t2(20~40us)時(shí)間,然后讀取DHT11的響應(yīng),正常的話,DHT11會(huì)拉低數(shù)據(jù)線,保持t3(40~50us)時(shí)間,作為響應(yīng)信號(hào),然后DHT11拉高數(shù)據(jù)線,保持t4(40~50us)時(shí)間后,開始輸出數(shù)據(jù)。由于DHT11與STM32間采用串行數(shù)據(jù)傳送方式,因此,在對(duì)DHT11進(jìn)行讀寫編程時(shí),必須嚴(yán)格地保證讀寫時(shí)序,否則,將無法正確讀取結(jié)果。DHT11數(shù)據(jù)發(fā)送時(shí)序圖
如圖24-26所示。圖24DHT11數(shù)據(jù)發(fā)送流程圖25DHT11輸出數(shù)字“0”的時(shí)序圖圖26DHT11輸出數(shù)字“1”的時(shí)序圖根據(jù)電路的硬件設(shè)計(jì),在單片機(jī)控制下,傳感器DHT11檢測(cè)溫濕度數(shù)據(jù),然后送入單片機(jī)進(jìn)行數(shù)據(jù)轉(zhuǎn)換,數(shù)據(jù)被轉(zhuǎn)換成能夠在OLCD液晶顯示屏上顯示的格式,然后單片機(jī)控制溫濕度在顯示屏上實(shí)時(shí)顯示;再通過程序,將溫濕度數(shù)值與預(yù)設(shè)值進(jìn)行比較,若溫度超過30℃,則發(fā)出高溫報(bào)警信號(hào),通過程序啟動(dòng)蜂鳴器,蜂鳴報(bào)警。根據(jù)硬件電路連接,DHT11的2號(hào)管腳與單片機(jī)連接,用于單片機(jī)與DHT11之間的通訊和同步。DHT11采用單總線數(shù)據(jù)格式,一次通訊時(shí)間為4ms左右,一次完整的數(shù)據(jù)傳輸為40bit,高位先出。數(shù)據(jù)格式為:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)數(shù)據(jù)+8bit校驗(yàn)和,如果數(shù)據(jù)正確傳送,校驗(yàn)和數(shù)據(jù)就等于前4部分所得結(jié)果的末8位。主機(jī)發(fā)送一次開始信號(hào)后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主機(jī)開始信號(hào)結(jié)束后,DHT11發(fā)送響應(yīng)信號(hào),送出40bit的數(shù)據(jù),并觸發(fā)一次信號(hào)采集,用戶可選擇讀取部分?jǐn)?shù)據(jù).從模式下,DHT11接收到開始信號(hào)觸發(fā)一次溫濕度采集,如果沒有接收到主機(jī)發(fā)送開始信號(hào),DHT11不會(huì)主動(dòng)進(jìn)行溫濕度采集.采集數(shù)據(jù)后轉(zhuǎn)換到低速模式??偩€空閑狀態(tài)為高電平,主機(jī)把總線拉低,等待DHT11響應(yīng),主機(jī)把總線拉低時(shí)間必須大于18毫秒,保證DHT11能檢測(cè)到起始信號(hào)。DHT11接收到主機(jī)的開始信號(hào)后,等待主機(jī)開始信號(hào)結(jié)束,然后發(fā)送80us低電平響應(yīng)信號(hào)。主機(jī)發(fā)送開始信號(hào)結(jié)束后,延時(shí)等待20~40us后,讀DHT11的響應(yīng)信號(hào),主機(jī)發(fā)送開始信號(hào)后,可以切換到輸入模式,或者輸出高電平均可,總線由上拉電阻拉高。總線為低電平,說明DHT11發(fā)送了響應(yīng)信號(hào),DHT11發(fā)送響應(yīng)信號(hào)后,再把總線拉高80us,準(zhǔn)備發(fā)送數(shù)據(jù),每一bit數(shù)據(jù)都以50us低電平時(shí)隙開始,高電平的長(zhǎng)短定了數(shù)據(jù)位是0還是1。當(dāng)最后一bit數(shù)據(jù)傳送完畢后,DHT11拉低總線50us,隨后總線由上拉電阻拉高進(jìn)入空閑狀態(tài)。根據(jù)以上對(duì)電路與通信時(shí)序的分析,DHT11程序設(shè)計(jì)流程圖如圖27所示。圖27溫濕度監(jiān)測(cè)模塊程序流程圖參考文獻(xiàn)[1]王友貞.節(jié)水灌溉與農(nóng)業(yè)可持續(xù)發(fā)展[M].
中國機(jī)械出版社,2005:15—23[2]劉建輝.單片機(jī)智能控制技術(shù)[M].國防工業(yè)出版社,2007[3]吳普特,牛文全,郝宏科.現(xiàn)代化高效節(jié)水灌溉設(shè)施[M].化學(xué)工業(yè)出版社,2002:12—37[4]涂安富,金誠謙,吳崇友,盧宴,鐘偉民.幾種節(jié)水灌溉新技術(shù)分析[M].中國農(nóng)機(jī)化出版社,2005[5]劉明真,陳鴻.基于單片機(jī)智能節(jié)水灌溉系統(tǒng)的設(shè)計(jì)[J].學(xué)術(shù)問題研究,2010-06-15:08—15[6]宮建華,徐志祥,袁虎成,張家桂.基于單片機(jī)技術(shù)的灌溉控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)械研究與應(yīng)用,2004-04-30[7]劉瑞新.單片機(jī)原理及應(yīng)用教程[M].機(jī)械工業(yè)出版社,2003-07[8]鄭毛祥.單片機(jī)應(yīng)用基礎(chǔ)[M].人民郵電出版社,2009-02[9]鄭鋒.51單片機(jī)典型應(yīng)用開發(fā)范例大全[M].中國鐵道出版社,2011[10]張連華.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)方法[J].科學(xué)之友,2010-04[11]范風(fēng)強(qiáng),蘭嬋麗.單片機(jī)語言C51應(yīng)用實(shí)戰(zhàn)集錦[M].電子工業(yè)出版社,2003-03-01[12]譚浩強(qiáng).C程序設(shè)計(jì)[M].清華大學(xué)出版社,2006[13]趙負(fù)圖.傳感器集成電路手冊(cè)[M].化學(xué)工業(yè)出版社,2004[14]趙燕.傳感器原理及應(yīng)用[M].北京大學(xué)出版,2010-02-01[15]蔡自興.智能控制[M].電子工業(yè)出版社,2004[16]吳景社,李久生.21世紀(jì)節(jié)水農(nóng)業(yè)中的高新技術(shù)重點(diǎn)研究領(lǐng)域[M].
農(nóng)業(yè)工程出版社,2003[17]李泉溪.單片機(jī)原理與應(yīng)用實(shí)例仿真[M].北京:北京航空航天大學(xué)出版社,2009:38—45.致謝經(jīng)過了兩個(gè)多月的努力,我最后完成了論文的寫作。從開始接到論文題目到系統(tǒng)的實(shí)現(xiàn),再到論文文章的完成,每走一步對(duì)我來說都是新的嘗試與挑戰(zhàn),這也是我在大學(xué)期間獨(dú)立完成的最大的項(xiàng)目。在這段時(shí)間里,我學(xué)到了很多知識(shí)也有很多感受,從一無所知,我開始了獨(dú)立的學(xué)習(xí)和試驗(yàn),查看相關(guān)的資料和書籍,讓自己頭腦中模糊的概念逐漸清晰,使自己十分稚嫩作品一步步完善起來,每一次改善都是我學(xué)習(xí)的收獲,每一次設(shè)計(jì)的成功都會(huì)讓我興奮好一段時(shí)間。我的論文作品不是很成熟,還有很多不足之處。但是這次做論文的經(jīng)歷使我終身受益。我感受到做論文是要真真正正用心去做的一件事情,是真正的自己學(xué)習(xí)的過程和研究的過程,沒有學(xué)習(xí)就不可能有研究的潛力,沒有自己的研究,就不會(huì)有所突破,那也就不叫論文了。期望這次的經(jīng)歷能讓我在以后學(xué)習(xí)中激勵(lì)我繼續(xù)進(jìn)步。在這里,我有許多想要感謝的人。首先,我要衷心感謝我的導(dǎo)師老師,感謝導(dǎo)師對(duì)我的關(guān)心與照顧。能夠在百忙中為我們細(xì)心講解論文的內(nèi)容與格式;還為我們提供實(shí)驗(yàn)室供我們使用,給我們帶來方便;精心制作時(shí)間安排表,督促我們學(xué)習(xí)。老師認(rèn)真的工作態(tài)度影響了我,讓我懂得問題的解決需要時(shí)間的積累;讓我明白努力總是會(huì)有收獲的;讓我體會(huì)到了生活的艱辛,現(xiàn)實(shí)的殘酷,想要綻放自己的光彩,就需要花費(fèi)更多的時(shí)間,比別人更加勤奮。然后,我要感謝我的同學(xué)和舍友對(duì)我的鼓勵(lì)和幫助,在我松懈時(shí)提醒我,讓我能夠及時(shí)調(diào)整自己的狀態(tài),最終完成畢業(yè)論文。其次,我還要感謝我的家人,他們的鼓勵(lì)和支持成為了我最強(qiáng)的依靠,每次遇到困難時(shí),都能及時(shí)認(rèn)清自己,及時(shí)改正,以全新的姿態(tài)面對(duì)困難,解決困難。最后,由衷地感謝各位評(píng)審老師在百忙之中審閱我的本科論文和給予指導(dǎo)。再次感謝所有幫助過我的老師、同學(xué)、朋友以及家人。謝謝各位!代碼#ifndef__DHT11_H#define__DHT11_H#include"stm32f10x.h" #defineDHT11_GPIO_TYPEGPIOA#defineDHT11_GPIO_PINGPIO_Pin_4#defineDHT11_RCCRCC_APB2Periph_GPIOA//IO方向設(shè)置#defineDHT11_IO_IN(){DHT11_GPIO_TYPE->CRL&=0XFFF0FFFF;DHT11_GPIO_TYPE->CRL|=8<<16;}#defineDHT11_IO_OUT(){DHT11_GPIO_TYPE->CRL&=0XFFF0FFFF;DHT11_GPIO_TYPE->CRL|=3<<16;}////IO操作函數(shù) #define DHT11_DQ_OUTPAout(4)//數(shù)據(jù)端口 PA4#define DHT11_DQ_INPAin(4)//數(shù)據(jù)端口 PA4#defineu8uint8_tu8DHT11_Init(void);//初始化DHT11u8DHT11_Read_Data(u16*temp,u16*humi);//讀取溫濕度值u8DHT11_Read_Byte(void);//讀出一個(gè)字節(jié)u8DHT11_Read_Bit(void);//讀出一個(gè)位u8DHT11_Check(void);//檢測(cè)是否存在DHT11voidDHT11_Rst(void);//復(fù)位DHT11#endif#include"dht11.h"#include"sys.h"http://復(fù)位DHT11voidDHT11_Rst(void) { DHT11_IO_OUT(); //SETOUTPUTDHT11_DQ_OUT=0; //拉低DQdelay_ms(20); //拉低至少18msDHT11_DQ_OUT=1; //DQ=1 delay_us(30); //主機(jī)拉高20~40us}//等待DHT11的回應(yīng)//返回1:未檢測(cè)到DHT11的存在//返回0:存在u8DHT11_Check(void) { u8retry=0; DHT11_IO_IN();//SETINPUT while(DHT11_DQ_IN&&retry<100)//DHT11會(huì)拉低40~80us { retry++; delay_us(1); }; if(retry>=100)return1; elseretry=0;while(!DHT11_DQ_IN&&retry<100)//DHT11拉低后會(huì)再次拉高40~80us { retry++; delay_us(1); }; if(retry>=100)return1; return0;}//從DHT11讀取一個(gè)位//返回值:1/0u8DHT11_Read_Bit(void) { u8retry=0; while(DHT11_DQ_IN&&retry<100)//等待變?yōu)榈碗娖?{ retry++; delay_us(1); } retry=0; while(!DHT11_DQ_IN&&retry<100)//等待變高電平 { retry++; delay_us(1); } delay_us(40);//等待40us if(DHT11_DQ_IN)return1; elsereturn0; }//從DHT11讀取一個(gè)字節(jié)//返回值:讀到的數(shù)據(jù)u8DHT11_Read_Byte(void){u8i,dat;dat=0; for(i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit();} returndat;}//從DHT11讀取一次數(shù)據(jù)//temp:溫度值(范圍:0~50°)//humi:濕度值(范圍:20%~90%)//返回值:0,正常;1,讀取失敗u8DHT11_Read_Data(u16*temp,u16*humi){ floatbuf[5]; u8i; DHT11_Rst(); if(DHT11_Check()==0) { for(i=0;i<5;i++)//讀取40位數(shù)據(jù) { buf[i]=DHT11_Read_Byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }elsereturn1; //return0; }//初始化DHT11的IO口DQ同時(shí)檢測(cè)DHT11的存在//返回1:不存在//返回0:存在 u8DHT11_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(DHT11_RCC,ENABLE); //使能PB端口時(shí)鐘 GPIO_InitStructure.GPIO_Pin=DHT11_GPIO_PIN; //PG11端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(DHT11_GPIO_TYPE,&GPIO_InitStructure); //初始化IO口 GPIO_SetBits(DHT11_GPIO_TYPE,DHT11_GPIO_PIN); //PG11輸出高 DHT11_Rst();//復(fù)位DHT11 returnDHT11_Check();//等待DHT11的回應(yīng)}#ifndef__DELAY_H#define__DELAY_H #include"sys.h"voiddelay_init(void);voiddelay_ms(u16nms);voiddelay_us(u32nus);#endif#include"delay.h"staticu8fac_us=0; //us延時(shí)倍乘數(shù) staticu16fac_ms=0; //ms延時(shí)倍乘數(shù),在ucos下,代表每個(gè)節(jié)拍的ms數(shù) #ifSYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定義了,說明要支持OS了(不限于UCOS).//當(dāng)delay_us/delay_ms需要支持OS的時(shí)候需要三個(gè)與OS相關(guān)的宏定義和函數(shù)來支持//然后是3個(gè)函數(shù)://delay_osschedlock:用于鎖定OS任務(wù)調(diào)度,禁止調(diào)度//delay_osschedunlock:用于解鎖OS任務(wù)調(diào)度,重新開啟調(diào)度//delay_ostimedly:用于OS延時(shí),可以引起任務(wù)調(diào)度.#ifdef OS_CRITICAL_METHOD //OS_CRITICAL_METHOD定義了,說明要支持UCOSII #definedelay_osrunning OSRunning //OS是否運(yùn)行標(biāo)記,0,不運(yùn)行;1,在運(yùn)行#definedelay_ostickspersec OS_TICKS_PER_SEC //OS時(shí)鐘節(jié)拍,即每秒調(diào)度次數(shù)#definedelay_osintnesting OSIntNesting //中斷嵌套級(jí)別,即中斷嵌套次數(shù)#endif//支持UCOSIII#ifdef CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD定義了,說明要支持UCOSIII #definedelay_osrunning OSRunning //OS是否運(yùn)行標(biāo)記,0,不運(yùn)行;1,在運(yùn)行#definedelay_ostickspersec OSCfg_TickRate_Hz //OS時(shí)鐘節(jié)拍,即每秒調(diào)度次數(shù)#definedelay_osintnesting OSIntNestingCtr //中斷嵌套級(jí)別,即中斷嵌套次數(shù)#endif//us級(jí)延時(shí)時(shí),關(guān)閉任務(wù)調(diào)度(防止打斷us級(jí)延遲)voiddelay_osschedlock(void){#ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedLock(&err); //UCOSIII的方式,禁止調(diào)度,防止打斷us延時(shí)#else //否則UCOSII OSSchedLock(); //UCOSII的方式,禁止調(diào)度,防止打斷us延時(shí)#endif}//us級(jí)延時(shí)時(shí),恢復(fù)任務(wù)調(diào)度voiddelay_osschedunlock(void){ #ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedUnlock(&err); //UCOSIII的方式,恢復(fù)調(diào)度#else //否則UCOSII OSSchedUnlock(); //UCOSII的方式,恢復(fù)調(diào)度#endif}//調(diào)用OS自帶的延時(shí)函數(shù)延時(shí)//ticks:延時(shí)的節(jié)拍數(shù)voiddelay_ostimedly(u32ticks){#ifdefCPU_CFG_CRITICAL_METHOD OS_ERRerr; OSTimeDly(ticks,OS_OPT_TIME_PERIODIC,&err); //UCOSIII延時(shí)采用周期模式#else OSTimeDly(ticks); //UCOSII延時(shí)#endif}//systick中斷服務(wù)函數(shù),使用ucos時(shí)用到voidSysTick_Handler(void){ if(delay_osrunning==1) //OS開始跑了,才執(zhí)行正常的調(diào)度處理 { OSIntEnter(); //進(jìn)入中斷 OSTimeTick(); //調(diào)用ucos的時(shí)鐘服務(wù)程序 OSIntExit(); //觸發(fā)任務(wù)切換軟中斷 }}#endif //初始化延遲函數(shù)//當(dāng)使用OS的時(shí)候,此函數(shù)會(huì)初始化OS的時(shí)鐘節(jié)拍//SYSTICK的時(shí)鐘固定為HCLK時(shí)鐘的1/8//SYSCLK:系統(tǒng)時(shí)鐘voiddelay_init(){#ifSYSTEM_SUPPORT_OS //如果需要支持OS. u32reload;#endif SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //選擇外部時(shí)鐘HCLK/8 fac_us=SystemCoreClock/8000000; //為系統(tǒng)時(shí)鐘的1/8#ifSYSTEM_SUPPORT_OS //如果需要支持OS. reload=SystemCoreClock/8000000; //每秒鐘的計(jì)數(shù)次數(shù)單位為K reload*=1000000/delay_ostickspersec; //根據(jù)delay_ostickspersec設(shè)定溢出時(shí)間 //reload為24位寄存器,最大值:16777216,在72M下,約合1.86s左右 fac_ms=1000/delay_ostickspersec; //代表OS可以延時(shí)的最少單位 SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //開啟SYSTICK中斷 SysTick->LOAD=reload; //每1/delay_ostickspersec秒中斷一次 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //開啟SYSTICK#else fac_ms=(u16)fac_us*1000; //非OS下,代表每個(gè)ms需要的systick時(shí)鐘數(shù)#endif} #ifSYSTEM_SUPPORT_OS //如果需要支持OS.//延時(shí)nus//nus為要延時(shí)的us數(shù). voiddelay_us(u32nus){ u32ticks; u32told,tnow,tcnt=0; u32reload=SysTick->LOAD; //LOAD的值 ticks=nus*fac_us; //需要的節(jié)拍數(shù) tcnt=0; delay_osschedlock(); //阻止OS調(diào)度,防止打斷us延時(shí) told=SysTick->VAL; //剛進(jìn)入時(shí)的計(jì)數(shù)器值 while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnow<told)tcnt+=told-tnow; //這里注意一下SYSTICK是一個(gè)遞減的計(jì)數(shù)器就可以了. elsetcnt+=reload-tnow+told; told=tnow; if(tcnt>=ticks)break; //時(shí)間超過/等于要延遲的時(shí)間,則退出. } }; delay_osschedunlock(); //恢復(fù)OS調(diào)度 }//延時(shí)nms//nms:要延時(shí)的ms數(shù)voiddelay_ms(u16nms){ if(delay_osrunning&&delay_osintnesting==0) //如果OS已經(jīng)在跑了,并且不是在中斷里面(中斷里面不能任務(wù)調(diào)度) { if(nms>=fac_ms) //延時(shí)的時(shí)間大于OS的最少時(shí)間周期 { delay_ostimedly(nms/fac_ms); //OS延時(shí) } nms%=fac_ms; //OS已經(jīng)無法提供這么小的延時(shí)了,采用普通方式延時(shí) } delay_us((u32)(nms*1000)); //普通方式延時(shí)}#else//不用OS時(shí)//延時(shí)nus//nus為要延時(shí)的us數(shù). voiddelay_us(u32nus){ u32temp; SysTick->LOAD=nus*fac_us; //時(shí)間加載 SysTick->VAL=0x00; //清空計(jì)數(shù)器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //開始倒數(shù) do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待時(shí)間到達(dá) SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //關(guān)閉計(jì)數(shù)器 SysTick->VAL=0X00; //清空計(jì)數(shù)器 }//延時(shí)nms//注意nms的范圍//SysTick->LOAD為24位寄存器,所以,最大延時(shí)為://nms<=0xffffff*8*1000/SYSCLK//SYSCLK單位為Hz,nms單位為ms//對(duì)72M條件下,nms<=1864voiddelay_ms(u16nms){ u32temp; SysTick->LOAD=(u32)nms*fac_ms; //時(shí)間加載(SysTick->LOAD為24bit) SysTick->VAL=0x00; //清空計(jì)數(shù)器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //開始倒數(shù) do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待時(shí)間到達(dá) SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //關(guān)閉計(jì)數(shù)器 SysTick->VAL=0X00; //清空計(jì)數(shù)器 }#endif#ifndef__SYS_H#define__SYS_H #include"stm32f10x.h"http://0,不支持ucos//1,支持ucos#defineSYSTEM_SUPPORT_OS 0 //定義系統(tǒng)文件夾是否支持UCOS //IO口操作宏定義#defineBITBAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))#defineMEM_ADDR(addr)*((volatileunsignedlong*)(addr))#defineBIT_ADDR(addr,bitnum)MEM_ADDR(BITBAND(addr,bitnum))//IO口地址映射#defineGPIOA_ODR_Addr(GPIOA_BASE+12)//0x4001080C#defineGPIOB_ODR_Addr(GPIOB_BASE+12)//0x40010C0C#defineGPIOC_ODR_Addr(GPIOC_BASE+12)//0x4001100C#defineGPIOD_ODR_Addr(GPIOD_BASE+12)//0x4001140C#defineGPIOE_ODR_Addr(GPIOE_BASE+12)//0x4001180C#defineGPIOF_ODR_Addr(GPIOF_BASE+12)//0x40011A0C#defineGPIOG_ODR_Addr(GPIOG_BASE+12)//0x40011E0C#defineGPIOA_IDR_Addr(GPIOA_BASE+8)//0x40010808#defineGPIOB_IDR_Addr(GPIOB_BASE+8)//0x40010C08#defineGPIOC_IDR_Addr(GPIOC_BASE+8)//0x40011008#defineGPIOD_IDR_Addr(GPIOD_BASE+8)//0x40011408#defineGPIOE_IDR_Addr(GPIOE_BASE+8)//0x40011808#defineGPIOF_IDR_Addr(GPIOF_BASE+8)//0x40011A08#defineGPIOG_IDR_Addr(GPIOG_BASE+8)//0x40011E08//IO口操作,只對(duì)單一的IO口!//確保n的值小于16!#definePAout(n)BIT_ADDR(GPIOA_ODR_Addr,n)//輸出#definePAin(n)BIT_ADDR(GPIOA_IDR_Addr,n)//輸入#definePBout(n)BIT_ADDR(GPIOB_ODR_Addr,n)//輸出#definePBin(n)BIT_ADDR(GPIOB_IDR_Addr,n)//輸入#definePCout(n)BIT_ADDR(GPIOC_ODR_Addr,n)//輸出#definePCin(n)BIT_ADDR(GPIOC_IDR_Addr,n)//輸入#definePDout(n)BIT_ADDR(GPIOD_ODR_Addr,n)//輸出#definePDin(n)BIT_ADDR(GPIOD_IDR_Addr,n)//輸入#definePEout(n)BIT_ADDR(GPIOE_ODR_Addr,n)//輸出#definePEin(n)BIT_ADDR(GPIOE_IDR_Addr,n)//輸入#definePFout(n)BIT_ADDR(GPIOF_ODR_Addr,n)//輸出#definePFin(n)BIT_ADDR(GPIOF_IDR_Addr,n)//輸入#definePGout(n)BIT_ADDR(GPIOG_ODR_Addr,n)//輸出#definePGin(n)BIT_ADDR(GPIOG_IDR_Addr,n)//輸入//以下為匯編函數(shù)voidWFI_SET(void); //執(zhí)行WFI指令voidINTX_DISABLE(void);//關(guān)閉所有中斷voidINTX_ENABLE(void); //開啟所有中斷voidMSR_MSP(u32addr); //設(shè)置堆棧地址#endif#include"sys.h"http://THUMB指令不支持匯編內(nèi)聯(lián)//采用如下方法實(shí)現(xiàn)執(zhí)行匯編指令WFIvoidWFI_SET(void){ __ASMvolatile("wfi"); }//關(guān)閉所有中斷voidINTX_DISABLE(void){ __ASMvolatile("cpsidi");}//開啟所有中斷voidINTX_ENABLE(void){ __ASMvolatile("cpsiei"); }//設(shè)置棧頂?shù)刂?/addr:棧頂?shù)刂穇_asmvoidMSR_MSP(u32addr){MSRMSP,r0 //setMainStackvalueBXr14}#ifndef__LCD_H#define__LCD_H #include"sys.h"#defineRSPCout(14) //RS???#defineENPCout(15)//ENvoidLCD1602_Init(void); //3????voidLCD1602_Write_Dat(u8dat);voidLCD1602_Write_Cmd(u8cmd);voidLCD1602_Show_Str(u8x,u8y,u8*str);voidLCD1602_Set_Cursor(u8x,u8y);voidLCD1602_Show_dat(u8x,u8y,u8dat); #endif#include"lcd.h"#include"delay.h"#include"stdio.h"#include"sys.h"voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;//GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 營(yíng)業(yè)房屋租賃合同書
- 2025年全球及中國RFID桌面閱讀器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國高空作業(yè)機(jī)械設(shè)備行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球智慧城市物聯(lián)網(wǎng)傳感器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 二零二五年度廚具行業(yè)知識(shí)產(chǎn)權(quán)保護(hù)合作協(xié)議10篇
- 二零二五年度戶外廣告窗戶安裝與廣告發(fā)布合同4篇
- 火工品倉儲(chǔ)與配送合同
- 健身房裝修合同終止
- 餐飲場(chǎng)所防水翻新協(xié)議
- 糧油貿(mào)易解除居間合同
- 注射泵管理規(guī)范及工作原理
- 【譯林】九下英語單詞默寫表
- 國潮風(fēng)中國風(fēng)2025蛇年大吉蛇年模板
- 故障診斷技術(shù)的國內(nèi)外發(fā)展現(xiàn)狀
- 2024年發(fā)電廠交接班管理制度(二篇)
- 《數(shù)學(xué)課程標(biāo)準(zhǔn)》義務(wù)教育2022年修訂版(原版)
- 農(nóng)機(jī)維修市場(chǎng)前景分析
- 各種標(biāo)本采集的技術(shù)-痰標(biāo)本的采集(護(hù)理技術(shù))
- 實(shí)驗(yàn)室的設(shè)計(jì)規(guī)劃
- 2024-2030年中國假睫毛行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
評(píng)論
0/150
提交評(píng)論