稱重配料系統(tǒng)PC機(jī)外置測量控制模塊設(shè)計(jì)_第1頁
稱重配料系統(tǒng)PC機(jī)外置測量控制模塊設(shè)計(jì)_第2頁
稱重配料系統(tǒng)PC機(jī)外置測量控制模塊設(shè)計(jì)_第3頁
稱重配料系統(tǒng)PC機(jī)外置測量控制模塊設(shè)計(jì)_第4頁
稱重配料系統(tǒng)PC機(jī)外置測量控制模塊設(shè)計(jì)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、稱重配料系統(tǒng)pc機(jī)外置測量控制模塊設(shè)計(jì)引言稱重配料系統(tǒng)是一種用于石汕、冶金、化工、食品、建材、糧汕、飼料、鴉料、 農(nóng)業(yè)等產(chǎn)品生產(chǎn)過程中的配料系統(tǒng),主要以重量的方式進(jìn)行按照配比進(jìn)行配料。電子技術(shù)和微型計(jì)算機(jī)的迅速發(fā)展,促進(jìn)了微型計(jì)算機(jī)測量和控制技術(shù)的迅速發(fā)展和廣 泛應(yīng)用,從國防技術(shù)、航空航天等到口常生活中的電梯、微波爐等都采用到了微機(jī)測控技術(shù)。 工業(yè)牛產(chǎn)屮的稱重配料系統(tǒng)就是微機(jī)測控技術(shù)的應(yīng)用。七十年代初期,微處理機(jī)的出現(xiàn)使電 了稱重技術(shù)得到了進(jìn)一步的發(fā)展。快速、淮確、操作方便、消除人為謀差、功能多樣化等方 面己成為現(xiàn)代稱重技術(shù)的主要特點(diǎn)。稱重配料裝置不僅是提供重量數(shù)據(jù)的單體儀表,而fl作 為工業(yè)

2、控制系統(tǒng)和商業(yè)管理系統(tǒng)的一個(gè)組成部分,推進(jìn)了工業(yè)生產(chǎn)的口動(dòng)化和管理的現(xiàn)代化, 它起到了縮短作業(yè)時(shí)間、改善操作條件、降低能源和材料的消耗、提高產(chǎn)品質(zhì)最以及加強(qiáng)企 業(yè)管理、改善經(jīng)營等多方面的作用。稱重配料裝置應(yīng)川c遍及到國民經(jīng)濟(jì)各領(lǐng)域,取得了顯 著的經(jīng)濟(jì)效益。但是,我國在這方面的產(chǎn)品少fi.功能不齊全,所以改善現(xiàn)有稱重配料裝置、 開發(fā)研究功能齊全的自動(dòng)稱重系統(tǒng)是勢在必行的。第一章、方案論證與比較1.1壓力傳感器的選擇(1)金屬應(yīng)變式壓力傳感器:是一種歷史較長的壓力傳感器,但由于它存在遲滯、蠕變及 溫度性能差等缺點(diǎn),其應(yīng)用場合受到了很大的限制。(2)壓阻式傳感器:是利用半導(dǎo)體壓阻效應(yīng)制造的一種新型的

3、傳感器,它具有制造方便, 成本低廉等特點(diǎn),但山于半導(dǎo)體材料對(duì)溫度極為敏感,所以其性能受溫度影響較大,產(chǎn)品的 一致性較差。(3)電容式傳感器:是應(yīng)用最廣泛的一種壓力傳感器,其原理十分簡單。一個(gè)無限人平行 平板電容器的電容值可表示為:c= £ s/d(£為平行平板間介質(zhì)的介電常數(shù),d為極板的間距,s為極板的覆蓋面積) 改變具屮某個(gè)參數(shù),即可改變電容量。rti于結(jié)構(gòu)簡單,兒乎所有電容式壓力傳感器均采川改 變間隙的方法來獲得可變電容。電容式傳感器的初始電容值較小,一般為幾十皮法,它極易 受到導(dǎo)線電容和電路的分布電容的影響,因而必須采用先進(jìn)的電了線路才能檢測出電容的微 小變化。(4)

