課程設(shè)計(jì)報(bào)告使用51單片機(jī)設(shè)計(jì)軟件鐘、渦流稱重計(jì)、光電轉(zhuǎn)速計(jì)_第1頁
課程設(shè)計(jì)報(bào)告使用51單片機(jī)設(shè)計(jì)軟件鐘、渦流稱重計(jì)、光電轉(zhuǎn)速計(jì)_第2頁
課程設(shè)計(jì)報(bào)告使用51單片機(jī)設(shè)計(jì)軟件鐘、渦流稱重計(jì)、光電轉(zhuǎn)速計(jì)_第3頁
課程設(shè)計(jì)報(bào)告使用51單片機(jī)設(shè)計(jì)軟件鐘、渦流稱重計(jì)、光電轉(zhuǎn)速計(jì)_第4頁
課程設(shè)計(jì)報(bào)告使用51單片機(jī)設(shè)計(jì)軟件鐘、渦流稱重計(jì)、光電轉(zhuǎn)速計(jì)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)報(bào)告課題一 使用51單片機(jī)設(shè)計(jì)軟件鐘一、 實(shí)驗(yàn)?zāi)康模?. 掌握元器件及芯片的焊接與調(diào)試;2. 了解基于51單片機(jī)的軟件鐘的工作原理;3. 會(huì)用c語言編寫時(shí)鐘函數(shù),復(fù)習(xí)用switch語句和do-while語句、for語句實(shí)現(xiàn)循環(huán)的方法;4. 會(huì)使用medwin編譯調(diào)試程序,并生成hex,通過數(shù)據(jù)線下載到電路板上;5. 根據(jù)自己焊接的板子在程序中設(shè)置按鍵控制時(shí)鐘的調(diào)整。二、 算法原理:所謂軟件鐘就是利用51單片機(jī)制作一個(gè)電子時(shí)鐘。其算法就是以單片機(jī)的時(shí)鐘為基準(zhǔn),記錄單片機(jī)時(shí)鐘脈沖的數(shù)量,當(dāng)數(shù)量足夠多(如脈沖為每秒6mhz,那么記錄6m個(gè)脈沖所需時(shí)間即為1秒)就可以將顯示部分的“秒”位加一。

2、加到60以后進(jìn)位為“分”,”秒“位清零以后繼續(xù)記錄。當(dāng)“分”累加為60以后進(jìn)位為”時(shí)“,”分“位清零以后繼續(xù)記錄,當(dāng)”時(shí)“位為24以后,”時(shí)“位清零并繼續(xù)記錄。三、 硬件原理: 顯示電路:?jiǎn)纹瑱C(jī)外圍電路(復(fù)位電路,時(shí)鐘電路): 按鍵控制電路: 數(shù)碼管驅(qū)動(dòng)電路:四、 實(shí)現(xiàn)功能要求:使用中需要對(duì)時(shí)鐘進(jìn)行調(diào)整。在調(diào)整的時(shí)候需要一個(gè)按鍵來進(jìn)入調(diào)整狀態(tài)。進(jìn)入調(diào)整狀態(tài)以后需要一個(gè)按鍵來向左移動(dòng)調(diào)整位置,一個(gè)按鍵來向右移動(dòng)調(diào)整位置,一個(gè)按鍵來增加所選位置的數(shù)值,一個(gè)按鍵來減小所選位置的數(shù)值。調(diào)整完成以后還需要一個(gè)按鍵來 退出調(diào)整位置,恢復(fù)時(shí)鐘的計(jì)數(shù)運(yùn)轉(zhuǎn)。以上所需按鍵可以根據(jù)需要合并。在調(diào)整中另外一個(gè)需要注意

3、的問題是如何顯示目前所選定調(diào)整的位置(如秒的個(gè)位或者十位,分的個(gè)位或者十位等)??梢圆捎檬欠耧@示數(shù)位右下的小數(shù)點(diǎn)或者所選需調(diào)整位是否閃爍來讓操作者明確目前自己所選定的需要調(diào)整的數(shù)位。五、 設(shè)計(jì)內(nèi)容:(1)硬件焊接:按照電路圖焊接好各個(gè)元器件和芯片插座,注意焊接時(shí)焊點(diǎn)要盡量光滑,與管腳接觸良好,元件的管腳彎曲處要盡量光滑,有需要區(qū)分正負(fù)極的元器件焊接時(shí)要注意不要焊反。焊接完后將元件多余的管腳用尖嘴鉗剪掉,以免形成短路。(2)軟件設(shè)計(jì):1子程序設(shè)計(jì):a. 單片機(jī)初始化程序a) 定時(shí)器t0中斷服務(wù)程序b. 顯示子程序c. 時(shí)鐘運(yùn)行計(jì)數(shù)子程序d. 時(shí)間數(shù)據(jù)送顯示緩沖區(qū)子程序e. 設(shè)置時(shí)間子程序f. 時(shí)

