久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 34147|回復: 13
打印 上一主題 下一主題
收起左側

基于單片機的自動澆花器設計論文完整版

  [復制鏈接]
跳轉到指定樓層
樓主
ID:328949 發表于 2018-5-13 16:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

基于單片機的自動澆花器設計

摘 要隨著科技的發展,人們對生活水平的要求逐漸提高,智能家居也慢慢潛入人們的生活,自動化的興起也是對科技發展的肯定。現在很多人都住上了高層,為了凈化室內空氣便種植盆栽,一方面是為了凈化空氣,另一方面是為了陶冶情操。然而很多人想精心照顧他們的花花草草,但是又不懂方法與技巧甚至有的人沒時間去照料,所以這就需要設計一款自動澆花器。

本設計用AT89C51單片機作為控制中心,YL-69作土壤濕度傳感模塊,光敏電阻作為光照量傳感模塊,LCD1602作為顯示數據的模塊,按鍵用來設定數值。本系統有三種模式的功能,一是可以通過YL-69濕度傳感器進行土壤濕度的采集,利用單片機AT89C51對信息進行處理,輸出控制信號,控制信號通過控制繼電器控制水泵電源是否通斷,從而完成自動澆水。二是利用單片機精確控制,在設定時間內實施澆水。三是在系統中加入一個光敏電阻,當檢測到有光照的時候即白天的時候系統檢測到土壤濕度低于設定值時才運行完成澆水,當檢測到無光照即黑夜時即使檢測到土壤濕度低于設定值系統也不會運行。


目 錄

1 緒論

1.1 研究背景

1.3主要設計內容

2 系統設計

2.1 方案論證

2.1.1 總體方案設計

2.1.2 土壤濕度測量方案

2.2 硬件的選擇

2.3 系統結構

3 系統硬件設計

3.1 AT89C51主要性能參數

3.2 時鐘電路

3.3 AT89C51的復位電路

3.4 YL-69土壤濕度傳感器

3.5 SRS-05VDC-SL繼電器

3.6 按鍵電路

3.7 DS1302時鐘芯片

4 系統軟件設計

4.1 系統流程圖

4.2 土壤濕度檢測程序

4.3 按鍵程序

4.4 LCD1602顯示程序

5 仿真設計與硬件調試

5.1 硬件調試

結論

參考文獻

致謝

附錄

附錄A:主程序


1緒論
1.1研究背景
如今,對于澆灌系統而言,微噴技術被國際上許多國家廣泛采用,該項技術的工作原理為借助低壓管道讓水快速的射出,并在空氣里分散為細小的水珠,從而讓這些水霧覆蓋于種植物、農作物及周圍的土地表面,使得農作物不再缺乏水分。此系統主要應用于植物種植密度大,植物柔軟細嫩的場合。
隨著社會生產力的發展,人們的生活水平在不斷提高,更加追求生活環境健康與舒適,如今千家萬戶都會在自己的余暇功夫里自己栽培花草,栽培花草不僅可以凈化空氣,還可以陶冶情操。植物的生長需要定期澆水,有些人可能會因為忙而忘記給植物澆水,或者沒有一定的澆花經驗甚至會導致植物死亡等,這都是不利于植物生長的。
1.2 國內外的發展現狀
1.2.1國外研究現狀
在西方的國家,智能家用電器的技術已經十分先進,而站在國際的層面來看,由于我國的制造及設計產業在國際上的關鍵地位,使得中國已然發展成國際上智能家電的主要市場。如今,智能花盆在全球已經受到廣大客戶的青睞,雖然它們的控制及工作原理有著較大的差異,可它們設計的目的都是為了服務于人類平時生活中的養花種草等方面。
在英國有這樣的一類智能花盆,它的設計者是瑞貝克皮特森。它能夠隨時觀察記錄盆栽的生長情況。“Plantroid”是一個智能花盆機器人,它是由東京農工大學副教授水內郁夫發明創造的,“Plantroid”與其它的花盆不同的是,除了有六個晶硅太陽能以外,在他的底部還裝有四個可以滾動的滑輪,這使得其能夠在地面隨處移動。其內部裝有光線傳感器,當它檢測到盆栽處于背陰處時,或者曬不到陽光的地方,機器人會自動下達指令讓滑輪走到有陽光的地方,因而方便了人們的植物培養,并且使得植物充分的享有光照進行光合作用,加速植物的健康生長。
在不久前,英國學生娜塔莉・金也創造出了一款智能的花盆機器人,此機器人的配套設施較為齊全,在花盆下面裝有檢測濕度與溫度的傳感裝置,花盆表面設有光線傳感器。這些裝置的安裝能夠讓植物在處于不適宜的環境下自動報警,比如在濕度過大或溫度過強時,花盆都會自動閃光提示,讓主人能夠及時采取相關措施。
1.2.2 國內研究現狀
對于中國而言,已然出現了許多供植物澆水的器具,然而這些都是傳統的澆水設施,在智能機械方面的研究成果較少。目前,在中國市場上普遍存在大量的自動澆水裝置,可是這些澆水的器材都是傳統的定量澆水,很難根據植物的自身需要進行適當適量的澆水施肥,這也導致了大面積的水資源浪費,不僅沒有使得植物得到很好的生長,相反卻讓植物的成長起到了副作用。
由于全球技術的高速傳播,如今的中國也有許多關于智能花盆方面的研究。楊守建等人于2011年,開始了相關方面的工作,他們研究的主要任務是利用裝置檢測土地的濕度及溫度,參照檢測裝置反饋的數據對植物進行適當適量的澆水,整個科研的經費花費較少,且后期維護的花銷也不高。
與此同時,王薇等學者在2011年也開始了相關智能花盆上的研究,此種智能花盆由多個部分組成,其中包括:放大電路、比較電路、驅動電路、繼電器、電磁閥等等。工作原理也是能夠自主檢測植物土壤周圍的濕度,從而根據實際情況進行澆水。 學者張兆朋在此方面也有著自己的發面,他一人設計創造了小型的職能家庭澆水儀器,同時更夠依據植物的不同種類,運行不同的控制程序。在工作原理上也是參照上述幾種智能儀器,實現自主職能澆水。學者趙麗也發明了一類高效智能的植物澆水裝置,在儀器底部裝有傳感裝置,用以檢測相關環境的溫度、濕度,在借助單片機展開數據分析,下達相關的執行指令,對澆水器進行控制,完成相關的澆水任務。
隨著科技的發展,家用電器的智能化也得到了廣大國民的青睞,所以,對于智能花盆的相關研究還是十分有必要的。
1.3主要設計內容
此論文是立足于單片機的自動澆花器設計:
  • 完成整體的規劃和結構設計
  • 圍繞著單片機展開相關工作,并對裝置原件展開處理,讓它們有機的搭配起來。主要的硬件部分涵蓋有:土壤濕度檢測電路、光亮度檢測電路、電源電路、按鍵設置電路、LCD1602顯示電路繼電器控制水泵電路。以及系統的軟件設計及編寫,使其與硬件模塊互相配合。大體涵蓋有以下幾類程序:主要程序、濕度檢測程序、信息匯總程序、按鍵觸碰程序、運行子程序等。
  • 完成硬件模塊和軟件模塊的調試。