4、電阻應(yīng)變式傳感器:傳感器中的電阻應(yīng)變片具冇金屬的應(yīng)變效應(yīng),即在外力作用下產(chǎn) 牛機(jī)械形變,從而使電阻值隨之發(fā)牛相應(yīng)的變化。電阻應(yīng)變片主要有金屬和半導(dǎo)體兩類,金 屬應(yīng)變片有金屬絲式、箔式、薄膜式z分。半導(dǎo)體應(yīng)變片具有靈敏度高(通常是絲式、箔式 的兒十倍)、橫向效應(yīng)小等優(yōu)點(diǎn)。(5)壓阻式傳感器:是根據(jù)半導(dǎo)體材料的壓阻效應(yīng)在半導(dǎo)體材料的基片上經(jīng)擴(kuò)散電阻而制 成的器件。其基片可肓接作為測量傳感元件,擴(kuò)散電阻在基片內(nèi)接成電橋形式。當(dāng)基片受到 外力作用而產(chǎn)生形變時(shí),各電阻值將發(fā)生變化,電橋就會(huì)產(chǎn)生相應(yīng)的不平衡輸出。川作壓 阻式傳感器的基片(或稱膜片)材料主耍為硅片和錯(cuò)片,硅片為敏感材料陽制成的硅壓阻 傳感器

5、越來越受到人們的重視,尤其是以測量壓力和速度的固態(tài)壓阻式傳感辭應(yīng)用最為普遍。 選擇:綜合比較各傳感器的優(yōu)缺點(diǎn)后,我在此設(shè)計(jì)中釆用壓阻式傳感器。12輸入鍵盤的選擇單片機(jī)在開發(fā)過程中,常常會(huì)因?yàn)橘Y源不足而不得不大量擴(kuò)展接口芯片以滿足應(yīng)用系統(tǒng)的需 要,其屮原因之一是人機(jī)界面中的鍵盤顯示占用了系統(tǒng)太多資源,從而造成系統(tǒng)龐大,同時(shí) 降低了系統(tǒng)的可靠性。在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤顯示通??刹捎靡韵聝悍N方式:(1)采用并行接口的鍵盤顯示專用芯片8279。但8279所需外圍元件多(顯示驅(qū)動(dòng)、譯碼 等)、占用電路板面積人、綜合成木高,在屮小系統(tǒng)屮常常人材小用;(2)采用通用并行i/o芯片擴(kuò)展(如用8155等),但

6、此方案同樣需要驅(qū)動(dòng)顯示,同時(shí)鍵盤 顯示掃描還需占用cpu大量吋間;(3)采用專用顯示控制器,并用cpu的i/o引腳完成鍵盤輸入(如mc14499、ps7219、max7219、 tcm7218. tlc5912等,大多是串行接口并有顯示驅(qū)動(dòng)能力,i/o 用少)。這種接口方式省 去了顯示的掃描,而且電路人多也很簡單,通常在系統(tǒng)需要的按鍵較少時(shí)比較適用;(4)采用帶12c總線的鍵盤顯示芯片(如顯示用saa1064,鍵盤用pcf8574),不過這種方 式對(duì)于無i2c總線接口的cpu來說,編程顯得有些不便;(5)采用串行接口的鍵盤顯示專用芯片,如bc7280 / 81、hd7279、ch451等。這類

7、芯片占 用cpu的資源少,傳輸速度較快,外圍器件要求也較少,在中小系統(tǒng)中都口j得到廣泛的應(yīng)用。 選擇:我選擇鍵盤顯示驅(qū)動(dòng)芯片ch4511. 3顯示選擇選用接口芯片。由于其具有壽命長、動(dòng)態(tài)范圍廣、工作穩(wěn)定可靠、低功耗和快速的時(shí)間 響應(yīng)等優(yōu)點(diǎn),成為眾多顯示媒體中的佼佼者,是戶外作業(yè)顯示理想的選擇。用ch451芯片驅(qū) 動(dòng)led點(diǎn)陣有以下特點(diǎn):速度快,功耗小,動(dòng)態(tài)顯示掃描控制,胃接驅(qū)動(dòng)64位led點(diǎn)陣, 可以軟件控制led的亮度,以減小功耗。ch451可以通過1線或者可以級(jí)聯(lián)的4線串行接口 與單片機(jī)等控制器交換數(shù)據(jù)。ch451的串行接口是由硬件實(shí)現(xiàn)的,控制器可以頻繁地通過串 行接口進(jìn)行高速操作,而絕對(duì)