4、鐘調(diào)整子程序g. 鍵值讀入子程序h. 延時(shí)子程序2.實(shí)驗(yàn)程序清單:#pragma db oe#include #include #include #include #include #include #define uint unsigned int#define uchar unsigned char#define ulong unsigned longvoid display(void);void initsiu(void);void delay(void);void sztz(void);void jssz(void);void setsz(void);void tzszw(uchar

5、zj);uchar inkey(void);uchar sec,min,hour;uchar disdat6;uchar code tab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f;uint count;uchar set_state,xsd;sbit zsd=p10;main()uchar i; for (i=0;i2;i+) disdati= 0; /將顯示緩存清零 initsiu(); /初始化單片機(jī) set_state=0; do i=inkey(); /設(shè)置時(shí)鐘 if(i=0x70) setsz(); jssz(); displa

6、y(); /顯示 if(sec & 0x01) /指示燈閃爍 zsd=1; else zsd=0; while(1);void display(void)/六位數(shù)碼管顯示程序,disdat是要顯示的內(nèi)容(是09的數(shù)字),xsd是在那一位顯示小數(shù)點(diǎn) uchar i,disa,disb,disc; disb = 0x00; /顯示第n位 for (i=0;i6;i+) /共顯示6個(gè)數(shù)據(jù) disa = disdati; /顯示數(shù)據(jù) if (disa 2) disdat0=0; else if (disdat0=0) disdat0=2; else disdat0-; hour=disdat0*10+

7、disdat1; break; case 1: /時(shí)低位調(diào)整 if (zj=0) disdat1+; if (disdat19) disdat1=0; else if (disdat0!=2&disdat1=0) disdat1=9; /else /disdat1-; else if(disdat0=2&disdat1=0) disdat1=3;else disdat1-; if(disdat0=2&disdat13) disdat1=0; hour=disdat0*10+disdat1; break; case 2: /分高位調(diào)整 if (zj=0) disdat2+; if (disdat

8、25) disdat2=0; else if (disdat2=0) disdat2=5; else disdat2-; min=disdat2*10+disdat3; break; case 3: /分低位調(diào)整 if (zj=0) disdat3+; if (disdat39) disdat3=0; else if (disdat3=0) disdat3=9; else disdat3-; min=disdat2*10+disdat3; break; case 4: /秒高位調(diào)整 if (zj=0) disdat4+; if (disdat45) disdat4=0; else if (di

9、sdat4=0) disdat4=5; else disdat4-; sec=disdat4*10+disdat5; break;case 5: /秒低位調(diào)整 if (zj=0) disdat5+; if (disdat59) disdat5=0; else if (disdat5=0) disdat5=9; else disdat5-; sec=disdat4*10+disdat5; break; default: break; void delay(void) /延時(shí)程序 uchar i; for (i=0;itr11開始計(jì)數(shù),c/t=0-對(duì)內(nèi)部計(jì)數(shù),模式1-16位計(jì)數(shù) th0=0x3c;

10、 tl0=0xaf; et0=1; /打開定時(shí)器0中斷 et1=0; /關(guān)閉定時(shí)器1中斷 tr0=1; /打開計(jì)數(shù)器0 tr1=0; /關(guān)閉計(jì)數(shù)器1 ea=1; /總中斷允許void inttime0(void) interrupt 1 using 1 th0=0x3c; /50ms中斷一次,20次為一秒,調(diào)整時(shí)間一次 tl0=0xaf; count+; if (count=20) count=0; sztz(); uchar inkey(void) uchar jjj,keydat; p2 = 0xff; /p2準(zhǔn)備讀入 keydat = p2; /讀入鍵值 keydat = keydat

11、& 0xf0; /找出四個(gè)鍵的值 if (keydat != 0xf0) /有鍵輸入 _nop_(); _nop_(); jjj = p2; /再讀,去抖動(dòng) jjj = jjj & 0xf0; if (jjj != keydat) keydat = 0xf0; do jjj = p2; jjj = jjj & 0xf0; /等待鍵松手 while (jjj != 0xf0); return (keydat); 六、 測(cè)試結(jié)果分析:經(jīng)過medwin對(duì)程序的調(diào)試無誤后,將hex文件下載到電路板上,可正常顯示時(shí)鐘,并且可以通過按鍵對(duì)時(shí)鐘進(jìn)行調(diào)整。針對(duì)我的程序,按鍵實(shí)現(xiàn)功能依次為:一號(hào)鍵:進(jìn)入和退出設(shè)

12、置,當(dāng)時(shí)鐘運(yùn)行時(shí)按下可進(jìn)入設(shè)置;當(dāng)設(shè)置完成后按下可恢復(fù)時(shí)鐘顯示。二號(hào)鍵:右移一位。在設(shè)置狀態(tài)每次按下就右移一位。三號(hào)鍵:加一四號(hào)鍵:減一此外還設(shè)有一個(gè)復(fù)位鍵,按下后時(shí)鐘歸零。七、 遇到的問題與解決方法:?jiǎn)栴}一:如何編寫時(shí)鐘函數(shù)?解決方法:每60秒進(jìn)一位,即一分鐘;每60分鐘進(jìn)一位,即一小時(shí);在函數(shù)體內(nèi)用循環(huán),在主函數(shù)中調(diào)用。編寫時(shí)注意當(dāng)時(shí)高位為2時(shí),時(shí)地位最高到3,且分高位和秒高位最高為5。問題二:如何設(shè)置時(shí)間?解決方法:改變現(xiàn)實(shí)狀態(tài),將現(xiàn)在的結(jié)果放到數(shù)組中去,讀取按鍵,設(shè)置按鍵對(duì)時(shí)鐘進(jìn)行調(diào)整,編寫switch語句控制按鍵的選擇。問題三:如何解決時(shí)間變化太快?解決方法:使用一個(gè)延時(shí)函數(shù)來緩沖每