2 系統設計
2.1方案論證
2.1.1 總體方案設計
該方案的系統體系主要由兩部分共同搭建,分別是:硬件方面、軟件方面。硬件模塊方面大體包括了土壤濕度檢測模塊、光亮度檢測模塊、按鍵設置模塊、LCD1602顯示模塊與繼電器控制水泵電路模塊,設計了一種智能澆灌的系統。這個自動澆花系統可以根據土壤干濕程度以及光照的強度,對植物的澆水進行自動控制。單片機是此方案的控制中心,通過環境濕度檢測儀展開相關信息的傳遞,繼而使用智能系統規定其濕度的最大及最小值,然后再借助單片機將傳輸來的相關信息展開分析與整理,從而評估外界環境的濕度。一旦反饋的濕度值明顯小于規定的濕度最小值,那么單片機將下達指令至控制水泵,讓其進行澆水行為,當濕度到達設定的最大值時停止澆水,這就是整個澆花的工作原理。或在無人的情況下,根據自己的澆灌經驗通過設定時間來進行澆灌,當到達設定時間時單片機控制水泵澆水,超過一分鐘后水泵停止澆水。本設計可以完成以下功能:
1.借助濕度傳感器采集土壤濕度的相關信息;
2.顯示測量的數據
3.對最適宜植物成長的土壤進行分析,并規定其濕度的最大值和最小值;
4.使用光敏電阻測量光照量
5.不同模式的選擇。
2.1.2 土壤濕度測量方案
檢測土壤濕度的相關活動在眾多的部門中都得到了廣泛的應用,其中主要包括:科研單位、工業制造、氣象監測等,然而在一般的情況中,對于土壤水分的檢測并不是唯一的數據。因為土壤濕度會受到大氣壓強、溫度或人類甚至無法察覺的因素影響。
如今,對于土壤濕度的測量我們通常有2種方法,分別是干濕球與電子濕度傳感器。下面是對兩種方法展開的對比研究,旨在選擇最佳的檢測方法。對于干濕球方法而言,它屬于非直接的檢測方法,借助對干球與濕球的兩種測量從而了解其濕度。所以,如果在溫度較高或者環境較為惡劣的情況下,我們會優先選擇干濕球法。
隨著科技的不斷進步,電子濕度檢測在這些年得到了廣泛的推崇,由于其測量數值較為精確,一般可達2%一3%RH,同時在運行的階段對外界的影響有著較強的抗干擾能力。但使用的時間一長,傳感器的精度就會有所下降,因此電子式傳感器比較適用于工作在常溫、穩定的環境中。
2.2硬件的選擇
  • 土壤濕度傳感器的選擇:
選取yl-69土壤水分傳感器作為土壤傳感系統模塊,靈敏度可調,數字輸出簡單,模擬輸出準確,比較器LM393,工作穩定可靠。
(2)主控芯片的選擇:
方案一:使用STC89C52系列的單片機,特點是驅動能力強,運轉比較穩定,與AT89C51系列相比擬,性價比較高,抗干擾能力強。
方案二:AT89C51單片機由Atmel公司生產,主要的特點是低電壓、高性能,同時價格也比較便宜,最主要的是AT89C51單片機和MCS-51系列有很好的兼容性。但缺點是定時器、ROM較少。
AT89C51單片機是我們學習的主要單片機,它的配置已經完全可以滿足系統的需求,所以選擇方案二AT89C51單片機。
(3)A/D轉換芯片選擇:
第一種方案:通過ADC0832芯片轉換,ADC0832轉換芯片為雙通道8位分辨率的轉換芯片。其最高分辯可達256級。由于其轉換速度快、便宜、體積較小、穩定性高等特點,因此深受單片機愛好者喜愛,普及率極高。
第二種方案:ADC0809轉換芯片ADC0809芯片的使用,是一種并行轉換芯片,相比較ADC0832要快得多,但其引腳電路比較復雜,并且價錢是昂貴的。
綜合考慮選用ADC0832可以滿足系統需求,故選用方案一。
(4)繼電器選擇:
在早期設計階段,儀器的運行需要利用小電流實施對大電流的操控,因此我們選擇了繼電器來操控電磁閥。工作電壓在5V左右,并且成本低。綜上所述,本次的系統設計中,選用的是松樂SRS-05VDC-SL型號的繼電器。
(5)顯示器的選擇:
因系統需要必須用到一個顯示系統模式功能和檢測數據的顯示器。LCD1602可以用來顯示字母、阿拉伯數字和符號,按照系統的需求,使用可以同時顯示出16*02即32個字符的16腳(帶背光)模塊。
(6)電源選擇:
系統選用5V電源適配器,考慮到水泵的運行可能會導致屏幕顯示不清,所以給水泵配備3節干電池。
2.3 系統結構
此系統主要由六個電路組建而成,分別為:土壤濕度檢測電路、光亮度檢測電路、電源電路、按鍵設置電路、LCD1602顯示電路與繼電器控制水泵電路。系統原理圖如圖1所示。

圖1 系統原理圖
3系統硬件設
3.1AT89C51單片機簡介及設計
3.1.1 AT89C51主要性能參數
AT89C2051是一款極為精簡的51單片機,將P0口和P2口進行了精簡,引腳也僅有20個,然而其內部卻安裝了十分實用的模擬比較器,對于開發研究精簡的51系統而言,其是最好不過的選擇了,因為在大多數的情況下,我們開發根本用不到所有的32個I/O口,所以選擇AT89C2051較為適宜,不僅芯片體積更小,同時其工作電壓最低為2.7V,所以用來開發時能夠用5號電池供電的便攜式產品。其引腳圖如圖2所示。
圖2 AT89C51引腳圖
3.1.2 時鐘電路
單片機AT89C51的內部包含了一個輸入端與一個輸出端,分別是以引腳XTAL1與XTAL2的放大器,使其達到搭建自激式振蕩電路的目的,因此需要在XTAL1及XTAL2引腳中裝設晶體振蕩器、陶瓷振蕩器,此電路的輸出能夠傳送到程序內部的時序電路。對于單片機的時鐘電路,其重要性不言而喻,它相當于人體的大腦,控制著單片機的運行頻率。而連接單片機的主要形式通常包括以下兩種:外部時鐘形式、內部時鐘形式。
之所以選用此方案的內部時鐘的理由為:一個高增益放大器和相位平方芯片內部外部跳線晶體,調諧電容時鐘電路生成的結構形式,時鐘電路圖的系統如圖3所示。
            