8、不會(huì)降低ch451的工作效率。用它設(shè)計(jì)的電路,不僅軟硬件設(shè) 計(jì)簡單,而且功耗低,響應(yīng)速度快,驅(qū)動(dòng)能力強(qiáng),占川的1/0 口線較少,是一種性價(jià)比高、 應(yīng)用靈活的設(shè)計(jì)方案。14壓力超限報(bào)警器件選擇很簡單,三極管8550待嗡鳴器,當(dāng)然節(jié)省成本考慮用壓電片也好,都一樣。但是如果考慮充分,用戶一定不希望在停電重啟后每次都耍輸入報(bào)警值,所以有必要加 一個(gè)eepr0m進(jìn)行數(shù)據(jù)儲(chǔ)存。1.5 ad的選擇(1)積分型(如tlc7135)積分型ad工作原理是將輸入電壓轉(zhuǎn)換成時(shí)間(脈沖寬度信號(hào))或頻率(脈沖頻率),然后 山定時(shí)器/計(jì)數(shù)器獲得數(shù)字值。其優(yōu)點(diǎn)是用簡單電路就能獲得高分辨率,但缺點(diǎn)是山于轉(zhuǎn)換 精度依賴于積分時(shí)間

9、,因此轉(zhuǎn)換速率極低。初期的單片ad轉(zhuǎn)換器大多采用積分型,現(xiàn)在逐次 比較型已逐步成為主流。(2)逐次比較型(如tlc0831)逐次比較型八d市一個(gè)比較器和da轉(zhuǎn)換器通過逐次比較邏輯構(gòu)成,從msb開始,順序地對(duì) 每一位將輸入電壓與內(nèi)置da轉(zhuǎn)換器輸岀進(jìn)行比較,經(jīng)n次比較而輸出數(shù)字值。其電路規(guī)模屬 于中等。其優(yōu)點(diǎn)是速度較高、功耗低,在低分辯率(12位)時(shí)價(jià)格便宜,但高精度012位) 時(shí)價(jià)格很高。(3)并行比較型/串并行比較型(如tlc5510)并行比較型ad采用多個(gè)比較器,僅作一次比較而實(shí)行轉(zhuǎn)換,又稱flash(快速)型。由于 轉(zhuǎn)換速率極高,n位的轉(zhuǎn)換需要2n-l個(gè)比較器,因此電路規(guī)模也極大,價(jià)格也高

10、,只適用丁視 頻ad轉(zhuǎn)換器等速度特別高的領(lǐng)域。串并行比較型ad結(jié)構(gòu)上介于并行型和逐次比較型之間,最典型的是由2個(gè)n/2位的并 行型ad轉(zhuǎn)換器配合da轉(zhuǎn)換器組成,用兩次比較實(shí)行轉(zhuǎn)換,所以稱為half flash (半快速)型。 還冇分成三步或多步實(shí)現(xiàn)ad轉(zhuǎn)換的叫做分級(jí)(血1 tistcp/subrangl ing)型ad,而從轉(zhuǎn)換時(shí) 序角度又可稱為流水線(pipelined)型ad,現(xiàn)代的分級(jí)型ad中還加入了對(duì)多次轉(zhuǎn)換結(jié)果作 數(shù)字運(yùn)算而修正特性等功能。這類ad速度比逐次比較型高,電路規(guī)模比并行型小。(4) s-a (sigma/font>delta)調(diào)制型(如 ad7705)s-a型ad由

11、積分器、比較器、1位da轉(zhuǎn)換器和數(shù)字濾波器等組成。原理上近似于積 分型,將輸入電壓轉(zhuǎn)換成時(shí)間(脈沖寬度)信號(hào),用數(shù)字濾波器處理后得到數(shù)字值。電路的數(shù)字 部分基本上容易單片化,因此容易做到高分辨率。主要用于音頻和測量。(5) 電容陣列逐次比較空電容陣列逐次比較型八d在內(nèi)ifida轉(zhuǎn)換器屮采川電容矩陣方式,也可稱為電荷再分配型。 一般的電阻陣列da轉(zhuǎn)換器中多數(shù)電阻的值必須一致,在單芯片上生成高精度的電阻并不容 易。如果用電容陣列取代電阻陣列,可以用低廉成木制成高精度單片ad轉(zhuǎn)換器。最近的逐次 比較型ad轉(zhuǎn)換器大多為電容陣列式的。(6) 壓頻變換型(如ad650)壓頻變換型(voltage freq

12、uency converter)是通過間接轉(zhuǎn)換方式實(shí)現(xiàn)模數(shù)轉(zhuǎn)換的。 其原理是首先將輸入的模擬信號(hào)轉(zhuǎn)換成頻率,然后用計(jì)數(shù)器將頻率轉(zhuǎn)換成數(shù)字量。從理論上 講這種ad的分辨率兒乎可以無限增加,只要采樣的吋間能夠滿足輸出頻率分辨率要求的累 積脈沖個(gè)數(shù)的寬度。其優(yōu)點(diǎn)是分辯率高、功耗低、價(jià)格低,但是需要外部計(jì)數(shù)電路共同完成 ad轉(zhuǎn)換。選擇:考慮到成本和外圍電路的簡潔,我直接選用stc12c5608ad單片機(jī)自帶的八d。stc12c5608ad系列帶a/d轉(zhuǎn)換的單片機(jī)的a/d轉(zhuǎn)換口在p1 口 (pl. 7-p1. 0),有8路10 位高速a/d轉(zhuǎn)換器,stc12c5608ad系列是10位精度的a/d,速度均