13、一秒變化時(shí)間。八、 實(shí)驗(yàn)總結(jié):通過本次實(shí)驗(yàn),我對(duì)時(shí)鐘函數(shù)的編寫有了更深一步的掌握,復(fù)習(xí)了c語言的編程。并且可以通過自己焊接的板子來調(diào)試時(shí)鐘程序,對(duì)今后的學(xué)習(xí)與研究有了很大的幫助課題二 使用51單片機(jī)設(shè)計(jì)渦流稱重計(jì)一、實(shí)驗(yàn)?zāi)康?. 了解電渦流傳感器用于稱重的原理與方法;2. 熟悉adc0832的器件手冊(cè);3. 了解基于51單片機(jī)的渦流稱重計(jì)的工作原理;4. 會(huì)用c語言編寫時(shí)鐘函數(shù),復(fù)習(xí)用switch語句和do-while語句、for語句實(shí)現(xiàn)循環(huán)的方法;5. 會(huì)使用medwin編譯調(diào)試程序,并生成hex,通過數(shù)據(jù)線下載到電路板上;二、算法原理本項(xiàng)設(shè)計(jì)中用電位器的中間抽頭所輸出的電壓模擬采集的重量數(shù)

14、據(jù),單片機(jī)經(jīng)adc0832的通道0輸入該電壓信號(hào),并將其轉(zhuǎn)換為數(shù)字信息送6位共陽8段led顯示。adc0832的芯片接口說明: cs_ 片選使能,低電平芯片使能。 ch0 模擬輸入通道0,或作為in+/-使用。 ch1 模擬輸入通道1,或作為in+/-使用。 gnd 芯片參考0 電位(地)。 di 數(shù)據(jù)信號(hào)輸入,選擇通道控制。 do 數(shù)據(jù)信號(hào)輸出,轉(zhuǎn)換數(shù)據(jù)輸出。 clk 芯片時(shí)鐘輸入。 vcc/ref 電源輸入及參考電壓輸入(復(fù)用)當(dāng)此2 位數(shù)據(jù)為“1”、“0”時(shí),只對(duì)ch0 進(jìn)行單通道轉(zhuǎn)換。當(dāng)2位數(shù)據(jù)為“1”、“1”時(shí),只對(duì)ch1進(jìn)行單通道轉(zhuǎn)換。當(dāng)2 位數(shù)據(jù)為“0”、“0”時(shí),將ch0作為正

