版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于單片機(jī)醫(yī)用智能輸液泵的研究與設(shè)計(jì)</p><p><b> 摘 要</b></p><p> 隨著科技的發(fā)展,越來越多的領(lǐng)域需要對(duì)流量或流速進(jìn)行精確控制。尤其現(xiàn)代醫(yī)療領(lǐng)域?qū)o脈輸液流速和護(hù)理的要的流求越來越高.本裝置就是采用89C51控制步進(jìn)式電機(jī)擠壓輸液管控制液體點(diǎn)滴速度,并采用紅外線光電傳感器檢測(cè)點(diǎn)滴速度,具有反應(yīng)快,靈敏度高
2、的優(yōu)點(diǎn)。并詳細(xì)介紹了單片機(jī)組成的電機(jī)控制系統(tǒng),以及通過擴(kuò)展8255芯片完成鍵盤和現(xiàn)實(shí)電路的設(shè)計(jì)。該系統(tǒng)還可以通過RS-232芯片與上位機(jī)組成主從控制網(wǎng)絡(luò),實(shí)現(xiàn)統(tǒng)一控制。并具有輸液完了和氣泡報(bào)警等功能,使用靈活方便。關(guān)鍵詞:89C51,步進(jìn)式電機(jī),紅外線傳感器,8255,RS-232</p><p> Abstract Along with the technological development, mo
3、re and more realms need discharge or current velocities of the convection proceed precision control, The particularly modern medical treatment realm loses the liquid current velocity to the vein to want with the nursing
4、of flow to beg more and more high. This device is to adopts a 89C51s enter the type electrical engineering squeeze to lose the liquid control system liquid intravenous drop speed. Combining the adoption infrared ray ligh
5、t fax</p><p><b> 目 錄</b></p><p> 第一章 緒 論1</p><p><b> 1.1 引言1</b></p><p> 1.2 智能輸液泵可實(shí)現(xiàn)的功能2</p><p> 1.3 輸液泵在臨床醫(yī)療應(yīng)用的現(xiàn)狀
6、2</p><p> 1.4 智能輸液泵與莫菲氏點(diǎn)滴法的區(qū)別及優(yōu)點(diǎn)2</p><p> 第二章 方案論證4</p><p> 2.1 總體方案論證4</p><p> 2.2 方案比較4</p><p> 第三章 硬件系統(tǒng)設(shè)計(jì)8</p><p> 3.1 AT89C5
7、1單片機(jī)管腳特性及相應(yīng)參數(shù)8</p><p> 3.2 傳感器控制檢測(cè)11</p><p> 3.3 步進(jìn)電機(jī)控制電路12</p><p> 3.4 滴數(shù)換算方法13</p><p> 3.5 鍵盤和顯示部分14</p><p> 3.6 與上位機(jī)的通信16</p><p>
8、; 第四章 軟件設(shè)計(jì)18</p><p> 4.1初始化模塊19</p><p> 4.2步進(jìn)電機(jī)控制21</p><p> 4.3鍵盤和顯示子程序29</p><p> 4.4 與上位機(jī)通信模塊32</p><p><b> 結(jié)束語39</b></p>&l
9、t;p><b> 參考文獻(xiàn)39</b></p><p><b> 致 謝40</b></p><p><b> 第一章 緒 論</b></p><p><b> 1.1 引言</b></p><p> 隨著科技的發(fā)展,越來越多的領(lǐng)
10、域需要對(duì)流體的流量或流速進(jìn)行精確控制,如化工領(lǐng)域?qū)ξ⒘吭氐臋z測(cè)和分析常需要精確控制流量,機(jī)械領(lǐng)域也常常涉及到精確流量的控制。除此之外,醫(yī)療保健領(lǐng)域中對(duì)各種藥液的流量與流速也需要精確控制。 靜脈輸液室一種最常用的臨床治療方法,使護(hù)理專業(yè)的一項(xiàng)常用給藥治療技術(shù)。臨床上應(yīng)根據(jù)藥物和患者情況不同配以適當(dāng)?shù)妮斠簲?shù)量和速度。如輸液過快,可能導(dǎo)致中毒,更嚴(yán)重時(shí)會(huì)導(dǎo)致水腫和心力衰竭;輸液過慢則可能發(fā)生藥量不夠或無謂地延長(zhǎng)輸液時(shí)間,使治療效果受
11、影響并給患者和護(hù)理工作增加不必要的負(fù)擔(dān)。常規(guī)臨床輸液。普遍采用莫菲氏掛瓶輸液,并用眼睛觀察,依靠手動(dòng)夾子來控制藥滴速度,不易精確控制輸液速度,而且護(hù)理人員工作量大,不適于大型醫(yī)院及戰(zhàn)地醫(yī)療的護(hù)理。 癌癥病人的化療和病危病人的搶救治療需要使藥物以恒定的速度灌注,通過調(diào)節(jié)輸入的速度和時(shí)間將化療藥物均勻地注入,既達(dá)到化療的效果,又能最大限度地降低化療藥物的副作用。 糖尿病人遭受病痛的折磨,需要以一定的速度給他們注射一定劑量的胰島素
12、。以往的做法基本上是一次注射較大劑量的胰島素,這不僅造成巨大的浪費(fèi),而且藥效作用時(shí)間也較短,</p><p> 1.2 智能輸液泵可實(shí)現(xiàn)的功能</p><p> 智能型醫(yī)用輸液泵可滿足多種功能的需求,歸納起來,輸液泵可實(shí)現(xiàn)以下功能:</p><p> .可精確控制輸液的速度 .可精確測(cè)定和控制輸液量 .輸液速度控制范圍可精確到5—1000ml/h .能對(duì)
13、氣泡,輸液完畢等異常情況進(jìn)行報(bào)警。 .實(shí)現(xiàn)智能控制輸液 .控制誤差: 3% </p><p> 1.3 輸液泵在臨床醫(yī)療應(yīng)用的現(xiàn)狀</p><p> 輸液治療是現(xiàn)代醫(yī)藥學(xué)中最常執(zhí)行的操作,也是病人衡量護(hù)理技術(shù)操作水平的重要依據(jù),它直接影響病人的安全和病人滿意度以及康復(fù)的結(jié)果。 據(jù)某醫(yī)院2003年1月~2004年12月調(diào)查資料表明,該院20個(gè)臨床科室發(fā)生護(hù)理缺陷58例,有關(guān)輸
14、液治療的護(hù)理缺陷26例,占45%,致病人投訴3例。發(fā)生輸液護(hù)理缺陷的護(hù)理人員工齡1~2年的17人次,占65%;工齡2~5年的7人次,占27%;工齡5年以上的2人次,占8%。如此大規(guī)模的誤操作,必定匯給病人和醫(yī)院本身帶來無法預(yù)計(jì)的后果,并且在現(xiàn)代醫(yī)學(xué)護(hù)理中,根據(jù)患者病情的不同,使用的藥物及所需要的滴注速度也不相同。為改變輸液時(shí)僅憑護(hù)理人員不斷地查看滴速是否異常、輸液是否完畢然后手動(dòng)調(diào)節(jié)的原始方法,需研制出一種智能型輸液泵。這類輸液泵在市場(chǎng)
15、上已經(jīng)有所應(yīng)用,但目前在醫(yī)院中使用的靜脈輸液泵價(jià)格均比較昂貴,一般在1~2萬元之間,所以在醫(yī)院中大多只用于危重病人的監(jiān)護(hù)輸液,而普通病人的靜脈輸液多數(shù)仍采用手動(dòng)方式、人工看護(hù)。為了改變這種現(xiàn)狀,使普通病人的靜脈輸液也能自動(dòng)得到監(jiān)視和報(bào)警,減輕醫(yī)護(hù)人員的負(fù)擔(dān),保證樹葉的精確性、安全性,并且便于集中管理,我設(shè)計(jì)了一種低價(jià)位、高性</p><p> 1.4 智能輸液泵與莫菲氏點(diǎn)滴法的區(qū)別及優(yōu)點(diǎn)</p>
16、<p> 傳統(tǒng)的臨床護(hù)理中,多采用莫菲氏滴管輸液法 ,莫菲氏點(diǎn)滴法問世至今已有一百多年的歷史,該法在治病救人中起到了無可替代的作用,但使用中存在著諸多不便,尤其在戰(zhàn)地和野外救護(hù)中更為突出。如:要靠高度差才能輸液,否則,不但不能輸液,還會(huì)導(dǎo)致血液倒流,造成危險(xiǎn)。 隨著大規(guī)模數(shù)字集成電路的發(fā)展,數(shù)字電路在各行各業(yè)的應(yīng)用也日益普及,醫(yī)療輸液泵在對(duì)病人的治療領(lǐng)域成為不可缺少的儀器,它可以在輸液過程中精確控制流速,利用單片機(jī)對(duì)
17、步進(jìn)電機(jī)的控制來調(diào)節(jié)流速,彌補(bǔ)了莫菲氏點(diǎn)滴法的諸多不足,如傷、病員在移送,走動(dòng)等過程中,可以做到無需架子的任意放置,達(dá)到正常輸液救護(hù)的目的,可自主設(shè)定輸液速度、輸液完了報(bào)警、氣泡報(bào)警等功能。所以智能輸液器的各種優(yōu)點(diǎn)必將受到人們的重視,未來的開發(fā)必然會(huì)給醫(yī)療護(hù)理領(lǐng)域以及戰(zhàn)地醫(yī)療帶來極大的影響。</p><p><b> 第二章 方案論證</b></p><p>
18、2.1 總體方案論證</p><p> 在詳細(xì)的了解了設(shè)計(jì)要求后,通過資料的查閱,對(duì)各部分功能的掌握以及以往輸液器成品的了解,在反復(fù)比較和計(jì)算的前提下,建立了總體方案的框圖。</p><p><b> 圖1.1</b></p><p> 總體上確立了由AT89C51為控制芯片,通過擴(kuò)展片8255連接鍵盤,并由液滴監(jiān)控電路、氣泡檢測(cè)電路、
19、步進(jìn)電機(jī)驅(qū)動(dòng)電路和RS-232與上位機(jī)連接形成的系統(tǒng)結(jié)構(gòu)。利用紅外傳感器檢測(cè)液滴流速,將采集到的數(shù)據(jù)送與AT89C51;CPU則控制步進(jìn)電機(jī)蠕動(dòng)角度和速度,將步進(jìn)電機(jī)的角度轉(zhuǎn)動(dòng)量轉(zhuǎn)化為直線進(jìn)給,并反復(fù)計(jì)算得出在一段時(shí)間內(nèi)電機(jī)控制下的實(shí)際滴數(shù) 其與預(yù)設(shè)值相比,保證在系統(tǒng)允許誤差范圍內(nèi)正常工作。保持系統(tǒng)穩(wěn)定、精確的工作。</p><p><b> 2.2 方案比較</b></p>
20、<p><b> 方案一:</b></p><p> 利用紅外管發(fā)出紅外光,受到莫菲氏管內(nèi)液滴的阻擋,變成斷續(xù)的液滴信號(hào),紅外受光管將受到的斷續(xù)得信號(hào)整形、放大成脈沖信號(hào)。這個(gè)信號(hào)經(jīng)接口電路送入微機(jī)處理器,處理器根據(jù)原設(shè)定的醫(yī)學(xué)要求進(jìn)行數(shù)據(jù)處理,并送往輸出接口電路,再由電機(jī)驅(qū)動(dòng)電路驅(qū)動(dòng)直流電機(jī),直流電機(jī)帶動(dòng)氣泵往藥液瓶?jī)?nèi)送氣,使瓶?jī)?nèi)產(chǎn)生一定的壓力,以控制液滴的滴注速度,使之達(dá)
21、到臨床輸液要求。</p><p> 總體結(jié)構(gòu)如圖1.2所示。</p><p><b> 圖1.2</b></p><p> 具體使用方法如下:a. 準(zhǔn)備好藥液,將輸液瓶卡入支架內(nèi),并將氣泵嘴插入氣管口內(nèi),將莫非氏管卡入莫非氏支架內(nèi)。b. 將電源開關(guān)置于ON,儀器顯示01:23:45,此時(shí)按一下設(shè)置,儀器顯示500ml,根據(jù)實(shí)際藥液量,
22、用++鍵、+鍵或-鍵,設(shè)置好輸液總量。 c. 再按設(shè)置鍵,儀器顯示40滴 ,根據(jù)病情用++鍵、+鍵、-鍵設(shè)置輸液速度(滴/分)。d. 斷續(xù)按動(dòng)NC鍵,使輸液管排氣,當(dāng)空氣排凈后使液滴正常滴注。e. 常規(guī)消毒后,將輸液針頭插入靜脈,固定好,按行動(dòng)鍵,自動(dòng)輸液開始。f. 當(dāng)藥液剩余量為30ml時(shí),儀器蜂鳴報(bào)警,待輸液結(jié)束,取出針頭、藥瓶,將電源開關(guān)置于off。g. 需要充電時(shí),將充電器輸出插頭插入儀器充電插座內(nèi),充電器指示燈亮,當(dāng)
23、指示燈熄滅,充電結(jié)束。方案二:</p><p> 采用AT89C51芯片,通過光電傳感器監(jiān)測(cè)液滴信號(hào),經(jīng)脈沖整形電路送芯片(當(dāng)無液滴落下時(shí),光電傳感器輸出低電平;當(dāng)液滴經(jīng)過傳感器,傳感器感測(cè)到光線變化,輸出脈沖信號(hào),送與芯片的電平為高電平),單片機(jī)芯片根據(jù)接收到的脈沖的頻率就可以計(jì)算出當(dāng)時(shí)的輸液速度,并控制步進(jìn)電機(jī)轉(zhuǎn)速以精確控制流量和流速。 一、本方案的液滴檢測(cè)部分采用的是直射式紅外光電傳感器ST15
24、0該傳感器特點(diǎn)如下:1. 采用高發(fā)射功率紅外光電二極管和高靈敏度光電晶體管組成。2. 采用非接觸檢測(cè)方式。3. 光縫寬度(分辨率)有0.8mm、0.4mm兩種該光電傳感器外形尺寸小巧,靈敏度高且價(jià)格便宜,能滿足本設(shè)計(jì)輸液器的各項(xiàng)性能要求指標(biāo)。 二、步進(jìn)電機(jī)部分采用四相步進(jìn)電機(jī)35by48bh10驅(qū)動(dòng)電壓為12v。采用ULN2003芯片對(duì)其驅(qū)動(dòng),驅(qū)動(dòng)電壓為5v,該電壓小于12v,因此要外加電壓直到12v從而為電機(jī)提供足夠
25、的能量。 三、顯示部分 采用數(shù)碼管顯示方式,比起液晶顯示器數(shù)碼管能實(shí)現(xiàn)相同的功能且價(jià)格低廉,所以選擇74LS48 數(shù)碼管顯示較為合理。 四、步進(jìn)電機(jī)控制液滴—流速 為力</p><p> 測(cè)得電機(jī)轉(zhuǎn)角最大值和最小值的滴數(shù)。根據(jù)病人的實(shí)際情況設(shè)定預(yù)設(shè)值,假如起始值輸入每分鐘100滴,設(shè)定測(cè)試時(shí)間的范圍為30秒,如果實(shí)際得到只有60滴,而此時(shí)步進(jìn)電機(jī)的轉(zhuǎn)角為30度,那么加大步進(jìn)電機(jī)的進(jìn)
26、給角度為60度,得出實(shí)際的滴數(shù),假如得到110滴,那么逐漸減小角度,若得到90滴,就再加大進(jìn)給角度,經(jīng)過多次的調(diào)試,得到再測(cè)試時(shí)間范圍內(nèi)的穩(wěn)定實(shí)際數(shù)值在和預(yù)設(shè)值的允許誤差范圍內(nèi),則此方案可行。因?yàn)闇y(cè)試時(shí)間較短,一個(gè)儲(chǔ)液瓶滴完大概要一個(gè)小時(shí)左右,遠(yuǎn)遠(yuǎn)大于裝置的測(cè)試時(shí)間,一點(diǎn)不影響正常病人藥液的輸入,故可以忽略。此計(jì)算方法簡(jiǎn)單明了,容易實(shí)施。 比較以上兩種方案,前一種控制復(fù)雜,系統(tǒng)造價(jià)較高且精度不好,利用空氣壓力控制流速會(huì)對(duì)外界條件
27、的要求很苛刻,對(duì)輸液瓶的結(jié)構(gòu)要求也很高,不適合使用在經(jīng)濟(jì)不發(fā)達(dá)的醫(yī)療機(jī)構(gòu)或站地醫(yī)療之中。而方案二控制原理簡(jiǎn)單,實(shí)現(xiàn)的功能俱全,且整體造價(jià)經(jīng)濟(jì),易于操作,對(duì)外界環(huán)境要求不高,是總體性價(jià)比較高的方案,故選擇第二套方案。</p><p> 第三章 硬件系統(tǒng)設(shè)計(jì)</p><p><b> 總體硬件設(shè)計(jì)</b></p><p> 硬件設(shè)計(jì)的基本思
28、路是實(shí)用、可靠以及小型化。為此選用了美國(guó)ATMEL公司AT89C51 單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器。</p><p> 氣泡檢測(cè)電路由紅外傳感器及放大器組成。傳感器采用ST150,當(dāng)有氣泡通過
29、時(shí),發(fā)射管發(fā)射出的光信號(hào)由于氣泡的影響而改變了強(qiáng)度,造成接收管電壓的改變,經(jīng)放大器LM324放大后給89C51 發(fā)出一個(gè)低電平信號(hào)。阻塞檢測(cè)電路由一個(gè)橡膠導(dǎo)管及微動(dòng)開關(guān)組成,當(dāng)出現(xiàn)輸液阻塞現(xiàn)象時(shí),藥液流入橡膠導(dǎo)管,觸動(dòng)微動(dòng)開關(guān),微動(dòng)開關(guān)發(fā)給89C51 一個(gè)低電平號(hào),89C51接到低電平信號(hào)后,控制報(bào)警蜂鳴器及故障報(bào)警燈進(jìn)行聲光報(bào)警,步進(jìn)電機(jī)停止運(yùn)動(dòng),進(jìn)行故障處理。步進(jìn)電機(jī)驅(qū)動(dòng)電路采用ULN2003芯片,89C51通過驅(qū)動(dòng)電路來驅(qū)動(dòng)步進(jìn)電
30、機(jī),步進(jìn)電機(jī)轉(zhuǎn)速與輸液速度成正比。控制電機(jī)的轉(zhuǎn)速即可改變輸液的速度。輸液容量與步進(jìn)電機(jī)運(yùn)行的步數(shù)以及輸液泵系統(tǒng)的脈沖當(dāng)量(即步進(jìn)電機(jī)每運(yùn)行一步輸液泵輸出藥液的體積) 成正比。不同的輸液管對(duì)應(yīng)的脈沖當(dāng)量不同。控制步進(jìn)電機(jī)運(yùn)行的步數(shù)即可控制輸液量。</p><p> 3.1 AT89C51單片機(jī)管腳特性及相應(yīng)參數(shù)</p><p> AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(
31、FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。</p><p> 3.1.1 主
32、要特性 </p><p> ·與MCS-51 兼容 </p><p> ·4K字節(jié)可編程閃爍存儲(chǔ)器 </p><p> ·壽命:1000寫/擦循環(huán)</p><p> ·數(shù)據(jù)保留時(shí)間:10年</p><p> ·全靜態(tài)工作:0Hz-24MHz</p&g
33、t;<p> ·三級(jí)程序存儲(chǔ)器鎖定</p><p> ·128×8位內(nèi)部RAM</p><p> ·32可編程I/O線</p><p> ·兩個(gè)16位定時(shí)器/計(jì)數(shù)器</p><p><b> ·5個(gè)中斷源 </b></p>
34、<p><b> ·可編程串行通道</b></p><p> ·低功耗的閑置和掉電模式</p><p> ·片內(nèi)振蕩器和時(shí)鐘電路</p><p> 3.1.2 管腳說明</p><p><b> VCC:供電電壓。</b></p>&l
35、t;p><b> GND:接地。</b></p><p> P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p><p
36、> P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。 </p><p> P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳
37、被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。</p><p> P3口:P3口管腳是8個(gè)
38、帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p> P3口也可作為AT89C51的一些特殊功能口,如下表所示:</p><p><b> 口管腳 備選功能</b></p><p>
39、 P3.0 RXD(串行輸入口)</p><p> P3.1 TXD(串行輸出口)</p><p> P3.2 /INT0(外部中斷0)</p><p> P3.3 /INT1(外部中斷1)</p><p> P3.4 T0(記時(shí)器0外部輸入)</p><p> P3.5 T1(記時(shí)器1外部輸入)</
40、p><p> P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)</p><p> P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p> P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p> RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。</p><p> ALE/PRO
41、G:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果
42、微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> /PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。</p><p> /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)
43、部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p> XTAL2:來自反向振蕩器的輸出。</p><p><b> 圖3.1</b></p><p&
44、gt;<b> 振蕩器特性:</b></p><p> XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p> 3.2 傳感
45、器控制檢測(cè)</p><p> 氣泡檢測(cè)電路由紅外傳感器及放大器組成。傳感器采用ST150 紅外對(duì)管,當(dāng)有氣泡通過時(shí),發(fā)射管發(fā)射出的光信號(hào)由于氣泡的影響而改變了強(qiáng)度,造成接收管電壓的改變經(jīng)放大器LM324放大后給AT89C51 發(fā)出一個(gè)低電平信號(hào)。阻塞檢測(cè)電路由一個(gè)橡膠導(dǎo)管及微動(dòng)開關(guān)組成,當(dāng)出現(xiàn)輸液阻塞現(xiàn)象時(shí),藥液流入橡膠導(dǎo)管,觸動(dòng)微動(dòng)開關(guān),微動(dòng)開關(guān)發(fā)給AT89C51 一個(gè)低電平信號(hào),AT89C51接到低電平信號(hào)
46、后,控制報(bào)警蜂鳴器及故障報(bào)警燈進(jìn)行聲光報(bào)警,步進(jìn)電機(jī)停止運(yùn)動(dòng),進(jìn)行故障處理。輸液完畢與此同理。</p><p> 本方案的液滴檢測(cè)部分采用的是直射式紅外光電傳感器ST150特點(diǎn):1. 采用高發(fā)射功率紅外光電二極管和高靈敏度光電晶體管組成。2. 采用非接觸檢測(cè)方式。3. 光縫寬度(分辨率)有0.8mm、0.4mm兩種該光電傳感器外形尺寸小巧,靈敏度高且價(jià)格便宜,能滿足本設(shè)計(jì)輸液器各項(xiàng)性能要求指標(biāo)。
47、 </p><p> LM324系列器件為價(jià)格便宜的帶有真差動(dòng)輸入的四運(yùn)算放大器。與單電源應(yīng)用場(chǎng)合的標(biāo)準(zhǔn)運(yùn)算放大器相比,它們有一些顯著優(yōu)點(diǎn)。該四放大器可以工作在低到3.0伏或者高到32伏的電源下,靜態(tài)電流為MC1741的靜態(tài)電流的五分之一。共模輸入范圍包括負(fù)電源,因而消除了在許多應(yīng)用場(chǎng)合中采用外部偏置元件的必要性。每一組運(yùn)算放大器可用圖1所示的符號(hào)來表示,它有5個(gè)引出腳,其中“+”、“-”為兩
48、個(gè)信號(hào)輸入端,“V+”、“V-”為正、負(fù)電源端,“Vo”為輸出端。兩個(gè)信號(hào)輸入端中,Vi-(-)為反相輸入端,表示運(yùn)放輸出端Vo的信號(hào)與該輸入端的位相反;Vi+(+)為同相輸入端,表示運(yùn)放輸出端Vo的信號(hào)與該輸入端的相位相同。LM324的引腳排列下圖。</p><p><b> 圖3.2</b></p><p> 3.3 步進(jìn)電機(jī)控制電路</p>&
49、lt;p> 在這里采用ULN2003芯片來對(duì)四相步進(jìn)電機(jī)進(jìn)行驅(qū)動(dòng)。</p><p> 下面介紹用AT89C51單片機(jī)驅(qū)動(dòng)步進(jìn)電機(jī)的方法。 這款步進(jìn)電機(jī)的驅(qū)動(dòng)電壓12V步進(jìn)角為7.5度一圈360度,需要48個(gè)脈沖完成。該步進(jìn)電機(jī)有6根引線,排列次序如下:1:紅色、2:紅色、3:橙色、4:棕色、5:黃色、6:黑色。采用51驅(qū)動(dòng)ULN2003的方法進(jìn)行驅(qū)動(dòng)。硬件連接如下圖。 </p>
50、<p><b> 圖3.3</b></p><p> ULN2003的驅(qū)動(dòng)直接用單片機(jī)系統(tǒng)的5V電壓,可能力矩不是很大,可自行加大驅(qū)動(dòng)電壓到12V。</p><p> ; A組線圈對(duì)應(yīng) P2.4; B組線圈對(duì)應(yīng) P2.5; C組線圈對(duì)應(yīng) P2.6; D組線圈對(duì)應(yīng) P2.7; 正轉(zhuǎn)次序: AB組--BC組--CD組--DA組 (即一個(gè)脈沖,正
51、轉(zhuǎn) 7.5 度)。</p><p> 3.4 滴數(shù)換算方法</p><p> 測(cè)得電機(jī)轉(zhuǎn)角最大值和最小值的滴數(shù)。根據(jù)病人的實(shí)際情況設(shè)定預(yù)設(shè)值,假如起始值輸入每分鐘100滴,設(shè)定測(cè)試時(shí)間的范圍為30秒,如果實(shí)際得到只有60滴,而此時(shí)步進(jìn)電機(jī)的轉(zhuǎn)角為30度,那么加大步進(jìn)電機(jī)的進(jìn)給角度為60度,得出實(shí)際的滴數(shù),假如得到110滴,那么逐漸減小角度,若得到90滴,就再加大進(jìn)給角度,經(jīng)過多次的調(diào)試
52、,得到再測(cè)試時(shí)間范圍內(nèi)的穩(wěn)定實(shí)際數(shù)值在和預(yù)設(shè)值的允許誤差范圍內(nèi),則此方案可行。因?yàn)闇y(cè)試時(shí)間較短,一個(gè)儲(chǔ)液瓶滴完大概要一個(gè)小時(shí)左右,遠(yuǎn)遠(yuǎn)大于裝置的測(cè)試時(shí)間,一點(diǎn)不影響正常病人藥液的輸入,故可以忽略。此計(jì)算方法簡(jiǎn)單明了,容易實(shí)施。</p><p> 3.5 鍵盤和顯示部分</p><p> 鍵盤的主要功能是隨時(shí)設(shè)定輸液速度,本設(shè)計(jì)的鍵盤部分設(shè)計(jì)十分簡(jiǎn)單,按鍵“+ +”的的功能是加大輸液輸液
53、速度按鍵的輸入值設(shè)為F,按鍵“——”的功能是減小輸液速度按鍵的輸入值暫定為E,按鍵“啟?!钡墓δ苁窃O(shè)定輸液速度后按一下 這是輸液開始,再按一下輸液停止按鍵設(shè)為D。輸液速度和輸液時(shí)間都可以通過輸入數(shù)字值設(shè)定。在這里采用8255芯片與單片機(jī)連接做鍵盤的設(shè)計(jì)。</p><p> 8255芯片結(jié)構(gòu)特點(diǎn)介紹</p><p> 8255是Intel公司生產(chǎn)的可編程并行I/O接口芯片,有3個(gè)8位并行
54、I/O口。具有3個(gè)通道3種工作方式的可編程并行接口芯片(40引腳)。 其各口功能可由軟件選擇,使用靈活,通用性強(qiáng)。8255可作為單片機(jī)與多種外設(shè)連接時(shí)的中間接口電路。 </p><p> 8255作為主機(jī)與外設(shè)的連接芯片,必須提供與主機(jī)相連的3個(gè)總線接口,即數(shù)據(jù)線、地址線、控制線接口。同時(shí)必須具有與外設(shè)連接的接口A、B、C口。由于8255可編程,所以必須具有邏輯控制部分,因而8255內(nèi)部結(jié)構(gòu)分為3個(gè)部分:與CP
55、U連接部分、與外設(shè)連接部分、控制部分。</p><p><b> 引腳功能介紹如下;</b></p><p> RESET:復(fù)位輸入線,當(dāng)該輸入端處于高電平時(shí),所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成輸入方式。 </p><p> CS:芯片選擇信號(hào)線,當(dāng)這個(gè)輸入引腳為低電平時(shí),即/CS=0時(shí),表示芯片被選中,允許8
56、255與CPU進(jìn)行通訊;/CS=1時(shí),8255無法與CPU做數(shù)據(jù)傳輸. </p><p> RD:讀信號(hào)線,當(dāng)這個(gè)輸入引腳為低電平時(shí),即/RD=0且/CS=0時(shí),允許8255通過數(shù)據(jù)總線向CPU發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU從8255讀取信息或數(shù)據(jù)。 </p><p> WR:寫入信號(hào),當(dāng)這個(gè)輸入引腳為低電平時(shí),即/WR=0且/CS=0時(shí),允許CPU將數(shù)據(jù)或控制字寫入8255。 <
57、/p><p> D0~D7:三態(tài)雙向數(shù)據(jù)總線,8255與CPU數(shù)據(jù)傳送的通道,當(dāng)CPU 執(zhí)行輸入輸出指令時(shí),通過它實(shí)現(xiàn)8位數(shù)據(jù)的讀/寫操作,控制字和狀態(tài)信息也通過數(shù)據(jù)總線傳送。 </p><p> PA0~PA7:端口A輸入輸出線,一個(gè)8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個(gè)8位的數(shù)據(jù)輸入鎖存器。 </p><p> PB0~PB7:端口B輸入輸出線,一個(gè)8位的I/O
58、鎖存器, 一個(gè)8位的輸入輸出緩沖器。 </p><p> PC0~PC7:端口C輸入輸出線,一個(gè)8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個(gè)8位的數(shù)據(jù)輸入緩沖器。端口C可以通過工作方式設(shè)定而分成2個(gè)4位的端口, 每個(gè)4位的端口包含一個(gè)4位的鎖存器,分別與端口A和端口B配合使用,可作為控制信號(hào)輸出或狀態(tài)信號(hào)輸入端口。' </p><p> A0,A1:地址選擇線,用來選擇8255的PA口
59、,PB口,PC口和控制寄存器. </p><p> 當(dāng)A0=0,A1=0時(shí),PA口被選擇; </p><p> 當(dāng)A0=0,A1=1時(shí),PB口被選擇; </p><p> 當(dāng)A0=1,A1=0時(shí),PC口被選擇; </p><p> 當(dāng)A0=1.A1=1時(shí),控制寄存器被選擇</p><p> 本設(shè)計(jì)所需的按鍵比
60、較少所以我們將其設(shè)計(jì)為4*4鍵盤,多出的按鍵可以為以后擴(kuò)展功能備用。</p><p><b> 圖3.4</b></p><p> 本設(shè)計(jì)的顯示部分的主要是功能是顯示輸液的速度值和輸液的時(shí)間,便于觀察和更改適當(dāng)?shù)妮斠核俣?。硬件考慮到節(jié)約成本采用的是74LS48 數(shù)碼管而不是液晶顯示。</p><p> 由于精度要在-+%3 因此四位顯示足
61、夠本設(shè)計(jì)的要求。</p><p> 硬件連接如下圖3.5所示。</p><p><b> 圖3.5</b></p><p> 3.6 與上位機(jī)的通信</p><p> 本設(shè)計(jì)與上位機(jī)進(jìn)行通信的主要目的,是在輸液完畢和輸液泵阻塞的時(shí)候能夠向遠(yuǎn)處護(hù)理人員發(fā)出報(bào)警信號(hào),使之盡快的解決問題。通信方式采用串行通信。<
62、/p><p> 串行通信是指通信的發(fā)送方和接收方之間的數(shù)據(jù)信息的傳輸是在單根數(shù)據(jù)線,以每次一個(gè)二進(jìn)制位移動(dòng)的他的好處是只需一對(duì)傳輸線進(jìn)行傳送信息,因此其成本低,適用于遠(yuǎn)距離通信,他的缺點(diǎn)是傳送速度低,串行通信有異步通行和同步通信兩種基本通信方式,同步通信適用于傳送速度高的情況,其硬件復(fù)雜,而異步通信應(yīng)用于傳送速度在50-19200波特之間,是比較常用的傳送方式,在異步通信中,數(shù)據(jù)是一幀一幀傳送的,每一串行幀的數(shù)據(jù)格
63、式由1位起始位,5-8位的數(shù)據(jù)位,1位的奇偶校驗(yàn)位(可省略)和1位停止位4部分組成,在串行通信前,發(fā)送方和接收方要約定具體的數(shù)據(jù)格式和波特率(通信協(xié)議)。</p><p> RS232C是一種電壓型總線標(biāo)準(zhǔn),可用于設(shè)計(jì)計(jì)算機(jī)接口和終端或外設(shè)之間的連接,以不同的極性的電壓表示邏輯值。-3~-25V表示邏輯"1"。+3~+25V表示邏輯"0"。其電平和TTL和CMOS電平是不
64、同的,所以在通信時(shí)必須進(jìn)行電平轉(zhuǎn)換。</p><p> MAXIM公司的MAX232/MAX232A接收/發(fā)送器是MAXIM公司特別為EIA/TEA2232E的標(biāo)準(zhǔn)而設(shè)計(jì)的,他們?cè)贓IA/TIA2232E標(biāo)準(zhǔn)串行通信接口中日益得到廣泛的應(yīng)用,他們具有功耗低、工作電源為單電源、外接電容僅為0.1μF或1μF,采用雙列直插封裝形式、接收器輸出為三態(tài)TTL/CMOS等優(yōu)越性,為雙組RS 232接收發(fā)送器,工作電源為+
65、5V,波特率高,僅需外接0.1μF或1μF的電容,其價(jià)格低,可在一般需要串行通信的系統(tǒng)中使用,MAX232外圍需要4個(gè)電解電容,是內(nèi)部電源轉(zhuǎn)換所需電容,其取值均為1μF/25V宜選用鉭電容并且應(yīng)盡量靠近芯片。</p><p> 該電路連接原理如圖3.6所示。</p><p><b> 圖3.6</b></p><p><b>
66、第四章 軟件設(shè)計(jì)</b></p><p> 軟件是硬件的支撐, 也是硬件整體性能發(fā)揮的杠桿與上面的硬件相對(duì)應(yīng),把軟件采用功能模塊的方法進(jìn)行編寫,會(huì)增強(qiáng)系統(tǒng)整體可移植性。系統(tǒng)軟件需要的功能模塊主要有鍵盤模塊與顯示模塊, 測(cè)量信號(hào)模塊與步進(jìn)電機(jī)驅(qū)動(dòng)控制模塊, 通訊模塊,報(bào)警模塊。這樣分類也和硬件的設(shè)置相對(duì)應(yīng)。</p><p> 軟件各模塊的相互連接需要主控模塊對(duì)它們進(jìn)行控制。按
67、照主控模塊的執(zhí)行順序來工作。這就是整個(gè)系統(tǒng)的軟件構(gòu)建方案。</p><p> 控制的脈沖頻率就可以控制步進(jìn)電機(jī)的轉(zhuǎn)速,設(shè)定好工作速度后,根據(jù)這一數(shù)值查表對(duì)應(yīng)某一值, 利用這一數(shù)值在這基礎(chǔ)上系統(tǒng)進(jìn)行加速或減速,當(dāng)測(cè)量蔽值和設(shè)定小于規(guī)定的數(shù)時(shí)記錄這個(gè)脈沖率并停止調(diào)速這就是步進(jìn)電機(jī)控制軟件流程的主要思想,如果氣泡中斷信號(hào)來臨,發(fā)生中斷,中斷中將停止步進(jìn)電機(jī)。</p><p> 整個(gè)輸液的過程
68、如下圖4.1所示</p><p><b> 圖4.1</b></p><p><b> 4.1初始化模塊</b></p><p> 在軟件設(shè)計(jì)過程中初始化就是把變量賦為默認(rèn)值,把控件設(shè)為默認(rèn)狀態(tài),把沒準(zhǔn)備的準(zhǔn)備好。</p><p> 在這個(gè)過程中輸液速度,報(bào)警裝置,和時(shí)間都會(huì)被清零,電機(jī)回到
69、初始位置。</p><p> 實(shí)現(xiàn)該功能的軟件流程圖如下。</p><p><b> 圖 4.1</b></p><p><b> 4.2步進(jìn)電機(jī)控制</b></p><p> 4.2.1 步進(jìn)電機(jī)失步的調(diào)整</p><p> 由于受步進(jìn)電機(jī)本身特性的限制,在電機(jī)啟
70、、停及運(yùn)行速度突變時(shí),往往會(huì)出現(xiàn)失步現(xiàn)象,從而影響輸液泵系統(tǒng)的精度。為解決這一問題,本系統(tǒng)采用了軟件實(shí)現(xiàn)自動(dòng)升、降速的方法。步進(jìn)電機(jī)控制速度圖如圖4.2 所示。圖中加、減速段近似于指數(shù)曲線,啟動(dòng)時(shí)速度逐漸加大可以避免沖擊,加速到一定頻率后恒速運(yùn)行,快到終點(diǎn)時(shí)速度緩慢減小,直到走完規(guī)定的步數(shù)后停機(jī),這樣可以避免失步現(xiàn)象。</p><p><b> 圖4.2</b></p>&l
71、t;p> 自動(dòng)升、降速控制的原理框圖如下圖4.3所示。其中誤差寄存器A 中的存</p><p> 數(shù)N 等指令脈沖數(shù)N指令與輸出脈沖數(shù)N輸出之差, 即N = N指令-N輸出。</p><p><b> 圖4.3</b></p><p> 對(duì)N 以f 0 的頻率進(jìn)行累加運(yùn)算,當(dāng)累加之和超過累加器的容量時(shí),將在最高位產(chǎn)生溢出。此溢出脈
72、沖即作為輸出脈沖f 輸出控制步進(jìn)電機(jī)。</p><p> 在Δt 時(shí)間內(nèi)對(duì)N 累加后的累加數(shù)N總為</p><p> N總= Nf 0Δt</p><p> 累加數(shù)N總的溢出次數(shù)為</p><p><b> N溢出==(1)</b></p><p> 式中 n ———累加器和寄存器的位數(shù)
73、。</p><p><b> 輸出脈沖頻率為</b></p><p> f 輸出===(2)</p><p> ΔN = ( f 指令- f 輸出)Δt = ( f 指令- kN)Δt (3)</p><p><b> 寫成微分形式有</b></p><p> f
74、 指令=+ f 輸出 (4)</p><p> 當(dāng)指令脈沖由0 突變?yōu)閒 輸出時(shí),上述方程的</p><p><b> 解為</b></p><p> f 輸出= f 指令(1 - ) (5)</p><p> 式中 T ——時(shí)間常數(shù)</p><p> 這就是電機(jī)速度上升的過程。&
75、lt;/p><p> 當(dāng)指令脈沖由f 指令突變?yōu)? 時(shí),上述微分方</p><p><b> 程的解為</b></p><p> f 輸出= f 指令(1 - )</p><p> 這就是電機(jī)減速的過程。</p><p> 可見,當(dāng)f 指令突變時(shí),f 輸出均按指數(shù)曲線變化。在本系統(tǒng)中用軟件的
76、方法來完成電機(jī)啟動(dòng)、停止時(shí)自動(dòng)升、降速的過程。累加脈沖和指令脈沖采用軟件延時(shí)的方法產(chǎn)生。利用AT89C51的兩個(gè)定時(shí)P計(jì)數(shù)器T0 和T1 來作為計(jì)數(shù)器,每個(gè)機(jī)器指令周期T0 值減1 ,當(dāng)T0值減至0 時(shí)發(fā)出一個(gè)累加脈沖,同時(shí)T0 賦初值, T1 值減1 ,重復(fù)上述過程。當(dāng)T1 值減為0 時(shí)發(fā)出一個(gè)指令脈沖。由此可知, T1 的初值表示了累加</p><p> 脈沖頻率f 0 和指令脈沖頻率f 指令的比值。誤差寄
77、存器中存數(shù)N = N指令- N輸出,每當(dāng)CPU 產(chǎn)生一個(gè)指令脈沖時(shí),誤差寄存器的值加1 ;每當(dāng)累加器產(chǎn)生溢出時(shí),誤差寄存器的值減1。每當(dāng)CPU 產(chǎn)生一個(gè)累加脈沖時(shí),將誤差寄存器中的數(shù)N 與上次存儲(chǔ)在寄存器B 中的累加數(shù)相加,若產(chǎn)生溢出,則發(fā)送一個(gè)輸出脈沖,將在累加器中的余數(shù)存入寄存器B 中;若無溢出,則將累加結(jié)果存入寄存器B 中。自動(dòng)升程序的框圖如下圖4.4所示。</p><p><b> ?。╝)主程
78、序流程</b></p><p> (b)累加脈沖產(chǎn)生流程圖</p><p><b> 圖4.4</b></p><p> 步進(jìn)電機(jī)啟停調(diào)速程序</p><p> #include <AT89X51.h> </p><p> static unsigned int
79、count; //計(jì)數(shù)static int step_index; //步進(jìn)索引數(shù),值為0-7</p><p> static bit turn; //步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向static bit stop_flag; //步進(jìn)電機(jī)停止標(biāo)志static int speedlevel; //步進(jìn)電機(jī)轉(zhuǎn)速參數(shù),數(shù)值越大速度越慢,最小值為1,速度最快static int
80、 spcount; //步進(jìn)電機(jī)轉(zhuǎn)速參數(shù)計(jì)數(shù)void delay(unsigned int endcount); //延時(shí)函數(shù),延時(shí)為endcount*0.5毫秒void gorun(); //步進(jìn)電機(jī)控制步進(jìn)函數(shù)</p><p> void main(v
81、oid) { count = 0; step_index = 0; spcount = 0; stop_flag = 0;</p><p> P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0;</p><p> EA = 1;
82、; //允許CPU中斷 TMOD = 0x11; //設(shè)定時(shí)器0和1為16位模式1 ET0 = 1; //定時(shí)器0中斷允許 </p><p> TH0 =
83、 0xFE; TL0 = 0x0C; //設(shè)定時(shí)每隔0.5ms中斷一次 TR0 = 1; //開始計(jì)數(shù)</p><p><b> turn = 0;</b></p><p> speedlevel = 2;
84、; delay(10000); speedlevel = 1; do{ speedlevel = 2; delay(10000); speedlevel = 1; delay(10000); stop_flag=1;
85、160; delay(10000); stop_flag=0; }while(1);</p><p><b> } </b></p><p> //定時(shí)器0中斷處理 void timeint(void) interrupt 1 { TH0=0xFE; TL
86、0=0x0C; //設(shè)定時(shí)每隔0.5ms中斷一次</p><p><b> count++;</b></p><p> spcount--; if(spcount<=0) { spcount = speedlevel; gorun(); }&
87、lt;/p><p><b> }</b></p><p> void delay(unsigned int endcount){ count=0; do{}while(count<endcount);}</p><p> void gorun(){ if (stop_flag==1)
88、160; { P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; return; } switch(step_index) { case 0: //0
89、 P1_0 = 1; P1_1 = 0; P1_2 = 0; P1_3 = 0; break; case 1: //0、1 P1_0 = 1; P1_1 = 1;
90、; P1_2 = 0; P1_3 = 0; break; case 2: //1 P1_0 = 0; P1_1 = 1; P1_2 = 0; P1_3 = 0;
91、 break; case 3: //1、2 P1_0 = 0; P1_1 = 1; P1_2 = 1; P1_3 = 0; break; case 4: //2
92、 P1_0 = 0; P1</p><p> if (turn==0) { step_index++; if (step_index>7) step_index=0; } els
93、e { step_index--; if (step_index<0) step_index=7; } }</p><p> 4.3鍵盤和顯示子程序</p><p> 本設(shè)計(jì)需
94、要時(shí)4*4鍵盤硬件連接圖如圖3.4所示。</p><p> 4.4.1鍵盤掃描的動(dòng)作原理</p><p> 利用8255的PortC,將PC4~7設(shè)為input,PC0~3設(shè)為output,依序由PC0~PC3送出掃描碼&HFE (PC0=0)、&HFD (PC1=0)、&HFB (PC2=0)、&HF7 (PC3=0),并從PC4~7讀入按鍵數(shù)據(jù)碼,當(dāng)
95、無按鍵按下時(shí),按鍵碼(PC4~7)的值均為1,當(dāng)有按鍵按下時(shí),PC4~7的值就會(huì)改變,如下表。</p><p> 只要依序送出掃描碼、讀入按鍵碼,并判斷是否符合表中的按鍵數(shù)據(jù)碼,即可正確判斷出是那一個(gè)按鍵被按下。</p><p> 而開關(guān)彈跳的解決方式如下:</p><p> (1) 當(dāng)有按鍵被按下時(shí),呼叫延時(shí)子程序后再返回</p><p&
96、gt; (2) 若按鍵一直沒有放開,且已完成延時(shí)子程序,則該按鍵就會(huì)被判斷為按下很多次</p><p> (3) 在子程序結(jié)束返回前,再讀入一次按鍵數(shù)據(jù),并和前一次的值比對(duì),若相同表示該鍵仍被按住,重復(fù)此一比對(duì),直到按鍵放開時(shí)因?yàn)閿?shù)據(jù)不同而結(jié)束比對(duì),并返回。</p><p><b> 以下程序</b></p><p> CTRL = &
97、amp;H203</p><p> PA = &H200</p><p> PB = &H201</p><p> PC = &H202</p><p> OUT CTRL , &H88 ;PA、PB 輸出、PC0~3 輸出、PC4~7輸入</p><p>&
98、lt;b> start:</b></p><p> OUT PC , &HFE ;送出掃描碼 11111110</p><p> portc = INP( PC ) ;讀入按鍵數(shù)據(jù)碼</p><p> IF portc = &HEE THEN PRINT "0": GOSUB d
99、elay</p><p> IF portc = &HDE THEN PRINT "1": GOSUB delay</p><p> IF portc = &HBE THEN PRINT "2": GOSUB delay</p><p> IF portc = &H7E THEN PRINT &q
100、uot;3": GOSUB delay</p><p> OUT PC , &HFD ;送出掃描碼 11111101</p><p> portc = INP( PC )</p><p> IF portc = &HED THEN PRINT "4": GOSUB delay</p><
101、;p> IF portc = &HDD THEN PRINT "5": GOSUB delay</p><p> IF portc = &HBD THEN PRINT "6": GOSUB delay</p><p> IF portc = &H7D THEN PRINT "7": GOSUB
102、delay</p><p> OUT PC , &HFB ;送出掃描碼 11111011</p><p> portc = INP( PC )</p><p> IF portc = &HEB THEN PRINT "8": GOSUB delay</p><p> IF portc =
103、&HDB THEN PRINT "9": GOSUB delay</p><p> IF portc = &HBB THEN PRINT "A": GOSUB delay</p><p> IF portc = &H7B THEN PRINT "B": GOSUB delay</p>&l
104、t;p> OUT PC , &HF7 ;送出掃描碼 11110111</p><p> portc = INP( PC )</p><p> IF portc = &HE7 THEN PRINT "C": GOSUB delay</p><p> IF portc = &HD7 THEN PRINT
105、 "D": GOSUB delay</p><p> IF portc = &HB7 THEN PRINT "E": GOSUB delay</p><p> IF portc = &H77 THEN PRINT "F": GOSUB delay</p><p> GOTO start
106、</p><p><b> END</b></p><p> delay: ;延時(shí)子程序</p><p> oldtime = TIMER ;消除彈跳</p><p> DO WHILE (TIMER - oldtime) < .1</p>&
107、lt;p><b> LOOP</b></p><p> DO ;檢查按鍵是否放開</p><p> check = INP( PC )</p><p> LOOP WHILE (check = portc)</p><p><b> RETURN</b&
108、gt;</p><p> 4.4.2顯示部分采用的是七段譯碼。</p><p> 單片機(jī)7段數(shù)碼管動(dòng)態(tài)顯示程序代碼及其說明如下:</p><p> #include <reg51.h></p><p> #include <intrins.h></p><p> #include<
109、;math.h></p><p> unsigned char data dis_digit; //dis_digit---位選通值, 傳送到P2口用于選通當(dāng)</p><p> //前數(shù)碼管的數(shù)值, 如等于0xfe時(shí),選通P2.0口數(shù)碼管 </p><p> unsigned char code dis_code[11]={0xc0,0xf9,0xa4,
110、0xb0, // 0, 1, 2, 3</p><p> 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off </p><p> unsigned char data dis_buf[8]; // dis_buf --- 顯于緩沖區(qū)基地址 </p><p> unsigned char d
111、ata dis_index; // dis_index --- 顯示索引, 用于標(biāo)識(shí)當(dāng)前顯示的數(shù)碼 //管和緩沖區(qū)的偏移量 </p><p> Void delay(int t)</p><p><b> {</b></p><p><b> int i;&
112、lt;/b></p><p> while(t--) {</p><p> for(i=0;i<120;i++)</p><p><b> {;}</b></p><p><b> }</b></p><p><b> }</b>&
113、lt;/p><p> Void main()</p><p><b> {</b></p><p> P0 = 0xff;</p><p> P2 = 0xff;</p><p> TMOD = 0x01; //定時(shí)器0工作于方式1</p><p> TH0 = 0
114、x8C;</p><p> TL0 = 0x8B;</p><p> IE = 0x8A; //開總中斷和定時(shí)器1中斷允許 </p><p> dis_buf[0] = dis_code[0x1];</p><p> dis_buf[1] = dis_code[0x2];</p><p> dis_buf[2
115、] = dis_code[0x3];</p><p> dis_buf[3] = dis_code[0x4];</p><p> dis_buf[4] = dis_code[0x5]; </p><p> dis_buf[5] = dis_code[0x6];</p><p> dis_buf[6] = dis_code[0x7];&
116、lt;/p><p> dis_buf[7] = dis_code[0x8];</p><p> dis_digit = 0xf9; //控制在數(shù)碼管上顯示的數(shù)字效果,按位 </p><p> dis_index = 0;</p><p><b> TR0 = 1;</b></p><p>&l
117、t;b> while(1);</b></p><p><b> }</b></p><p> Void timer0() interrupt 1</p><p> //定時(shí)器0中斷服務(wù)程序, 用于數(shù)碼管的動(dòng)態(tài)掃描 </p><p> //dis_index --- 顯示索引, 用于標(biāo)識(shí)當(dāng)前顯示
118、的數(shù)碼管和緩沖區(qū)的偏移量 </p><p> //dis_digit --- 位選通值, 傳送到P2口用于選通當(dāng)前數(shù)碼管的數(shù)值, </p><p> //如等于0xfe時(shí), 選通 P2.0口數(shù)碼管 dis_buf --- 顯于緩沖區(qū)基地址 </p><p><b> {</b></p><p> TH0 = 0
119、x8C;</p><p> TL0 = 0x8B;</p><p> P2 = 0xff; // 先關(guān)閉所有數(shù)碼管 </p><p> P0 = dis_buf[dis_index]; // 顯示代碼傳送到P0口 </p><p> P2 = dis_digit; </p><p> dis_digit =
120、_crol_(dis_digit,2); // 位選通值左移, 下次中斷時(shí)選通下一位數(shù)碼管 </p><p> delay(500); </p><p> dis_index++; </p><p> dis_index &= 0x07; // 8個(gè)數(shù)碼管全部掃描完一遍之后,再回到第一個(gè)開始下一次掃描</p><p><b
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ī)用輸液泵設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于單片機(jī)的智能輸液系統(tǒng)設(shè)計(jì)
- 基于51單片機(jī)的醫(yī)院輸液系統(tǒng)畢業(yè)設(shè)計(jì)
- 醫(yī)用輸液泵的安全風(fēng)險(xiǎn)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的智能窗簾設(shè)計(jì)
- 基于單片機(jī)的智能小車設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的智能時(shí)鐘畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的智能小車畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)的智能小車的設(shè)計(jì)
- 基于單片機(jī)的智能遙控窗簾設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 基于單片機(jī)的wifi智能小車設(shè)計(jì) 畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的智能尋跡小車設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)的智能臺(tái)燈系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的wifi智能小車設(shè)計(jì) 畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的電動(dòng)智能小車設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于arduino單片機(jī)的智能小車設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)基于arduino單片機(jī)的智能小車設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的智能臺(tái)燈系統(tǒng)
- 基于單片機(jī)的智能尋跡小車畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的智能加濕器畢業(yè)設(shè)計(jì)論文
評(píng)論
0/150
提交評(píng)論