13、可達(dá)到100khz(10萬次/ 秒)。8路電壓輸入型a/d,可做溫度檢測、電壓檢測、按鍵掃描、頻譜檢測等。上電復(fù)位后 p1 口為弱上拉型i/o 口,用戶可以通過軟件設(shè)置將8路中的任何一路設(shè)置為a/d轉(zhuǎn)換, 不需作為a/d使用的口可繼續(xù)作為i/o 口使用。這樣即節(jié)省的1/0端口,減少的外圍設(shè)備, 同時(shí)stc12c5608ad提供eepr0m,可以解決設(shè)置重量儲(chǔ)存的問題。通過,數(shù)字濾波處理,可以很好地修正數(shù)值,外圍加上微功率電壓參考二極管lm285 連到ad的一個(gè)通道做數(shù)值校正,可以很好的解決系統(tǒng)誤差。第二章、總設(shè)計(jì)圖2. 1系統(tǒng)原理框圖第三章、總程序一個(gè)主程序和四個(gè)頭文件(用keil編寫):#i

14、nclude<reg52 h>#include"ch451m2tl.lt/*/ led_printf (uchar *led_data) ;/添加數(shù)據(jù)的字符串地址例如:uchar led8 = 7, 6, 5, 4, 3, 2, 1, 0;led printc (uchar p, uchar led_data) ;/對(duì)單個(gè)數(shù)據(jù)顯示 第一位是位置,第二位是數(shù)值 例如:led printc(2, 3);led_prints(unsigned char *lcd_slring); /直接顯示字符串地址例如:led_prints("123456");ch451

15、 inito ;*/#includc"stc_ad. h#include'18b20. h"/#include"stc eprom, h"#define uint unsigned int#define uchar unsigned char/char menu;uchar display8 = 0, 19, 19, 16, 16, 16, 16, 17;/將顯示內(nèi)送開設(shè)顯示緩存區(qū) ram,菜單一溫度 c int stcad7 = 1000,1000, 1000, 1000, 1000, 1000,200;int steset7=300,1500