15、輸入端in+,ch1作為負(fù)輸入端in-進(jìn)行輸入。當(dāng)2 位數(shù)據(jù)為“0”、“1”時(shí),將ch0作為負(fù)輸入端in-,ch1 作為正輸入端in+進(jìn)行輸入。到第3 個(gè)脈沖的下沉之后di端的輸入電平就失去輸入作用,此后do/di端則開始利用數(shù)據(jù)輸出do進(jìn)行轉(zhuǎn)換數(shù)據(jù)的讀取。從第4個(gè)脈沖下沉開始由do端輸出轉(zhuǎn)換數(shù)據(jù)最高位data7,隨后每一個(gè)脈沖下沉do端輸出下一位數(shù)據(jù)。直到第11個(gè)脈沖時(shí)發(fā)出最低位數(shù)據(jù)data0,一個(gè)字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開始輸出下一個(gè)相反字節(jié)的數(shù)據(jù),即從第11個(gè)字節(jié)的下沉輸出datd0。隨后輸出8位數(shù)據(jù),到第19 個(gè)脈沖時(shí)數(shù)據(jù)輸出完成,也標(biāo)志著一次a/d轉(zhuǎn)換的結(jié)束。最后將cs置高電

16、平禁用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行處理就可以了。三、實(shí)現(xiàn)功能要求:使用時(shí)用5v的電壓來表示200g的重量,使用通道o來輸入模擬量。四、設(shè)計(jì)內(nèi)容:(1)硬件焊接:根據(jù)adc0832的接口說明焊接導(dǎo)線(2)軟件設(shè)計(jì):1子程序設(shè)計(jì):a. 單片機(jī)的初始化程序b. 顯示子程序c. 3.0832的轉(zhuǎn)換子程序d. 采樣數(shù)據(jù)換算壓力子程序e. 將壓力值轉(zhuǎn)換為十進(jìn)制數(shù),并將每位送入顯示緩沖區(qū)子程序2.實(shí)驗(yàn)程序清單:#include #include intrins.h#define uint unsigned int#define uchar unsigned char/adc0832的引腳sbit adcs

17、=p35; /adc0832 chip seclectsbit adclk =p34; /adc0832 clock signalsbit addi =p33; /adc0832 k insbit addo =p33; /adc0832 k outuchar dispbuf6;uchar code tab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f;uchar code tab1=0x79,0x3f,0x77;uint temp;uchar getdata; /獲取adc轉(zhuǎn)換回來的值uchar e=0;void delay(void)/延時(shí)程

18、序uchar i;for (i=0;i201;i+)_nop_();void display(void) /六位數(shù)碼管顯示程序,disdat是要顯示的內(nèi)容(是09的數(shù)字),xsd是在那一位顯示小數(shù)點(diǎn)uchar i,disa,disb,disc;disb = 0x00;/顯示第n位for (i=0;i6;i+)/共顯示3個(gè)數(shù)據(jù)if(e=0)disa = dispbufi;/顯示數(shù)據(jù)elsedisa = i - 3;if (disa 1)&0x1; _nop_(); _nop_(); adclk=0;/拉低clk端,形成下降沿3 addi=1;/控制命令結(jié)束 _nop_(); _nop_(); d