圖3 時鐘電路
3.1.3 AT89C51的復位電路
51單片機高電平復位。就現如今使用比較多的AT89系列得單片機來講,在復位腳加上2個高電平機器周期(即24個振蕩周期)就可以使單片機進行復位。復位后,單片機的主要特征是各IO口顯現為高電平,程序計數器開始從零運行程序。
本系統選用的是手動按鍵復位的模式,采用的措施是接一個按鈕在復位RST端和正電源Vcc之間。當按鈕被按下時,Vcc的+5V電平就會被直接加到RST復位端。由于按鍵閉合的時間非常短,而我們總可以使按鈕保持最起碼十毫秒的接通時間,因此,完全可以符合對復位的時段要求。圖4為按鍵電路圖

圖4 按鍵電路圖

3.2YL-69土壤濕度傳感器
該系統設計采用yl-69是一個相對簡單的土壤水分傳感器,當測試土壤水分變化時,通過濕敏電容所處的空間內介質發生變化,這也導致了其電容數值產生改變,并且電容的數值和濕度值之間呈正比關系。YL-69表面經過鍍鎳處理,可以很好的提高導電性,保護傳感器不易被腐蝕。借助電位器掌控有關的閥值,在探查到環境濕度在最小值以下,DO隨之產生高電平;相反,在探查到的環境溫度在最大值以上,DO隨之產生一個低電平。本次系統的電路設計為VCC外接一個5V電壓,GND外接數字地,DO"小板數字量輸出接口(0和1)”接到單片機。電路原理圖如圖5所示,k1是YL-69探頭。

圖5 YL-69與AD轉化電路

3.3SRS-05VDC-SL繼電器
繼電器(relay)能夠將線性變化的輸入量輸出為階躍變化結果。這種特質就可以被利用來起到控制的作用,當輸入量達到了一定程度,就可以通過控制階躍變化的結果反過來影響整體電路,在整個電路中,繼電器只需要很小的電流,相當于以弱電流來控制大電流的控制器,而且一定程度上繼電器還可以用來保護電路,防止電壓變化過大,損害電子元件。
當前市場上的繼電器種類有很多,但是經過一一對比,本系統選擇電磁繼電器作為整個電路的控制方式。其原理是通過電流變化來改變電磁效應的強弱,從而將電信號轉化為磁性強度變化,最終通過接觸點來影響電流的通路還是斷開。
圖7中三級管的b基級處于低電位時,三極管導通,則K1單刀雙擲開關向右邊偏離,電機M水泵通電,水泵開始運行。


圖7 繼電器控制水泵

3.4按鍵電路
因本系統設計定時電路,需要用按鍵進行設置,所以加入按鍵模塊按鍵:按鍵設計如圖8所示。S1是模式鍵、S2是設置鍵、S是調整加鍵、S4是調整減鍵。

圖8 按鍵電路
3.5光敏電阻及其控制電路
光敏電阻的特點在于能夠將光學物理信息轉化為電信號,這種特質也是其命名的來源,這種電阻也可以被簡稱為光電阻,或者可以稱它為光導管。具體來說,這種電阻可以在不同運動狀態以及電子的光照強度下表現為不同的電阻值,所以用這種材料制成的電阻器也被稱為光電導探測器。當照射光強緩慢增加時,電阻值不斷減小,變化趨勢呈現為負相關,反之亦然。本次系統設計將光敏電阻并聯在濕度傳感器的電路中。電路圖如圖9所示。

圖9 光敏電阻電路圖
3.6 DS1302時鐘芯片
DS1302是比日常中比較常用的一種時鐘芯片,它具有計時的功能。在本次系統中,因為要加上定時功能,所以選擇在系統在加入DS1302芯片,它能夠對日期、時間等信息作統計,通過設置鍵來設定時間,也可以將時間顯示在顯示屏上。電路圖如圖10所示。
      
圖10 DS1302時鐘芯片電路圖
4 系統軟件設計
4.1 系統流程圖
系統軟件設計包括對土壤濕度檢測程序、對采集到的數據進行處理的程序、設置濕度上下限的程序、按鍵程序、顯示程序等。主程序流程如圖14所示。

圖14 程序流程圖

4.2 土壤濕度檢測
土壤濕度傳感檢測模塊對土壤的濕度變化特別敏銳,日常用來檢測泥土的濕度。如果土壤濕度傳感器檢測到土壤濕度低于設定值時,DO輸出高電平;當土壤濕度傳感器檢測到土壤濕度高于設定值時,D0輸出低電平。并且D0口能夠與單片機直接相連接,通過單片機來反應高低電平,所以來檢測土壤濕度。
4.3 LCD1602顯示流程圖
液晶顯示器LCD1602是利用液晶的物理特性來實現顯示的,當電路通電時,LCD便可以顯示出來數字、圖像等。LCD1602液晶顯示流程圖如圖所示:


5 仿真設計與硬件調試

5.1 仿真軟件簡介

proteus仿真軟件可以提供對單片機及外圍電路進行仿真,它將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三者合一,是目前唯一一款三合一平臺。它可以實現原理布圖、PCB自動或人工布線、SPICE電路仿真,最后達到仿真效果,可以在運行后看到輸入輸出的效果。此軟件提供現成元器件、測試儀器以圖形的方式表示,并可以直接從窗口圖形中調出,軟件中測試儀器的圖形與實物相似,而且可以儲存實驗測試結果的數據、波形、工作狀態等,并可以打印輸出。

5.2  仿真流程

(1)打開Proteus軟件,會彈出如圖5-1所示的窗口,我們可以看到右邊的大區域是繪圖窗口,左面的小窗口是視圖小窗口,緊挨著下面分別是元器件列表、控制按鈕。

圖5-1 Proteus打開界面

(2)在界面視圖小窗口的下面有P L按鈕,點擊P按鈕,便可彈出一個搜素欄,在里面輸入需要的元器件名稱,就會在右邊的繪圖窗口中彈出,雙擊需要的元器件,選擇好之后關閉對話框,之后就可以在剛才的P L按鈕下面點擊最終需要的元器件,用鼠標拖動移到繪圖窗口即可單擊確定位置即可。如圖5-2所示:

圖5-2搜索添加元器件

(3)將元器件選擇好之后,系統自動布線即可完成電路圖設計,雙擊電路圖中的單片機會出現一個對話框,然后把.hex文件加載進去,如圖5-3所示