16、,1500,1500,1500,1500,1500;int stctemp7;uint ncount=0;bi t ok二0, cancel二0, detect二 1, alarm二 1;/i 為執(zhí)行,0 為不執(zhí)行/void displaychanncitcmp(uchar channel)unsigned long tempad, sum=0;uchar n;for (n二0; n<20; n+)進(jìn)行數(shù)字濾波處理getadcresul t (channel) :/得到通道的八d 值(10 位)stcadchannel = (adc data«21 adc l0w2);if(s

17、tcadchannel<10)tempad=0;elsetempad=(stcadchannel+l)*1999l/1023;sum+=tempad;sum/=20;stcadchcinnel =sum;void scanal1(void) uchar n;for(n=0;n<7;n+)if(n>0mn<7)displciychcinneltemp(nl);if(n=0)stcad6=get tmp();void displayalltemp(void) /顯示當(dāng)前菜單與溫度值 i f (inenu>0&&inenu<7)(displaych

18、anneltcmp(mcnu-1);/當(dāng)前狀態(tài)顯示if (stcadnienu-l/10000) display 3=16; else displayl3j=stcadlmenu-lj/1000; display4=stcadmenu-1%1000/100;/display5=stcadmenu-1%100/10;display6=stcadmenu-l%10; display0=menu;led printf(display);led printpoinlc(6, stcadmenu-1%100/10);if(menu=0)stca嘰6=get_tmp();if(stcad6/1000=0)

19、display3=16;else display3=stcad6/1000;display4=stcad6%1000/100;display6=stcad6%10;display0=menu;led printf (display);led_printpointc(6, stcadl61%100/10);void de lay 10ms (void)/誤差-0. 173611111111usunsigned char a, b;for(b=200;b>0;b)for(a=200;a>0;a);void copy 0uint n;for(n=0;n<7;n+)stctcmpn=

20、stcsetn;void copyback()(uint n;for(n=0;n<7;n+)stcsctn=stctcmpn;void interrupt() tmod二0x00;ti10 二 0x00;ti.o 二 0x00;/ th1二0x00;/tll=0x00;tro=1;/tr1=1;eto二1;/et1=1;ea=1;pto二1;/ pt1=0;void mainouint n;menu-0;cii451_init();initadco;interrupt();wh i1e (1)if (dctcct=l)menu+;if(menu>6)menu二0; for(n=0;

21、n<500;n+) del ay 10ms ();)/中斷初始化/設(shè)置為一方式定時(shí)器中斷/方式最長時(shí)長4. 4ms計(jì)數(shù)器開始計(jì)數(shù)開啟定時(shí)器中斷開啟總中斷/設(shè)置為低優(yōu)先級(jí)void timeroo interrupt 1 using 0定時(shí)掃描鍵盤 顯示ch451_scan();if(key!=8) copyo ;while(ok!=l && cancel!=1)(ch451_scan();switch (key) ctise 3: steset menu 丨 +; i f (steset i menu >1999) steset 丨 menu二0; break;cas

22、e 7:stesetmenu-一; if (stesetmenu0)slcselmer)u = 1999;bre8k;case 2:mcnu+; if (mcnu>6)nicnu-0;while(ch451_scan() !二8) ; break;case 6:menu:if(menu<0)menu=6;while(ch451_scan()!=8); break: case 0:ok=l;while(ch451_scan()!=8);break;case 1:cancel=l; while(ch451 scan()!=8):break;case 4:detect="det

23、ect;while(ch451 scan()!=8):break;case sialarm-alarm; while(ch45i_scan()!=8):break;break;default:delaylomso ;i f (steset menu /10000) d i spltiy 3二16; else display3=stcsctmenu/1000;display4=stcsetmenu%1000/100;display6=stcsetmenu%10:display0二menu;led printf(display);led_printpointc(6, stesetmcnu%100/

24、10); if(ok=l)ok=0;else cancel二0;copyback(); if (ncount>50) /對(duì)于顯示依然太快,進(jìn)行50分頻 ncounl=0;displayalltompo ;scanallo;/更新數(shù)據(jù)if (alarm二=1)i f(stcad6>stcset0|slcado>stcset1| stcadl>stcset2| stcad2>stcset3|stcad3>stcset4|stcad4>stcset5|stcad5>stcset6)min gming;else ming=l;else ming=l;nc

25、ount+;#i fndef _18b20ji廿define _18b20_h_sbit dq二p6;sbit ming二p2 6;#dcfine uint unsigned int#define uchar unsigned charuint temp=320, setemp=300;1 lj j | 1f rt* 打 打 打 打 打 打 打 打 打 打 打 打 <tw jw i i | /ii iw jw /lw /lw /lw /lw /lw /lw /lw /lw tw/void delay(long i)whi 1 e(一i);void tnit dsl8b20(void) /

26、ds18b20 初始化dq二0; 單片機(jī)拉低總線delay (500) ; /精確延時(shí),維持至少480usdq=1; 稗放總線,即拉高了總線delay (200); 此處延時(shí)有足夠,確保能讓ds18b20發(fā)岀存在脈沖。uchar read one byte()/讀取一個(gè)字節(jié)的數(shù)據(jù)/讀數(shù)據(jù)時(shí),數(shù)據(jù)以字節(jié)的繪低有效位先從總線移出uchar i=0;uchar dat=0;for (i=8;i>0;i)dq二 0;_nop_();_nop_();dat»=l;dq-l;delay(2);的15us內(nèi)的最后部分將總線拉低,要在1us之后釋放總線單片機(jī)要在此下降沿后的15us內(nèi)讀數(shù)據(jù)才會(huì)

27、有效。至少維持了 lus,農(nóng)示讀時(shí)序開始讓從總線上讀到的位數(shù)據(jù),依次從高位移動(dòng)到低位。釋放總線,此后ds18b20會(huì)控制總線,把數(shù)據(jù)傳輸?shù)娇偩€上/延時(shí)7us,此處參照推薦的讀時(shí)序圖,盡暈把控制器采樣時(shí)間放到讀時(shí)序后dat =0x80; 持為odelay(26);若總線為1,即dq為1,那就把dat的最高位置1 ;若為0,則不進(jìn)行處理,保/此延時(shí)不能少,確保讀時(shí)序的長度60us很重耍return (dtit);void write_one_byte(uchar dat)uchtir i=0;fot(i二8;i>0;i-一)dq-o;_nop_();_nop _();dq-dat&o