19、at=0; for(i=0;i8;i+) dat|=addo;/收數(shù)據(jù) adclk=1; _nop_(); _nop_(); adclk=0;/形成一次時(shí)鐘脈沖 _nop_(); _nop_(); dat=1; if(i=7)dat|=addo; for(i=0;i8;i+) j=0; j=j|addo;/收數(shù)據(jù) adclk=1; _nop_(); _nop_(); adclk=0;/形成一次時(shí)鐘脈沖 _nop_(); _nop_(); j=j7; ndat=ndat|j; if(i=1; adcs=1;/拉低cs端 adclk=0;/拉低clk端 addo=1;/拉高數(shù)據(jù)端,回到初始狀態(tài) d

20、at=8; dat|=ndat; return(dat); /return ad kvoid main(void) /double k; unsigned int w; while(1) getdata=adc0832(0); temp=getdata*1.0/255*500; /電壓值轉(zhuǎn)換,5v做為參考電壓,分成256份。 dispbuf2=temp%10; /個(gè)位 dispbuf1=temp/10%10; /十位 dispbuf0=temp/100; /百位 w = temp * 1.0 /2.5;if(w=199)e=0; dispbuf5=w%10; /個(gè)位 dispbuf4=w/10

21、%10; /十位 dispbuf3=w/100; /百位elsee = 1; display(); 五、測(cè)試結(jié)果分析:此電路板實(shí)現(xiàn)的功能是從電位器中分出一部分電壓,并將其進(jìn)行a/d轉(zhuǎn)換,將模擬量轉(zhuǎn)換為數(shù)字量,把電壓顯示高三位數(shù)碼管,并且通過換算得到它對(duì)應(yīng)的克數(shù)值,顯示在低三位數(shù)碼管,經(jīng)過調(diào)試,我測(cè)的最高值為4.98v 199g,繼續(xù)增大后則開始報(bào)錯(cuò),在后三位數(shù)碼管顯示“eor”。六、遇到的問題及解決方法:?jiǎn)栴}一:如何編寫程序選擇o通道?解決方法:根據(jù)adc0832的接口說明可知,當(dāng)2 位數(shù)據(jù)為“1”、“0”時(shí),只對(duì)ch0 進(jìn)行單通道轉(zhuǎn)換,所以可以編寫語句:if(channel=0)channe

22、l=2;問題二:如何用0832采集模擬量?解決方法:分別用兩個(gè)for循環(huán),從高位開始采集一次,再從地位開始采集一次,對(duì)兩次的結(jié)果進(jìn)行校驗(yàn),一致則輸入。問題三:如何設(shè)置電壓值?解決方法:用5v作為參考電壓,分成256份,用從adc0832采集來的數(shù)據(jù)除以255再乘以500。七、實(shí)驗(yàn)總結(jié): 通過本次實(shí)驗(yàn),我對(duì)adc0832的接口和工作原理有了進(jìn)一步的了解,并且會(huì)用c語言編程來實(shí)現(xiàn)adc0832的數(shù)據(jù)采集,為今后的學(xué)習(xí)和研究打下了良好的基礎(chǔ)。課題三 使用51單片機(jī)設(shè)計(jì)光電轉(zhuǎn)速計(jì)一、實(shí)驗(yàn)?zāi)康模?. 了解光電傳感器的工作原理及其使用方法;2. 熟悉掌握at89c51系列單片微型計(jì)算機(jī)的工作原理;3. 了

23、解基于51單片機(jī)的渦流稱重計(jì)的工作原理;4. 會(huì)用c語言編寫時(shí)鐘函數(shù),復(fù)習(xí)用switch語句和do-while語句、for語句實(shí)現(xiàn)循環(huán)的方法;5. 會(huì)使用medwin編譯調(diào)試程序,并生成hex,通過數(shù)據(jù)線下載到電路板上;二、算法原理:數(shù)字頻率計(jì)的基本原理數(shù)字頻率計(jì)是直接用十進(jìn)制數(shù)字來顯示被測(cè)信號(hào)頻率的一種測(cè)量裝置。它不僅可以測(cè)量正弦波,方波,三角波和尖脈沖信號(hào)的頻率,而且還可以測(cè)量他們的周期。數(shù)字頻率計(jì)在測(cè)量其他物理量如轉(zhuǎn)速、振蕩頻率等方面獲得廣泛應(yīng)用。所謂頻率,就是周期性信號(hào)在單位時(shí)間(1s)里變化的次數(shù)。若在一定時(shí)間間隔t內(nèi)測(cè)得的這個(gè)周期性信號(hào)的重復(fù)變化次數(shù)n,則其頻率可表示為f =n/t

24、,一般為簡(jiǎn)單起見我們通常選擇測(cè)量間隔為1秒(即t1),這樣1秒內(nèi)信號(hào)重復(fù)變化的次數(shù)就是信號(hào)的頻率。1秒的計(jì)數(shù)周期要采用單片機(jī)本身的時(shí)鐘脈沖來計(jì)算,在1秒的時(shí)間內(nèi),記錄的外部脈沖的數(shù)量就是外部信號(hào)的頻率。所以一共需要2個(gè)計(jì)數(shù)過程,一個(gè)是記錄單片機(jī)本身時(shí)鐘脈沖的個(gè)數(shù)以準(zhǔn)確劃定1秒的時(shí)間,一個(gè)是記錄外部脈沖的個(gè)數(shù),以準(zhǔn)確記錄外部信號(hào)的頻率。因?yàn)轱@示的數(shù)碼管數(shù)量有限,所以在編寫程序時(shí)要注意采用小數(shù)點(diǎn)所在的位置來表示頻率單位頻率計(jì)同時(shí)應(yīng)具有測(cè)量信號(hào)周期的功能,由f1/t可知,加入一段求倒數(shù)的代碼即可求得周期??梢酝ㄟ^按鍵來切換顯示的內(nèi)容是信號(hào)的頻率還是周期。三、硬件原理:1、光電測(cè)量部分原理:檢測(cè)齒輪上