圖5-3 加載.hex文件

  • 最后點擊窗口左下角的運行開始鍵,就可以完成仿真過程,如圖5-4所示:

圖5-4 運行結果

5.3  仿真結果

在參考電路的運行圖之后,依照其樣式將實物制出,然后把程序燒錄至AT89C51單片機內接通電源,將YL-69土壤濕度傳感器探頭放入土壤中,按鍵調至模式一,調至濕度值50%,屏幕顯示澆水開始,水泵運行,澆灌到設定濕度值時停止澆水。按鍵調至模式二,檢測到濕度值低于設定濕度,水泵開始澆水,將光敏電阻遮蓋住,屏幕顯示為夜間模式,停止澆水。將其按鍵轉換到第三種模式,規定時間并運行澆水,在系統檢測到需要澆水時,水泵便會自動出水,運行60秒后便停止灌溉。之后,看實物能否穩定操作。如果一切顯示都正常的話,就無需開展硬件的相關調整,如果運行的不正常則要分析其原因并開展相關調試工作。


結論
基于單片機的自動澆花器的設計,利用單片機控制系統對各部分進行控制,使其澆灌模塊是否進行運作。土壤濕度測量的模塊為YL-69,其主要的作用是將測量的濕度信息傳遞至單片機的系統內部,同時利用單片機的處理將I/O傳遞至LCD屏幕上。LCD上顯示的值是土壤的含水值,這是判斷灌水是否的數值。程序的控制部分由自動澆花部分組成,而系統的監察部分則是由土壤濕度處理組成。整個系統的為智能化的自動運行,程序的控制主要是通過單片機分析數據并處理得來,在濕度監測儀檢測到土壤濕度低于規定的數值后,那么單片機將下達指令至控制水泵,讓其進行澆水行為,在經過一段時間的澆水過后,當濕度達到規定的最大值時,儀器又將停止運水,這就是整個澆花的工作原理。單片機還可以手動輸入定時時間,時間會通過LCD1602進行顯示,通過程序設計澆灌開始及澆灌結束時間。

致謝