28、xoi;拉低總線至少維持了 lus,表示寫時(shí)序(包括寫0時(shí)序或?qū)?時(shí)序)開始從字節(jié)的最低位開始傳輸指令dat的最低位賦了給總線,必須在拉低總線后的15us內(nèi),/因?yàn)?5us后ds18b20會(huì)對(duì)總線采樣。delay(26);dq-1;/* _nop _() ; */ dat»=l;必須讓寫時(shí)序持續(xù)至少60us -很重要/寫完后,必須釋放總線,/因?yàn)?5us后ds18b20會(huì)對(duì)總線采樣。delay(l);uint gct_tmp()獲取溫度float t;uchar a=0, b=0;init_dsl8b20(); write_0ne_byte(0xcc); write_0ne_byte

29、(0x44); delay(60000);init_dsl8b20(); writeonejyte (oxcc); write one byte(oxbe): a=read one byte();/初始化忽略rom指令/溫度轉(zhuǎn)換指令/初始化/忽略rom指令讀讀ram的存儲(chǔ)器指令/讀取到的第一個(gè)字節(jié)為溫度lsb/讀取到的第二個(gè)字節(jié)為溫度msbb=rcad_one_bytc(); tempb;temp=temp«8;temp=temp a; t=temp*o. 0625; tcmp=t*10+0, 5;return (temp);ttendif#ifndef _ch451_h_defin

30、e _ch451ji_/*/ led printf (uchar *led data) ;/添加數(shù)據(jù)的字符串地址例如:uchar led8 = 7, 6, 5, 4, 3, 2, 1, 0;led_printc (uchar p, uchar led_data) ;/對(duì)單個(gè)數(shù)據(jù)顯示 第一位是位置,第二位是數(shù)值 例如:led_printc (2, 3);led prints (unsigned char *led string): /直接顯示字符串地址例如:ijw prints("123456");ch451_init();*/y rjw rjw rp rjw rp rjw

31、rp rjw rp rjw rp rjw rp rjw rp rjw rp rjw rp rjw rp rprprprprprprp/#includc<rcg52. h>#define uint unsigned int#define uchar unsigned chardefine ch451dtgo0x0800廿define ch451dig10x0900define ch451_d1g2oxoaoodefine ch451._dig3oxoboo#define ch451dtg4oxocoodefine ch451dtg5oxodoo廿define ch451dig6oxo

32、coodefine ch451d1g7oxofoo対ch451輸出管腳進(jìn)行定義sbit dout二p2"2; /串行接口數(shù)據(jù)輸出 sbit l0ad=p2"3; 串行數(shù)據(jù)加載 sbit din =p3"3; /串行數(shù)據(jù)輸入 sbit dclk二p3w 串行數(shù)據(jù)時(shí)鐘線uchar key=l,keyold=2;/* 針對(duì) m2t 1 板 bcd 轉(zhuǎn)換 *文件名:unsigned char bcd功能:由于seg0“7與dp不對(duì)應(yīng),編驅(qū)動(dòng)轉(zhuǎn)換入口參數(shù):無出口參數(shù):無7“!"7“!" 7“!"!"!"!" 7“!

33、" 7“ kjx 7“ kjx 7“"7、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、unsigned char code bcd = 0xbe, 0x24, oxea, 0xe6,/0t 1, 2, 3,0x74, 0xd6, oxdc, 0xa4,oxfe, 0xf6, oxfc, 0x5e,0x4a, 0x6e, oxda, oxd&/£ 5, 6, 7,/& 9, a, b,/c, d, e, f,0x00, oxda, 0x24, 0x40) :/ox 10 無顯示(16),0x11 度(17), 0x12 雙