25、有12個(gè)齒均勻分布在輪盤周圍,并被直接固定在被測(cè)軸上,安裝時(shí)光電耦合器的發(fā)光二極管和光敏三極管正對(duì)齒輪上的齒,當(dāng)被測(cè)軸轉(zhuǎn)動(dòng)時(shí)帶動(dòng)檢測(cè)齒輪轉(zhuǎn)動(dòng),光電耦合器通過對(duì)檢測(cè)齒輪上的齒進(jìn)行耦合從而產(chǎn)生數(shù)字脈沖。脈沖經(jīng)過放大送向單片機(jī)的計(jì)數(shù)端。 2、單片機(jī)部分工作原理: 本次采用的單片機(jī)為at89c51,內(nèi)有兩個(gè)定時(shí)/計(jì)數(shù)器。在程序設(shè)計(jì)時(shí)筆者將t0定時(shí)/計(jì)數(shù)器作為1秒定時(shí)使用,將t1定時(shí)/計(jì)數(shù)器作對(duì)脈沖的計(jì)數(shù)器使用。單片機(jī)計(jì)數(shù)端在接收到脈沖后對(duì)脈沖進(jìn)行計(jì)數(shù),每隔1秒提取th1和tl1中的計(jì)數(shù)數(shù)據(jù),并進(jìn)行相應(yīng)的運(yùn)算,對(duì)16進(jìn)制數(shù)據(jù)進(jìn)行處理,得到10進(jìn)制數(shù)據(jù),送顯示緩存進(jìn)行顯示輸出。四、實(shí)現(xiàn)功能要求:本實(shí)驗(yàn)要求

26、編寫程序?qū)崿F(xiàn)當(dāng)板子上的p3.5引腳接光電轉(zhuǎn)速計(jì)時(shí),在數(shù)碼管上顯示轉(zhuǎn)速,單位為轉(zhuǎn)/分。并且設(shè)置一個(gè)按鍵,當(dāng)按鍵按下時(shí),數(shù)碼管顯示的是旋轉(zhuǎn)周期,并且通過此按鍵可以實(shí)現(xiàn)頻率與周期的交替顯示。五、設(shè)計(jì)內(nèi)容:(1)硬件焊接:在之前焊接好的板子的基礎(chǔ)上,從p3.5端引出一根導(dǎo)線,與光電測(cè)速儀的正極相連,負(fù)極與板子的地端相連。(2)軟件設(shè)計(jì):程序清單:#include #include #include #define uint unsigned int#define uchar unsigned char#define ulong unsigned longuchar disvalue6;uchar lb

27、1,hb1; uint value;uchar code tab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f;uint count;void delay(void)/延時(shí)程序uchar i;for (i=0;i201;i+)_nop_();void display(void) /六位數(shù)碼管顯示程序,disdat是要顯示的內(nèi)容(是09的數(shù)字),xsd是在那一位顯示小數(shù)點(diǎn)uchar i,disa,disb,disc;disb = 0x00;/顯示第n位for (i=0;i6;i+) /共顯示6個(gè)數(shù)據(jù)disa = disvaluei;/顯示數(shù)據(jù)if

