【正文】
可以通過兩個浮球開關(guān)的狀態(tài)來感知水位的高低。: 浮球開關(guān) 水位測量涉及的硬件如上圖所示,在系統(tǒng)運(yùn)行時,水位低(水沒有沒過低水位開關(guān)),,這樣上水水泵通電,開始抽水。一直抽水到高水位開關(guān)斷開。水泵停止工作后,淋浴器工作時水位降低,在高水位與低水位之間。我們不是讓水位保持在一個固定的水準(zhǔn),所以需要狀態(tài)標(biāo)志位來記錄正常水位是正在上升還是正在下降,上升時的正常水位應(yīng)該繼續(xù)打開水泵,而下降時的正常水位則要降低到低水位一下是水泵工作,這一點(diǎn)將在變成中有所體現(xiàn),在實(shí)現(xiàn)溫度調(diào)節(jié)功能的時候用到過。編程如下:sbit shuiwei_high=P0^4。 //高水位測量sbit shuiwei_low=P0^5。 //低水位測量sbit jidianqi3=P0^7。 //水位控制繼電器int shuiwei_flag=0。//低水位標(biāo)志if(shuiwei_high==0amp。amp。shuiwei_low==0)//水位過低{jidianqi3=1。//打開抽水電機(jī)shuiwei_flag=1。}If(shuiwei_high!=0amp。amp。shuiwei_low!=0)//水位高{Jidianqi3=0。//關(guān)閉抽水電機(jī)Shuiwei_flag=0。//清除低水位標(biāo)志}If(shuiwei_high==0amp。amp。shuiwei_low!=0amp。amp。shuiwei_flag==0)//下降中的正常水位{Jidianqi3=0。}If(shuiwei_high==0amp。amp。shuiwei_low!=0amp。amp。shuiwei_flag==1)//上升中的正常水位Jidianqi3=1。//繼續(xù)抽水到高水位4 系統(tǒng)軟件系統(tǒng)使用的軟件主要有KEIL開發(fā)環(huán)境、STCISP燒錄工具、VB、在串口調(diào)試的時候還用到了串口調(diào)試助手、波特率計算器。 KEIL開發(fā)環(huán)境Keil C51開發(fā)環(huán)境是ARM公司出品的單片機(jī)C語言開發(fā)工具,自帶仿真器,支持匯編和C語言設(shè)計,編程規(guī)則易學(xué)易用,是廣大單片機(jī)愛好者的必備軟件之一。下面介紹KEIL的使用方法,雙擊桌面按鈕,主界面啟動后,點(diǎn)擊Project菜單,在下拉菜單中選中New Project 選項(xiàng)定義工程名,如Error! Reference source not found.,需要注意:每個工程會產(chǎn)生很多文件,建立一個新工程最好建立一個新的文件夾。在稍后彈出的窗口中選擇CPU的型號,本設(shè)計中使用的是STC的51單片機(jī),所以CPU型號選擇generic中的8051。除此此外還要在option for target 選擇工程的基本配置,輸出HEX二進(jìn)制文件等等。.。建好一個工程后點(diǎn)擊“文件”在下拉菜單中選擇NEW,建立代碼文件,與工程文件保存在相同的文件夾下,之后將代碼文件添加到工程目錄下才能進(jìn)行編譯連接等操作,需要注意的是自己編寫的頭文件也要與工程放在同一個文件夾下,而且要添加到工程目錄下,環(huán)境自帶有傳統(tǒng)8051的頭文件,里面定義了一些寄存器和函數(shù),如果有沒有的寄存器可以自行添加,使用sbit 和sfr語句定義即可,為了方便編程給寄存器定義別名也可以在這里進(jìn)行。 keil 啟動界面 新建工程界面 選擇CPU 工程配置(晶振頻率和輸出HEX文件) 編譯連接 STCISP燒錄工具在開發(fā)環(huán)境編程完畢之后,把該代碼文件導(dǎo)入單片機(jī)才是關(guān)鍵,STC系列單片機(jī)的一大優(yōu)點(diǎn)就是不需要專用的下載器,直接使用燒錄軟件配合串行通信就可以把代碼下載進(jìn)入單片機(jī)中去。STCISP是免安裝的程序,雙擊其圖標(biāo),打開STCISP。然后選擇單片機(jī)類型,本系統(tǒng)為STC12C5A60S2,選擇COM口,打開相應(yīng)的HEX文件,然后選擇下載按鈕下載(先斷電),出現(xiàn)如Error! Reference source not found.,再上電(即所謂冷上電),即可把可執(zhí)行文件HEX寫入到單片機(jī)內(nèi),Error! Reference source not ,下載成功后界面如Error! Reference source not 。 等待上電界面 正在下載 下載成功 波特率計算器在用STC的51單片機(jī)實(shí)現(xiàn)串行通信時,需要進(jìn)行波特率的計算,給相應(yīng)的寄存器賦值,如果使用定時器1作為波特率發(fā)生器,那么應(yīng)該使用TH1和TL1賦值,如果使用獨(dú)立波特率發(fā)生器,那么應(yīng)該給BRT寄存器賦值。但是計算出的波特率誤差率不能超過3%,所以我們手工計算通常需要反復(fù)驗(yàn)證。宏晶公司給我們提供了一款波特率計算軟件,即波特率計算器,輸入要求,能夠計算出初始化函數(shù),直接粘貼即可。 波特率計算器 串口調(diào)試助手在調(diào)試串行口通信時,在缺少上位機(jī)程序的情況下,串口調(diào)試助手是一個很不錯的工具,在主界面選擇COM口、選擇波特率與數(shù)據(jù)格式,就可以發(fā)送并接受通信內(nèi)容,并能夠選擇十六進(jìn)制和字符形式的發(fā)送接收并顯示。串口調(diào)試助手可以單獨(dú)下載也可以直接使用STCISP軟件自帶的串口調(diào)試工具,它在串口調(diào)試中起到了至關(guān)重要的作用。 串口調(diào)試工具 Visual Basic VB編程是典型的面向?qū)ο蟮木幊?,在可視化的環(huán)境下,能很方便設(shè)計出操作界面,編程的思想是:對象(控件)、屬性、事件、方法。從學(xué)習(xí)到自己設(shè)計出控制系統(tǒng)軟件,深入的理解了VB的編程方法,能熟練使用VB對串口進(jìn)行操作的控件MSCCOM和VB對數(shù)據(jù)庫的數(shù)據(jù)訪問控件ADO DATA。視窗操作系統(tǒng)推出后,計算機(jī)的使用就大大改觀了,一切都在可視化的環(huán)境進(jìn)行,它的構(gòu)成也是按照真實(shí)世界的模式,隨著它的發(fā)展,軟件開發(fā)也越來越接近于真實(shí)世界。自從微軟推出了VB之后,窗口設(shè)計的難度大大降低,使用VB進(jìn)行系統(tǒng)開發(fā)的人也直線增加,它給想設(shè)計窗口程序的程序員提供了非常好的途徑。在編程時,我們只需要考慮在窗體這個體現(xiàn)功能的地方加入什么樣的功能對象,設(shè)置對象有什么樣的屬性,這個對象能夠觸發(fā)什么樣的事件,事件要執(zhí)行什么樣的方法代碼。如我在窗體上添加一個按鈕button,修改它的屬性改名叫“點(diǎn)擊”,這樣按鈕顯示的名稱就是“點(diǎn)擊”,雙擊進(jìn)去之后就從窗體設(shè)計區(qū)到了代碼編輯區(qū),就可以直接對按鈕的click時間進(jìn)行函數(shù)編寫,運(yùn)行時按鈕被點(diǎn)擊時,該函數(shù)將執(zhí)行,就像觸發(fā)了一次中斷。常用的控件有文本框、按鈕、標(biāo)簽等,在工具箱中默認(rèn)的是一些常用的控件,如果要實(shí)現(xiàn)更多的功能,還需要自己動手添加空間,在主菜單電機(jī)工程,再點(diǎn)擊部件,手動添加即可。添加MSCOMM部件要點(diǎn)擊Microsoft m. Control 。要添加ADO控件,就要在部件中添加Microsoft ADO data control 。 VB的編程界面VB的工作模式有設(shè)計模式、運(yùn)行模式、中斷模式三種。有窗體設(shè)計界面和代碼編輯界面三種。 VB窗體設(shè)計界面 VB代碼編輯界面 MSCCOM串行通信控件標(biāo)簽、文本框、按鈕等控件的使用方法就不再敘述了,按照對象、屬性、事件、方法的思想編程也很簡單,BASIC語言也十分容易上手。下面將敘述MSCCOM串行通信控件。RS232串行通信在控制系統(tǒng)方面用處廣泛,微軟公司針對它推出了串行通信功能控件MSCCOM,成為實(shí)現(xiàn)計算機(jī)控制的媒介。在工程部件中添加Microsoft m. Control ,在工具箱中就多了一個電話形狀的控件,這就是MSCCOM。將這個控件拖動到窗體中,設(shè)置它的屬性就可以。其重要的屬性設(shè)置如下(屬性設(shè)置的方法有兩種一種是在窗體加載函數(shù)中利用代碼設(shè)置,另一個是在屬性窗口直接輸入):Commport屬性,即選擇串行通信的COM口,設(shè)計中使用了COM4,=4;(要注意的是使用串行通信功能之前將串行口打開, = True,使用完畢之后使用False將串口關(guān)閉,以防出錯)。Setting屬性,設(shè)計中使用的格式如下4800,n,8,1代表的意思是波特率為4800bps,沒有奇偶校驗(yàn),8位數(shù)據(jù)位,1位停止位。這樣的設(shè)置要與單片機(jī)端保持一致。同樣可以用代碼設(shè)置也可以在屬性窗口設(shè)置。Inputmode屬性,即用于設(shè)置取回數(shù)據(jù)的類型,=0;同樣有兩種方式設(shè)置屬性。還有兩個非常重要的屬性需要設(shè)置,那就是inputlength和RThreshold屬性,前者是設(shè)置一次取字符的長度,后者是設(shè)置接受多少個字符之后能觸發(fā)Onm事件。本設(shè)計使用的是5,因?yàn)闇囟戎岛退恐刀际?個字符傳輸。在使用MSCCOM控件實(shí)現(xiàn)串行通信時最重要的莫過于是發(fā)送和接收的功能了,這與控件的INPUT和OUTPUT屬性密切相關(guān)。發(fā)送數(shù)據(jù)時,=”發(fā)送的數(shù)據(jù)”。就可以。當(dāng)接收數(shù)據(jù)時,方式有些不同,要使用MSCCOM_ONCOMM事件,(RThreshold相關(guān))在該事件中使用“變量=”就可以。下面是主界面的窗體代碼:Public flag As Integer 利用奇偶標(biāo)志為來Private Sub Command1_Click() 開啟服務(wù)按鈕click事件 = 1 發(fā)送非零值開啟服務(wù)End SubPrivate Sub Command2_Click() 停止服務(wù)按鈕click事件 = 0 發(fā)送零,使單片機(jī)停止工作(陷入等待) = False 關(guān)閉串口 = True 設(shè)置可見屬性End SubPrivate Sub Command3_Click() 退出系統(tǒng)按鈕EndEnd SubPrivate Sub Command4_Click() 彈出窗體End SubPrivate Sub Command5_Click() 彈出窗體End SubPrivate Sub Form_Load() 加載窗體的時候顯示日期并且打開串口flag = 0Text1 = Year(Now) amp。 Month(Now) amp。 Day(Now) = TrueEnd SubPrivate Sub tongxun_OnComm() 收到5個字節(jié)數(shù)據(jù)后觸發(fā)該時間,提取數(shù)據(jù)Dim buf As Stringbuf = If flag Mod 2 = 1 Then = bufElse: = bufEnd Ifflag = flag + 1End Sub ADO DATA 數(shù)據(jù)訪問控件VB對ACCESS數(shù)據(jù)庫的操作是用ADO DATA 數(shù)據(jù)訪問控件實(shí)現(xiàn)的。在工程部件中添加Microsoft ADO control ,從工具箱中添加該控件即可。提前建立一個ACCESS數(shù)據(jù)庫,有兩個表,一個是消費(fèi)記錄,一個是會員信息,之后的關(guān)鍵工作就是將添加好的數(shù)據(jù)訪問控件與數(shù)據(jù)庫的表連接起來,這樣才能實(shí)現(xiàn)對庫中數(shù)據(jù)的操作。右擊控件,在彈出的菜單中選中ADODC屬性,在窗口中選擇“使用連接字符串”,點(diǎn)擊生成,在提供程序中選擇“Microsoft jet OLE DB provider”,在連接中選擇建立好的數(shù)據(jù)庫。在記錄源中的設(shè)置分成兩種情況,若要實(shí)現(xiàn)查詢功能,則命令類型選擇1adCmdtext 在命令文本中填入select * from 會員信息。若不用實(shí)現(xiàn)查詢,只要實(shí)現(xiàn)增添、刪除、修改,則命令類型選擇2adCmdtable 表存儲過程中選擇要連接的表。如對消費(fèi)記錄和會員信息的操作就是分別用兩個控件連接這兩個表。使用文本框顯示數(shù)據(jù)庫各項(xiàng)信息。要想實(shí)現(xiàn)對表中每條記錄的顯示,就要使用文本框控件,在控件屬性中,datasource填寫要連接的控件(該控件與要顯示的表關(guān)聯(lián))名稱,在datafield中填寫要顯示的記錄項(xiàng)。這樣程序運(yùn)行時該文本框中將顯示對應(yīng)的記錄項(xiàng),在ADO控件上點(diǎn)擊下一條,文本框?qū)@示下一條記錄的相應(yīng)項(xiàng)。在實(shí)現(xiàn)查詢功能的時候我們希望能夠顯示所有的記錄,并能在其中根據(jù)查詢想找到要記錄,這是我們需要一個叫datagrid的控件,首先我們應(yīng)該先在工程部件中添加Microsoft data bound grid control 。將該控件添加到窗體就能實(shí)現(xiàn)上述的功能。對數(shù)據(jù)庫的訪問,要實(shí)現(xiàn)的最重要的功能就是“增刪改查”四大項(xiàng)了。會員信息管理、后續(xù)的消費(fèi)記錄操作都是基于這四項(xiàng)功能的,下面是會員管理界面對會員信息實(shí)現(xiàn)增添、刪除、修改、查詢的窗體代碼:Private Sub Command1_Click()//查詢按鈕的click事件方法Dim str As String str = Select 會員信息.* from 會員信息 where 姓名=39。 amp。 Text1 amp。 39。 = strEnd SubPrivate Sub Command2_Click()//返回系統(tǒng)首頁Unload 會員信息管理End SubPrivate Sub Command3_Click() 修改會員信息(姓名) = (性別) = (電話) = (密碼) = (剩余金額) = End SubPrivate Sub Command4_Click() 修改信息后,刷新顯示Unload 會員信息管理End SubPrivate Sub Command5_Click() 添加新記錄End SubPrivate Sub Command6_Click() 將新信息更新到數(shù)據(jù)庫End SubPrivate Sub Command7_Click() 刪除記錄x = MsgBox(確實(shí)要刪除當(dāng)前記錄嗎?, vbYesNo + vbQuestion, 確認(rèn))If x = vbYes ThenIf ThenEnd IfElseEnd IfEnd Sub設(shè)計中遇到的困難及其解決方案設(shè)計中遇到最大的困難是串行通信的實(shí)現(xiàn),從一開始焊接好MAX232之后,在改正了一個三根