時光即逝,大學四年將至,在這四年中我收獲頗豐,特別是在這幾個月的畢業設計期間,我特別感謝老師、同學、朋友、家人的精心指導與細心照料。感謝指導老師侯老師對我這次論題寫作方向的確定的幫助,您對我的論文寫作思路進行啟發,重點要點進行指導說明,不厭其煩的幫助對論文進行修改并提出些建議,從論文的選題、開題報告的撰寫、資料的查找,到結構的完善,都給予悉心指導,使我順利成文。授人以魚不如授人以漁,您嚴謹的工作態度、精心指導和無私的關懷都是我們學習的榜樣,在此對幫助和指導過我的老師們表示衷心的感謝。感謝我的同學和朋友們,在我寫論文的過程中給予了我很多有用的素材,還在論文的撰寫和排版等過程中提供熱情的幫助。最后要感謝家人對我的支持與鼓勵,有了你們我才可以在不惑之年全身心投入到學習中,順利完成學業。

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<LCD1602.h>
  3. #include<ADC0832.h>
  4. #include<INTERRUPT.h>
  5. #include<math.h>
  6. #include<stdio.h>
  7. #include<EEPROM.h>
  8. #include<DS1302.h>
  9. sbit jidainqi  = P1^4;//自動澆花開關
  10. sbit jidainqi_led  = P1^3;//自動澆花開關指示燈
  11. sbit key_mode  = P3^2;//模式切換按鍵
  12. sbit key_set  = P3^3;//設置
  13. sbit key_jia  = P3^4;//加
  14. sbit key_jian  = P2^0;//減
  15. sbit guang  = P2^2;//光
  16. uchar temp_ad[6];
  17. double temp;
  18. uchar f=0;
  19. uchar wei;
  20. uchar mode;
  21. uchar set_time=0;
  22. uchar jiaohua_num;//澆花濕度值
  23. uchar set_shidu=0;//按鍵設置標志位
  24. uchar T0_num;
  25. uchar ad;
  26. char naozhong1[]={0x00,0x00,0x00};
  27. /********************************************************
  28. 函數名稱:void delayms(uint ms)
  29. 函數作用:毫秒延時函數
  30. 參數說明:
  31. ********************************************************/
  32. void Delay_ms(uint ms)
  33. {
  34.               unsigned char i=100,j;
  35.               for(;ms;ms--)
  36.               {
  37.                             while(--i)
  38.                             {
  39.                                           j=10;
  40.                                           while(--j);
  41.                             }
  42.               }
  43. }
  44. void display(void)//選擇頁面
  45. {
  46.               lcd1602_write_character(0,1,"Watering System ");                 //初始化顯示的文字
  47.               lcd1602_write_character(0,2,"  Choice mode");                 //初始化顯示的文字                           
  48. }
  49. void display1(void)//白天自動檢測澆花
  50. {  
  51.                             ad=ADC0832_read(0);
  52.                             Delay_ms(25);
  53.                             temp=(1-(double)ad/255)*100;
  54.                             if(temp<=jiaohua_num)
  55.                             {            
  56.                                           if(f==0)//清屏標志位
  57.                                           {
  58.                                                         LCD_write_command(0x01);
  59.                                                         delay_n40us(100);
  60.                                                         f=1;
  61.                                           }            
  62.                                           lcd1602_write_character(0,1,"Flower is Dying!");
  63.                                           lcd1602_write_character(0,2," Auto Watering!");
  64.                                           jidainqi=0;jidainqi_led=0;//自動澆花
  65.                             }
  66.                             else
  67.                             {            
  68. //                                          if(temp<1.5)
  69. //                                                        wei=sprintf(temp_ad,"%0.2f",0);
  70. //                                          else
  71.                                           wei=sprintf(temp_ad,"%0.2f",temp);
  72.                                           if(f==1)
  73.                                           {
  74.                                                         LCD_write_command(0x01);
  75.                                                         delay_n40us(100);
  76.                                                         f=0;
  77.                                           }                           
  78.                                           lcd1602_write_character(0,1,"  The mode one:");                 //初始化顯示的文字            
  79.                                           lcd1602_write_character(3,2,"         ");
  80.                                           lcd1602_write_character(9-wei,2,temp_ad);
  81.                                           lcd1602_write_character(9,2,"%RH");
  82.                                           jidainqi=1;jidainqi_led=1;//停止澆花
  83.                             }            
  84. }
  85. void display4(void)//澆花濕度設置
  86. {  
  87.               T0_num++;
  88.               if(T0_num==254)
  89.                             T0_num=0;
  90.     lcd1602_write_character(0,1," Set water num");                 //初始化顯示的文字            
  91.               if(T0_num%2==0)              //偶數次顯示
  92.               {                           
  93.                             LCD_disp_char(9,2,ASCII[jiaohua_num/10]);                 //
  94.                             LCD_disp_char(10,2,ASCII[jiaohua_num%10]);                           
  95. //                Delay_ms(1);
  96.               }
  97.               else
  98.               {
  99.                             LCD_disp_char(9,2,ASCII[jiaohua_num/10]);               
  100.                             LCD_disp_char(10,2,ASCII[jiaohua_num%10]);
  101.             
  102.               }            
  103. }
  104. void display2(void)//自動澆花加光照
  105. {  
  106.     //lcd1602_write_character(0,1,"mode two:");                 //初始化顯示的文字            
  107.                             ad=ADC0832_read(0);
  108.                             Delay_ms(25);
  109.                             temp=(1-(double)ad/255)*100;
  110.                             if(temp<=jiaohua_num&&guang==1)
  111.                             {            
  112.                                           if(f==0)//清屏標志位
  113.                                           {
  114.                                                         LCD_write_command(0x01);
  115.                                                         delay_n40us(100);
  116.                                                         f=1;
  117.                                           }            
  118.                                           lcd1602_write_character(0,1,"Flower is Dying!");
  119.                                           lcd1602_write_character(0,2," Auto Watering!");
  120.                                           jidainqi=0;jidainqi_led=0;//自動澆花
  121.                             }
  122.                             else
  123.                             {            
  124. //                                          if(temp<1.5)
  125. //                                                        wei=sprintf(temp_ad,"%0.2f",0);
  126. //                                          else
  127.                                                         wei=sprintf(temp_ad,"%0.2f",temp);
  128.                                           if(f==1)
  129.                                           {
  130.                                                         LCD_write_command(0x01);
  131.                                                         delay_n40us(100);
  132.                                                         f=0;
  133.                                           }
  134.                                                         if(guang==0)
  135.                                                                       {
  136.                                                                                       lcd1602_write_character(0,2,"Night");
  137.                                                                       }
  138.                                                                       else
  139.                                                                       {
  140.                                                                                                   lcd1602_write_character(0,2,"Day! ");
  141.                                                                       }
  142.                                           lcd1602_write_character(0,1,"  The mode two:");                               //初始化顯示的文字            
  143.                                           lcd1602_write_character(6,2,"      ");
  144.                                           lcd1602_write_character(12-wei,2,temp_ad);
  145.                                           lcd1602_write_character(12,2,"%RH");
  146.                                           jidainqi=1;jidainqi_led=1;//停止澆花
  147.                             }            
  148. }
  149. void display3(void)//定時模式
  150. {  
  151.    Read_time();                                   //讀取時間
  152.               lcd1602_write_character(0,1,"The mode three:");                 //初始化顯示的文字            
  153.               LCD_disp_char(1,2,ASCII[time[4]/10]);//月               
  154.               LCD_disp_char(2,2,ASCII[time[4]%10]);               
  155.               LCD_disp_char(3,2,ASCII[11]);
  156.               LCD_disp_char(4,2,ASCII[time[3]/10]);//日
  157.               LCD_disp_char(5,2,ASCII[time[3]%10]);

  158.               LCD_disp_char(7,2,ASCII[time[2]/10]);//              時  
  159.               LCD_disp_char(8,2,ASCII[time[2]%10]);               
  160.               //LCD_disp_char(9,1,ASCII[11]);
  161.               lcd1602_write_character(9,2,":");
  162.               LCD_disp_char(10,2,ASCII[time[1]/10]);//分
  163.               LCD_disp_char(11,2,ASCII[time[1]%10]);
  164.               //LCD_disp_char(12,1,ASCII[11]);
  165.               lcd1602_write_character(12,2,":");
  166.               LCD_disp_char(13,2,ASCII[time[0]/10]);//秒
  167.               LCD_disp_char(14,2,ASCII[time[0]%10]);            
  168.             
  169.   if(time[2]==naozhong1[2]&&time[1]==naozhong1[1]&&time[0]==naozhong1[0])
  170.               {
  171.                               jidainqi=0;jidainqi_led=0;//自動澆花            
  172.               }            
  173.   if(time[2]==naozhong1[2]&&(time[1]==(naozhong1[1])+1)&&time[0]==naozhong1[0])
  174.               {
  175.                               jidainqi=1;jidainqi_led=1;
  176.               }            
  177. }
  178. void display5(void)
  179. {
  180.               T0_num++;
  181.               if(T0_num==254)
  182.                             T0_num=0;

  183.               LCD_disp_char(3,1,ASCII[11]);
  184.               lcd1602_write_character(9,1,":");
  185.               lcd1602_write_character(12,1,":");
  186.               lcd1602_write_character(7,2,":");
  187.               lcd1602_write_character(10,2,":");            

  188.               if(T0_num%2==0)              //偶數次顯示
  189.               {                           
  190.                             LCD_disp_char(1,1,ASCII[time[4]/10]);//月               
  191.                             LCD_disp_char(2,1,ASCII[time[4]%10]);               
  192.                             LCD_disp_char(4,1,ASCII[time[3]/10]);//日
  193.                             LCD_disp_char(5,1,ASCII[time[3]%10]);
  194.             
  195.                             LCD_disp_char(7,1,ASCII[time[2]/10]);//              時  
  196.                             LCD_disp_char(8,1,ASCII[time[2]%10]);               
  197.                             LCD_disp_char(10,1,ASCII[time[1]/10]);//分
  198.                             LCD_disp_char(11,1,ASCII[time[1]%10]);
  199.                             LCD_disp_char(13,1,ASCII[time[0]/10]);//秒
  200.                             LCD_disp_char(14,1,ASCII[time[0]%10]);
  201.                            
  202.                             LCD_disp_char(5,2,ASCII[naozhong1[2]/10]);//              時  
  203.                             LCD_disp_char(6,2,ASCII[naozhong1[2]%10]);               
  204.                             LCD_disp_char(8,2,ASCII[naozhong1[1]/10]);//分
  205.                             LCD_disp_char(9,2,ASCII[naozhong1[1]%10]);
  206.                             LCD_disp_char(11,2,ASCII[naozhong1[0]/10]);//秒
  207.                             LCD_disp_char(12,2,ASCII[naozhong1[0]%10]);
  208.                             Delay_ms(1);
  209.               }
  210.               else                                          //奇數次時候設置那個量的時候那個量不顯示,以達到閃爍的效果
  211.               {
  212.                             if(set_time==1)
  213.                             {
  214.                                           LCD_disp_char(1,1,ASCII[13]);               
  215.                                           LCD_disp_char(2,1,ASCII[13]);
  216.                             }
  217.                             else
  218.                             {
  219.                                           LCD_disp_char(1,1,ASCII[time[4]/10]);
  220.                                           LCD_disp_char(2,1,ASCII[time[4]%10]);
  221.                             }
  222.                             if(set_time==2)
  223.                             {
  224.                                           LCD_disp_char(4,1,ASCII[13]);            
  225.                                           LCD_disp_char(5,1,ASCII[13]);
  226.                             }
  227.                             else
  228.                             {
  229.                                           LCD_disp_char(4,1,ASCII[time[3]/10]);
  230.                                           LCD_disp_char(5,1,ASCII[time[3]%10]);
  231.                             }            
  232.                             if(set_time==3)
  233.                             {
  234.                                           LCD_disp_char(7,1,ASCII[13]);
  235.                                           LCD_disp_char(8,1,ASCII[13]);
  236.                             }
  237.                             else
  238.                             {
  239.                                           LCD_disp_char(7,1,ASCII[time[2]/10]);
  240.                                           LCD_disp_char(8,1,ASCII[time[2]%10]);
  241.                             }
  242.                             if(set_time==4)
  243.                             {
  244.                                           LCD_disp_char(10,1,ASCII[13]);
  245.                                           LCD_disp_char(11,1,ASCII[13]);
  246.                             }
  247.                             else
  248.                             {
  249.                                           LCD_disp_char(10,1,ASCII[time[1]/10]);
  250.                                           LCD_disp_char(11,1,ASCII[time[1]%10]);
  251.                             }
  252.                             if(set_time==5)
  253.                             {
  254.                                           LCD_disp_char(13,1,ASCII[13]);
  255.                                           LCD_disp_char(14,1,ASCII[13]);
  256.                             }
  257.                             else
  258.                             {
  259.                                           LCD_disp_char(13,1,ASCII[time[0]/10]);
  260.                                           LCD_disp_char(14,1,ASCII[time[0]%10]);
  261.                             }
  262.                             if(set_time==6)
  263.                             {
  264.                                           LCD_disp_char(5,2,ASCII[13]);
  265.                                           LCD_disp_char(6,2,ASCII[13]);
  266.                             }
  267.                             else
  268.                             {
  269.                                           LCD_disp_char(5,2,ASCII[naozhong1[2]/10]);
  270.                                           LCD_disp_char(6,2,ASCII[naozhong1[2]%10]);
  271.                             }
  272.                             if(set_time==7)
  273.                             {
  274.                                           LCD_disp_char(8,2,ASCII[13]);
  275.                                           LCD_disp_char(9,2,ASCII[13]);
  276.                             }
  277.                             else
  278.                             {
  279.                                           LCD_disp_char(8,2,ASCII[naozhong1[1]/10]);
  280.                                           LCD_disp_char(9,2,ASCII[naozhong1[1]%10]);
  281.                             }                           
  282.                             if(set_time==8)
  283.                             {
  284.                                           LCD_disp_char(11,2,ASCII[13]);
  285.                                           LCD_disp_char(12,2,ASCII[13]);
  286.                             }
  287.                             else
  288.                             {
  289.                                           LCD_disp_char(11,2,ASCII[naozhong1[0]/10]);
  290.                                           LCD_disp_char(12,2,ASCII[naozhong1[0]%10]);
  291.                             }            

  292.               }
  293. }
  294. /********************************************************
  295. 函數名稱:void scan(void)
  296. 函數作用:按鍵檢測函數
  297. 參數說明:
  298. ********************************************************/
  299. void scan(void)
  300. {            
  301.               //模式按鍵
  302.               if(key_mode==0)
  303.               {
  304.                             Delay_ms(7);
  305.                             if(key_mode==0)
  306.                             {                           
  307.       jidainqi=1;jidainqi_led=1;//澆花                                         
  308.                                           LCD_write_command(0x01);//清除屏幕顯示
  309.                                           delay_n40us(100);                            //實踐證明,我的 LCD1602 上,用 for 循環 200 次就能可靠完成清屏指令。                                                      
  310.                                           mode++;set_shidu=0;set_time=0;            
  311.                                           jidainqi=1;jidainqi_led=1;//停止澆花
  312.                                           if(mode==4)
  313.                                           {
  314.                                                         mode=0;
  315.                                                         EEPROM_delete(0x2202);                                                        //擦除扇區
  316.                                                         EEPROM_write(0x2202,naozhong1[2]);//            
  317.                                                         EEPROM_delete(0x2402);                                                        //擦除扇區
  318.                                                         EEPROM_write(0x2402,naozhong1[1]);//                           
  319.                                                         EEPROM_delete(0x2602);                                                        //擦除扇區
  320.                                                         EEPROM_write(0x2602,naozhong1[0]);//                                                                                   
  321.                                             display();
  322.                                           }
  323.                                           if(mode==2)
  324.                                           {
  325.                                                         EEPROM_delete(0x2002);                                                        //擦除扇區
  326.                                                         EEPROM_write(0x2002,jiaohua_num);//            
  327.                                           }                                         
  328.                             }
  329.                             while(!key_mode);//檢測按鍵松開
  330.               }
  331.               //設置鍵,不支持連按
  332.               if(key_set==0)
  333.               {
  334.                             Delay_ms(7);
  335.                             if(key_set==0&&mode==1)
  336.                             {                                         
  337.                                           LCD_write_command(0x01);//清除屏幕顯示
  338.                                           delay_n40us(100);                            //實踐證明,我的 LCD1602 上,用 for 循環 200 次就能可靠完成清屏指令。                                         
  339.       set_shidu++;
  340.                                           jidainqi=1;jidainqi_led=1;//停止澆花
  341.       if(set_shidu==2)            
  342.       {
  343.                                                         set_shidu=0;
  344.                                                         EEPROM_delete(0x2002);                                                        //擦除扇區
  345.                                                         EEPROM_write(0x2002,jiaohua_num);//                                                      
  346.                                                         display1();
  347.                                           }                                                      
  348.                             }
  349.                             if(key_set==0&&mode==3)
  350.                             {                           
  351.       set_time++;
  352.       if(set_time==1)            
  353.                                           {
  354.                                                         LCD_write_command(0x01);//清除屏幕顯示
  355.                                              delay_n40us(100);                            //實踐證明,我的 LCD1602 上,用 for 循環 200 次就能可靠完成清屏指令?
  356.                                           }                                                      
  357.       if(set_time>8)            
  358.       {
  359.                                                         set_time=0;
  360.                                                                       EEPROM_delete(0x2202);                                                        //擦除扇區
  361.                                                                       EEPROM_write(0x2202,naozhong1[2]);//            
  362.                                                                       EEPROM_delete(0x2402);                                                        //擦除扇區
  363.                                                                       EEPROM_write(0x2402,naozhong1[1]);//                           
  364.                                                                       EEPROM_delete(0x2602);                                                        //擦除扇區
  365.                                                                       EEPROM_write(0x2602,naozhong1[0]);//                                                                     
  366.                                                         LCD_write_command(0x01);//清除屏幕顯示
  367.                                              delay_n40us(100);                            //實踐證明,我的 LCD1602 上,用 for 循環 200 次就能可靠完成清屏指令。            
  368.                                              display3();
  369.                                           }                                                      
  370.                             }                           
  371.                             while(!key_set);//檢測按鍵松開
  372.               }            
  373.               //加
  374.               if(key_jia==0&&mode==1)
  375.               {
  376.                             Delay_ms(5);
  377.                             if(key_jia==0&&mode==1&&set_shidu==1)//設置上限值
  378.                             {
  379.                                           jiaohua_num++;                 //上限自加
  380.                                           if(jiaohua_num==91)
  381.                                                         jiaohua_num=90;                                                                                   
  382.                                           display4();//顯示
  383.                             }            
  384.               }
  385.               //減
  386.               if(key_jian==0&&mode==1)
  387.               {
  388.                             Delay_ms(5);
  389.                             if(key_jian==0&&mode==1&&set_shidu==1)//設置下限
  390.                             {
  391.                                           jiaohua_num--;                 //
  392.                                           if(jiaohua_num<6)
  393.                                                         jiaohua_num=5;                                                                                   
  394.                                           display4();//顯示
  395.                             }            
  396.               }
  397.               //加值鍵,支持連按
  398.               if(key_jia==0&&mode==3)
  399.               {
  400.                             Delay_ms(7);
  401.                             if(key_jia==0&&set_time==1)//設置月
  402.                             {
  403.                                           time[4]++;
  404.                                           if(time[4]>12)
  405.                                                         time[4]=1;
  406.                                           time1[4]=(time[4]/10)*16+time[4]%10;
  407.                                           if(time1[4]>0x12)
  408.                                                         time1[4]=0x01;
  409.                                           Writeds1302 (WRITE_MONTH,time1[4]);                                                      
  410.                             }
  411.                             if(key_jia==0&&set_time==2)//設置日
  412.                             {
  413.                                           time[3]++;
  414.                                           if(time[4]==1||time[4]==3||time[4]==5||time[4]==7||time[4]==8||time[4]==10||time[4]==12)
  415.                                           {
  416.                                                         if(time[3]>31)
  417.                                                         time[3]=1;
  418.                                           }
  419.                                           else
  420.                                           {
  421.                                                         if(time[4]==2)
  422.                                                         {
  423.                                                                       if(time[6]%4==0)
  424.                                                                       {
  425.                                                                                     if(time[3]>28)
  426.                                                                                     time[3]=1;
  427.                                                                       }
  428.                                                                       else
  429.                                                                       {
  430.                                                                                     if(time[3]>29)
  431.                                                                                     time[3]=1;
  432.                                                                       }
  433.                                                         }
  434.                                                         else
  435.                                                         {
  436.                                                                       if(time[3]>30)
  437.                                                                       time[3]=1;
  438.                                                         }
  439.                                           }
  440.                                           time1[3]=(time[3]/10)*16+time[3]%10;
  441.                                           if(time1[4]==0x01||time1[4]==0x03||time1[4]==0x05||time1[4]==0x07||time1[4]==0x08||time1[4]==0x10||time1[4]==0x12)
  442.                                           {
  443.                                                         if(time1[3]>0x31)
  444.                                                         time1[3]=0x01;
  445.                                           }
  446.                                           else
  447.                                           {
  448.                                                         if(time1[4]==0x02)
  449.                                                         {
  450.                                                                       if(time1[6]%4==0)
  451.                                                                       {
  452.                                                                                     if(time1[3]>0x28)
  453.                                                                                     time1[3]=0x01;
  454.                                                                       }
  455.                                                                       else
  456.                                                                       {
  457.                                                                                     if(time1[3]>0x29)
  458.                                                                                     time1[3]=0x01;
  459.                                                                       }
  460.                                                         }
  461.                                                         else
  462.                                                         {
  463.                                                                       if(time1[3]>0x30)
  464.                                                                       time1[3]=0x01;
  465.                                                         }
  466.                                           }            
  467.                                           Writeds1302 (WRITE_DAY,time1[3]);                                         
  468.                             }
  469.                             if(key_jia==0&&set_time==3)//設置時
  470.                             {
  471.                                           time[2]++;
  472.                                           if(time[2]>23)
  473.                                                         time[2]=0;
  474.                                           time1[2]=(time[2]/10)*16+time[2]%10;
  475.                                           if(time1[2]>0x23)
  476.                                                         time1[2]=0x00;
  477.                                           Writeds1302 (WRITE_HOUR,time1[2]);                                         
  478.                             }
  479.                             if(key_jia==0&&set_time==4)//設置分
  480.                             {
  481.                                           time[1]++;
  482.                                           if(time[1]>59)
  483.                                                         time[1]=0;
  484.                                           time1[1]=(time[1]/10)*16+time[1]%10;
  485.                                           if(time1[1]>0x59)
  486.                                                         time1[1]=0x00;
  487.                                           Writeds1302 (WRITE_MINUTE,time1[1]);                                                      
  488.                             }
  489.                             if(key_jia==0&&set_time==5)//設置秒
  490.                             {
  491.                                           time[0]++;
  492.                                           if(time[0]>59)
  493.                                                         time[0]=0;
  494.                                           time1[0]=(time[0]/10)*16+time[0]%10;
  495.                                           if(time1[0]>0x59)
  496.                                                         time1[0]=0x00;
  497.                                           Writeds1302 (WRITE_SECOND,time1[0]);                                                      
  498.                             }
  499.                             if(key_jia==0&&set_time==6)
  500.                             {
  501.                                           naozhong1[2]++;
  502.                                           if(naozhong1[2]>23)
  503.                                                         naozhong1[2]=00;
  504.                             }
  505.                             if(key_jia==0&&set_time==7)
  506.                             {
  507.                                           naozhong1[1]++;
  508.                                           if(naozhong1[1]>59)
  509.                                                         naozhong1[1]=00;            
  510.                             }
  511.                             if(key_jia==0&&set_time==8)
  512.                             {
  513.                                           naozhong1[0]++;
  514.                                           if(naozhong1[0]>59)
  515.                                                         naozhong1[0]=00;
  516.                             }                           
  517.   }                           
  518.               //減值鍵,支持連按
  519.               if(key_jian==0&&mode==3)
  520.               {
  521.                                           Delay_ms(7);            
  522.     if(key_jian==0&&set_time==1)//設置月
  523.                             {
  524.                                           time[4]--;
  525.                                           if(time[4]<1)
  526.                                                         time[4]=12;
  527.                                           time1[4]=(time[4]/10)*16+time[4]%10;
  528.                                           if(time1[4]<0x01)
  529.                                                         time1[4]=0x12;
  530.                                           Writeds1302 (WRITE_MONTH,time1[4]);                           
  531.                             }
  532.                 if(key_jian==0&&set_time==2)//設置日
  533.                             {
  534.                                           time[3]--;
  535.                                           if(time[4]==1||time[4]==3||time[4]==5||time[4]==7||time[4]==8||time[4]==10||time[4]==12)
  536.                                           {
  537.                                                         if(time[3]<1)
  538.                                                         time[3]=31;
  539.                                           }
  540.                                           else
  541.                                           {
  542.                                                         if(time[4]==2)
  543.                                                         {
  544.                                                                       if(time[6]%4==0)
  545.                                                                       {
  546.                                                                                     if(time[3]<1)
  547.                                                                                     time[3]=28;
  548.                                                                       }
  549.                                                                       else
  550.                                                                       {
  551.                                                                                     if(time[3]<1)
  552.                                                                                     time[3]=29;
  553.                                                                       }
  554.                                                         }
  555.                                                         else
  556.                                                         {
  557.                                                                       if(time[3]<1)
  558.                                                                       time[3]=30;
  559.                                                         }
  560.                                           }            
  561.                                           time1[3]=(time[3]/10)*16+time[3]%10;
  562.                                           if(time1[4]==0x01||time1[4]==0x03||time1[4]==0x05||time1[4]==0x07||time1[4]==0x08||time1[4]==0x10||time1[4]==0x12)
  563.                                           {
  564.                                                         if(time1[3]<0x01)
  565.                                                         time1[3]=0x31;
  566.                                           }
  567.                                           else
  568.                                           {
  569.                                                         if(time1[4]==0x02)
  570.                                                         {
  571.                                                                       if(time1[6]%4==0)
  572.                                                                       {
  573.                                                                                     if(time1[3]<0x01)
  574.                                                                                     time1[3]=0x28;
  575.                                                                       }
  576.                                                                       else
  577.                                                                       {
  578.                                                                                     if(time1[3]<0x01)
  579.                                                                                     time1[3]=0x29;
  580.                                                                       }
  581.                                                         }
  582.                                                         else
  583.                                                         {
  584.                                                                       if(time1[3]<0x01)
  585.                                                                       time1[3]=0x30;
  586.                                                         }
  587.                                           }            
  588.                                           Writeds1302 (WRITE_DAY,time1[3]);            
  589.                             }
  590.                 if(key_jian==0&&set_time==3)//設置時
  591.                             {
  592.                                           time[2]--;
  593.                                           if(time[2]<00)
  594.                                                         time[2]=23;
  595.                                           time1[2]=(time[2]/10)*16+time[2]%10;
  596.                                           if(time1[2]<0x00)
  597.                                                         time1[2]=0x23;
  598.                                           Writeds1302 (WRITE_HOUR,time1[2]);
  599.                             }
  600.                             if(key_jian==0&&set_time==4)//設置分
  601.                             {
  602.                                           time[1]--;
  603.                                           if(time[1]<00)
  604.                                                         time[1]=59;
  605.                                           time1[1]=(time[1]/10)*16+time[1]%10;
  606.                                           if(time1[1]<0x00)
  607.                                                         time1[1]=0x59;
  608. ……………………

  609. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


完整的Word格式文檔51黑下載地址:
基于單片機的自動澆花設計.docx (769.9 KB, 下載次數: 350)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:326586 發表于 2018-5-16 16:30 | 只看該作者
謝謝大大。正好要用到可以參考!
回復

使用道具 舉報

板凳
ID:478397 發表于 2019-2-20 10:58 | 只看該作者
真好 可以以借鑒一下
回復

使用道具 舉報

地板
ID:638566 發表于 2019-11-9 12:03 | 只看該作者
可以65555555
回復

使用道具 舉報

5#
ID:664645 發表于 2019-12-18 23:30 | 只看該作者
這個只有文檔嗎?
回復

使用道具 舉報

6#
ID:664645 發表于 2019-12-28 12:23 | 只看該作者
沒有原理圖誒
回復

使用道具 舉報

7#
ID:664645 發表于 2019-12-28 12:23 | 只看該作者
只是文檔,大佬求問原理圖怎么搞?
回復

使用道具 舉報

8#
ID:664645 發表于 2019-12-28 12:27 | 只看該作者
沒有原理圖誒?
回復

使用道具 舉報

9#
ID:708344 發表于 2020-3-14 15:51 | 只看該作者
可以參考
回復

使用道具 舉報

10#
ID:716851 發表于 2020-3-27 15:01 | 只看該作者
真好,可以用來借鑒
回復

使用道具 舉報

11#
ID:752684 發表于 2020-5-16 09:03 | 只看該作者
你的圖14那個流程圖沒看懂,沒傳上?
回復

使用道具 舉報

12#
ID:841300 發表于 2020-11-19 10:08 | 只看該作者
沒有原理圖嗎
回復

使用道具 舉報

13#
ID:853928 發表于 2020-12-3 17:58 | 只看該作者
感謝大佬,可以借鑒,感謝
回復

使用道具 舉報

14#
ID:1050605 發表于 2023-12-15 15:08 來自觸屏版 | 只看該作者
大佬頭自定義的文件可以發出來參考下嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情第一区 | 欧洲毛片 | 欧美日韩美女 | 国产一区不卡 | 看av网| 蜜桃视频在线观看免费视频网站www | 亚洲免费人成在线视频观看 | 亚洲精品视频一区二区三区 | 91久久久久久久久久久 | 久久成人精品一区二区三区 | 国产亚洲精品久久久优势 | 久久久高清 | 亚洲国产成人精品女人久久久野战 | 欧美性一区二区三区 | 亚洲一区二区三区在线视频 | 欧美性video 精品亚洲一区二区 | 国产美女视频黄a视频免费 国产精品福利视频 | 91精品在线看 | 久久人人国产 | 亚洲高清免费观看 | 懂色av一区二区三区在线播放 | 国产精品亚洲一区 | 日本精品视频 | 粉嫩高清一区二区三区 | 99re在线 | 97国产在线观看 | 视频一区二区在线观看 | 国产中文区二幕区2012 | 日韩精品一区二区三区免费视频 | 国产在线h | 日日夜夜狠狠操 | 在线视频一区二区三区 | 一区二区三区四区电影 | 秋霞在线一区 | 国产在线精品一区二区 | 欧美在线日韩 | 欧美一区二区三区在线 | 视频在线观看一区 | 自拍视频网站 | 欧美日韩国产欧美 | 亚洲成人免费网址 |