28、 (disa tr11開始計(jì)數(shù),c/t=0-對(duì)內(nèi)部計(jì)數(shù),模式1-16位計(jì)數(shù)th0=0x3c;tl0=0xb0;th1=0x00;tl1=0x00;et0=1;/打開定時(shí)器0中斷et1=0;/關(guān)閉計(jì)數(shù)器1中斷tr0=1;/打開定時(shí)器0tr1=1;/關(guān)閉計(jì)數(shù)器1ea=1;/總中斷允許void inttime0(void) interrupt 1 using 1th0=0x3c;/50ms中斷一次,20次為一秒,調(diào)整時(shí)間一次tl0=0xb0;count+;if (count=20)count=0;sztz();tr1 = 0;lb1=tl1;hb1=th1;th1=0x00;tl1=0x00;tr1

29、 = 1;void main(void) uchar i; initsiu();/初始化單片機(jī) while(1) value = (lb1 + hb1 * 256)*5; disvalue5=value%10; /個(gè)位 disvalue4=value/10%10; /十位 disvalue3=value/100%10; /百位 disvalue2=value/1000%10; /千位 disvalue1=value/10000; /萬位 display(); 六、測(cè)試結(jié)果及分析:stc89c52芯片的p3.5引腳實(shí)現(xiàn)的是計(jì)數(shù)功能,將p3.5引腳轉(zhuǎn)速測(cè)量?jī)x的正極接,芯片的地線與轉(zhuǎn)速測(cè)量?jī)x的負(fù)極接

30、,板子通電后,即為顯示的頻率值。由于我編寫的頻率轉(zhuǎn)周期的函數(shù)不能讀入緩沖區(qū),所以我的程序不能實(shí)現(xiàn)由頻率到周期的轉(zhuǎn)換,只能顯示和儀器上一樣的頻率數(shù)值。七、遇到的問題和解決方法:?jiǎn)栴}一:如何編寫程序選擇定時(shí)器和計(jì)數(shù)器的工作方式?解決方法:根據(jù)定時(shí)方式控制寄存器tmod的格式:gatec/tm1m0gatec/tm1m0前四位控制t1,后四位控制t0,所以編寫語句:tmod=0x51; gate0-tr11開始計(jì)數(shù),c/t=0-對(duì)內(nèi)部計(jì)數(shù),方式1-16位計(jì)數(shù)。問題二:如何設(shè)置計(jì)數(shù)器初值?解決方法:本程序要求50ms中斷一次,20次為一秒,調(diào)整時(shí)間一次。又有tc=m-t/t計(jì)數(shù) ,方式一下m=216所

31、以tc=216-50ms/1us=3cb0,分別存在高八位和第八位中。八、實(shí)驗(yàn)總結(jié):通過本次實(shí)驗(yàn)我學(xué)會(huì)了光電測(cè)速儀的工作原理,復(fù)習(xí)了tmod的控制格式。但由于編寫按鍵設(shè)置周期和頻率轉(zhuǎn)換的時(shí)候設(shè)置的flag標(biāo)志位有問題,周期值無法讀入緩沖,致使我的程序只能顯示轉(zhuǎn)速,不能顯示周期。課程設(shè)計(jì)心得體會(huì)通過本次課程設(shè)計(jì),我又對(duì)元件焊接進(jìn)行了一次熟悉,現(xiàn)在已經(jīng)能掌握的很熟練了,這對(duì)以后的學(xué)習(xí)和工作都能夠有一定的幫助。 其次,通過對(duì)軟件鐘、渦流稱重計(jì)、旋轉(zhuǎn)測(cè)速儀的設(shè)計(jì),我對(duì)at89c51系列單片微型計(jì)算機(jī)的工作原理有了更深一步的認(rèn)識(shí),尤其是對(duì)adc0832的接口功能和具體工作步驟有了熟練的掌握,復(fù)習(xí)了用c語言編寫程序,重溫了switch語句、for循環(huán)、do while循環(huán)語句。另外這次還接觸了新的東西,就是用串口線將板子與電腦連接,用medwin編譯調(diào)試程序后用stc工具下載到板子上,可以一邊編寫一邊調(diào)試,對(duì)程序的設(shè)計(jì)有很大的幫助。在設(shè)計(jì)軟件鐘的時(shí)候由于一開始編寫循環(huán)的時(shí)候?qū)懙奶?jiǎn)單,致使我的板子出現(xiàn)了可以設(shè)置25點(diǎn)。后來下載到板子上后看出來這個(gè)錯(cuò)誤,又添加了一個(gè)if-else語句,使得當(dāng)時(shí)高位為2的時(shí)候,時(shí)地位最高只可以到3。還有一個(gè)問題就是一開始我設(shè)置的按鍵只能進(jìn)入,不能退出程序,經(jīng)過上網(wǎng)查詢和詢問老師,加了一個(gè)

溫馨提示

  • 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)論