34、點(diǎn)(18), 0x13-號(hào)(19)unsigned char code bcdpoint = oxbf, 0x25, oxeb, 0xe7,/0, 1,2, 3,0x75,0xd7, oxdf, 0xa5,/4, 5, 6, 7,oxff, oxf7;/* 向 ch451 發(fā)送指令*名稱:void ch451_write (uint dat, uint length)功能:向ch451發(fā)送指令入口參數(shù):uint dat需要發(fā)送的指令uint length發(fā)送指令(dat)的長度出口參數(shù):無丄.丄.丄.丄.丄.丄.丄.丄.丄.丄.丄.丄.丄.上 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜

35、 匕!fvoid ch451 write(unsigned dat)uint i;load": for(i=12;i>0;i)dclk=o;if(dat&0x01)=0x01)din二1; else d1n=o; dclk=1; dat=dat»l;load二0:load=1;/uint length串行數(shù)據(jù)加載端置1笊行數(shù)據(jù)時(shí)鐘線置0判斷data最低位是否為1/ data®低位為1的話就向din(串行數(shù)據(jù)輸入)寫1 / data最低位為0的話就向din(串行數(shù)據(jù)輸入)寫0 串行數(shù)據(jù)時(shí)鐘線置1/data向右移動(dòng)一位串行數(shù)據(jù)加載端置1/給load 一個(gè)

36、上升沿使data數(shù)據(jù)全部導(dǎo)入cii451名稱:void led display (led datal, led data2, led data3, led data4,led data5, led datag, led data7, led data8)功能:數(shù)碼顯示橫向位置轉(zhuǎn)換入口參數(shù):led_datal, led_data2, led_data3, led_data4, led_data5,led data6, led_data7, led data8 需要顯示的代碼出口參數(shù):無vtxvlx vx vlx vx vlx vx vlx vx vlx vx vlx vx vlx vx vlx

37、vx vlx vx vlx vx vlx vx vlx vx vlx vx vlx vxi"7、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、%、叫、void led printf(uchar *led data)cii451jvrite (cii451_dig21 bcdcii451jvrite(cii451_dlgl|bcdch451 write(ch451 dig3|bcdch451 write(ch451 d1go|bcdch451_write(ch451_dig4|bc dcii451jvrite (cii451_dig51 bcd

38、cii451 write (cii451 1)1g6|bcdch451 write(ch451 dig7|bcd led_data7led data6led data5led data4led_data3led_data2led_datalled dataloj);/第8位顯示,led_data8位要顯示的內(nèi)容);/第7位顯示);/第6位顯示);/第5位顯示);/第4位顯示);/第3位顯示);/第2位顯示);/第1位顯示void led_printc(uchar p,uchar led_data) switch(p) 8:ch451 write(ch451 dtg2|bcdcaseled da

39、taj);break;/第8位顯示,led data8位要顯示的內(nèi)casecasecasecasectisecasecase7:ch451_write(ch451_dig1|bcd 6:ch451 write(ch451 dtg3 bcd 5:ch451 write(ch451 dtgo bcd 4:ch451 write(ch451 dig4|bc d 3: ch451_wr i te (ci1451_dig51 bcd 2: ch45 l_wr i te (ci 1451_dig61 bcd 1:ch451 write(ch451 dtg7|bcd )led_dataled dataled

40、 dataled dataled_dataleddataled data);break;/第7位顯示);break;/第6位顯示);break;第5位顯示 );break;第4位顯示 );break;/第3位顯示 );break;/第2位顯示 );break;/第1位顯示void led_printpointc (ucheir p, uchar led_dtita)switch(p) 8:ch451 write (ch451 dtg21bcdpoint case的內(nèi)容leddata);break;/第8位顯示丄ed data8位要顯示casectisecasecasecasecasecase7

41、: ch45lwrite (ch451_dig11 bcdpoint 6:ch451_write (c11451_d1g31 bcdpoint 5:ch451_write (c11451_d1go | bcdpoint 4:ch451 write(ch451 dtg4|bcdpoint 3: ci1451_write (ci1451_dig51 bcdpoint 2:ch451jvrite(ch451_d1g6|bcdpoint 1:ch451 write(ch451 dtg7|bcdpointleddataled dataled_dataled dataled dataled dataled

42、 data):break;第7位顯示);break;/第6位顯示);break;/第5位顯示);break;/第4位顯示);break;第3位顯示);break;/第2位顯示);break;/第1位顯示void led_prints(unsigned char *led_string)unsigned char i=0;wh訂e(led_stringi!=0x00)if(led_stringi>- o'&&lcd_stringi<=,9*) led_printc(i+1, led_stringi-0x30);else if(led stringi>=,

43、a1 &&led_stringi<=, z )led_printc(i + i, lcd_stringi-> a +10);i+;)串行數(shù)據(jù)加載端置1串行數(shù)據(jù)時(shí)鐘線置0判斷data最低位是否為1/ data最低位為1的話就向din(串行數(shù)據(jù)輸入)寫1 / data最低位為0的話就向din(串行數(shù)據(jù)輸入)寫0 串行數(shù)據(jù)時(shí)鐘線置/data向右移動(dòng)一位串行數(shù)據(jù)加載端克1/給load 一個(gè)上升沿使data數(shù)據(jù)全部導(dǎo)入ch451文件名:void keystart ()功能:傳送0111到din入口參數(shù):無出口參數(shù):無*p *p *p *p *p *p *p *p *p *p

44、*p *p *p *p/void keystart() uint i, dat=0x07;load-1;for (i=4;i >0;i)dclk=o;if(ckit&0x01)=0x01)din=1;else din=0;dci.k=1; dat=dat»l;load二0;load=1;文件名:ch451 readchange () 功能:轉(zhuǎn)換輸入7位到數(shù)字入口參數(shù):無出口參數(shù):無ch451_rcadchangc(uint dal) uint a;switch(dat)case 0x40: a=0;break ;/0鍵按卜-按鍵case 0x43: a=l;break;

45、/i鍵按卜按鍵case 0x41: a二2;break ;/2鍵按下按鍵case 0x42: a=3;break ;/3鍵按下按鍵case 0x48: a二4;break ;/4鍵按下按鍵case 0x4b: a=5;break ;/5鍵按下按鍵case 0x49: a6;break ;/6鍵按卜按鍵case 0x4a: a二7;break;/7鍵按卜按鍵case 0x00: a二10;break; /0鍵釋放按鍵case 0x03: a=l1;break ;/1鍵釋放按鍵case 0x01: a=12;break; /2鍵釋放按鍵case 0x02: a=13;break ;/3鍵釋放按鍵c

46、ase 0x08: a=14;break ;/4鍵釋放按鍵case 0x0b: a=15;break; /5鍵釋放按鍵case 0x09: a=16;break; /6鍵釋放按鍵case 0x0a: a=17;break ;/7鍵釋放按鍵defau it:ci=8; break;return a;/ * 鍵盤傳出 ch451 read () * 文件名:ch451_read ()功能:傳送輸入7位入口參數(shù):按鍵岀口參數(shù):鍵值0007 10、17* /c11451_scan() uint i,dat=o;keystart ();for (i=7;i>0;i) dclk二1;if(doct=

47、l) dat=dat|0x01;dclk-0; dat=dat«l;dat=dat»l;dout二1;dat=ch451_readchange(dat);key=dat;if (key!=8)kcyold=kcy;return dtit; /* *cii451 初始化* * * * 名稱:void cii451_init()功能:ch451初始化,設(shè)置ch451選擇4線串行接口入口參數(shù):無出口參數(shù):無打 打 打 打 打 打 打 打 打 打 打 打 打 /jw/jw tw/void ch451.init()dimo; /給din個(gè)高電平 設(shè)置ch451選擇4線串行接口dim二

48、1;dclk=1;/置為默認(rèn)的高電平load=1;dout二1;/置為輸入ch451jvrito (0x403);ch451 write(0x500);設(shè)定系統(tǒng)參數(shù),數(shù)碼顯示使能/最末位為亮度調(diào)節(jié)#endifinclude <intrins.h>word;byte;typcdeftypedefunsigned intunsigned chair/*declare sfr associatedwith the adc */sf radc contr=0xc5;/adc control registersfradc_data=0xc6;/adc high 8-bit result re

49、gistersfradc_low2=oxbe;/adc low 2-bit result registersfrpl m0=0x91;/p mode control regi stcrosf rp1m1=0x92;/pmode conirol register“defineadc operation const for adc_contr*/defineadc.power0x80/adc power control bit#defineadc flag0x10/adc complete flag#defineadc start0x08defineadc_speedll0x00defineadc

50、_speedl0x20#defineadc speedh0x40#defineadc speed川 10x60/adc start control bit/080 clocks/80 clocks/540 clocks/270 clocksvoid initadco ;byte getadcresult(byte ch);void addclay(word n);/*get adc resultbyte gctadcrcsult(byte ch)adccontr = adc一power | adc.speedll | chadc .start;_nop_()_nop_()_nop_()_nop_()/must wait before inquirywhile( ! (adc.contr & adc flag);adc contr &二 adc flag:/wait complete flag/close adcreturn adc_data;9/不initial adc sfr*/void tnit

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論