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

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上課程設(shè)計(jì)報(bào)告課題一 使用51單片機(jī)設(shè)計(jì)軟件鐘一、 實(shí)驗(yàn)?zāi)康模?. 掌握元器件及芯片的焊接與調(diào)試;2. 了解基于51單片機(jī)的軟件鐘的工作原理;3. 會(huì)用C語(yǔ)言編寫(xiě)時(shí)鐘函數(shù),復(fù)習(xí)用switch語(yǔ)句和do-while語(yǔ)句、for語(yǔ)句實(shí)現(xiàn)循環(huán)的方法;4. 會(huì)使用MEDWIN編譯調(diào)試程序,并生成HEX,通過(guò)數(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è)按鍵來(lái)進(jìn)入調(diào)整狀態(tài)。進(jìn)入調(diào)整狀態(tài)以后需要一個(gè)按鍵來(lái)向左移動(dòng)調(diào)整位置,一個(gè)按鍵來(lái)向右移動(dòng)調(diào)整位置,一個(gè)按鍵來(lái)增加所選位置的數(shù)值,一個(gè)按鍵來(lái)減小所選位置的數(shù)值。調(diào)整完成以后還需要一個(gè)按鍵來(lái) 退出調(diào)整位置,恢復(fù)時(shí)鐘的計(jì)數(shù)運(yùn)轉(zhuǎn)。以上所需按鍵可以根據(jù)需要合并

3、。在調(diào)整中另外一個(gè)需要注意的問(wèn)題是如何顯示目前所選定調(diào)整的位置(如秒的個(gè)位或者十位,分的個(gè)位或者十位等)??梢圆捎檬欠耧@示數(shù)位右下的小數(shù)點(diǎn)或者所選需調(diào)整位是否閃爍來(lái)讓操作者明確目前自己所選定的需要調(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

4、. 設(shè)置時(shí)間子程序F. 時(shí)鐘調(diào)整子程序G. 鍵值讀入子程序H. 延時(shí)子程序2.實(shí)驗(yàn)程序清單:專心-專注-專業(yè)#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(vo

5、id);void tzszw(uchar 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) se

6、tsz(); jssz(); display(); /顯示 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 disda

7、t0-; hour=disdat0*10+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)

8、 disdat2+; if (disdat25) 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) d

9、isdat4=0; else if (disdat4=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開(kāi)始計(jì)數(shù),C/T=0-對(duì)內(nèi)部計(jì)

10、數(shù),模式1-16位計(jì)數(shù) TH0=0X3C; TL0=0XAF; ET0=1; /打開(kāi)定時(shí)器0中斷 ET1=0; /關(guān)閉定時(shí)器1中斷 TR0=1; /打開(kāi)計(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; /

11、讀入鍵值 keydat = keydat & 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)過(guò)medwin對(duì)程序的調(diào)試無(wú)誤后,將hex文件下載到電路板上,可正常顯示時(shí)鐘,并且可以通過(guò)按鍵對(duì)時(shí)鐘進(jìn)行調(diào)整。針對(duì)我的程序

12、,按鍵實(shí)現(xiàn)功能依次為:一號(hào)鍵:進(jìn)入和退出設(shè)置,當(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í)鐘歸零。七、 遇到的問(wèn)題與解決方法:?jiǎn)栴}一:如何編寫(xiě)時(shí)鐘函數(shù)?解決方法:每60秒進(jìn)一位,即一分鐘;每60分鐘進(jìn)一位,即一小時(shí);在函數(shù)體內(nèi)用循環(huán),在主函數(shù)中調(diào)用。編寫(xiě)時(shí)注意當(dāng)時(shí)高位為2時(shí),時(shí)地位最高到3,且分高位和秒高位最高為5。問(wèn)題二:如何設(shè)置時(shí)間?解決方法:改變現(xiàn)實(shí)狀態(tài),將現(xiàn)在的結(jié)果放到數(shù)組中去,讀取按鍵,設(shè)置按鍵對(duì)時(shí)鐘進(jìn)行調(diào)整,編寫(xiě)SWITCH語(yǔ)句控制按鍵的選擇。問(wèn)題三:如何解決時(shí)間變

13、化太快?解決方法:使用一個(gè)延時(shí)函數(shù)來(lái)緩沖每一秒變化時(shí)間。八、 實(shí)驗(yàn)總結(jié):通過(guò)本次實(shí)驗(yàn),我對(duì)時(shí)鐘函數(shù)的編寫(xiě)有了更深一步的掌握,復(fù)習(xí)了C語(yǔ)言的編程。并且可以通過(guò)自己焊接的板子來(lái)調(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語(yǔ)言編寫(xiě)時(shí)鐘函數(shù),復(fù)習(xí)用switch語(yǔ)句和do-while語(yǔ)句、for語(yǔ)句實(shí)現(xiàn)循環(huán)的方法;5. 會(huì)使用MEDWIN編譯調(diào)試程序,并生成HEX,通過(guò)數(shù)據(jù)線下載到電路板上;二、算法原理本項(xiàng)設(shè)計(jì)中用電

14、位器的中間抽頭所輸出的電壓模擬采集的重量數(shù)據(jù),單片機(jī)經(jīng)ADC0832的通道0輸入該電壓信號(hào),并將其轉(zhuǎn)換為數(shù)字信息送6位共陽(yáng)8段LED顯示。ADC0832的芯片接口說(shuō)明: 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

15、 位數(shù)據(jù)為“0”、“0”時(shí),將CH0作為正輸入端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端則開(kāi)始利用數(shù)據(jù)輸出DO進(jìn)行轉(zhuǎn)換數(shù)據(jù)的讀取。從第4個(gè)脈沖下沉開(kāi)始由DO端輸出轉(zhuǎn)換數(shù)據(jù)最高位DATA7,隨后每一個(gè)脈沖下沉DO端輸出下一位數(shù)據(jù)。直到第11個(gè)脈沖時(shí)發(fā)出最低位數(shù)據(jù)DATA0,一個(gè)字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開(kāi)始輸出下一個(gè)相反字節(jié)的數(shù)據(jù),即從第11個(gè)字節(jié)的下沉輸出DATD0。隨后輸出8位數(shù)據(jù),到第19 個(gè)脈沖時(shí)數(shù)據(jù)輸出完成,也標(biāo)

16、志著一次A/D轉(zhuǎn)換的結(jié)束。最后將CS置高電平禁用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行處理就可以了。三、實(shí)現(xiàn)功能要求:使用時(shí)用5V的電壓來(lái)表示200g的重量,使用通道O來(lái)輸入模擬量。四、設(shè)計(jì)內(nèi)容:(1)硬件焊接:根據(jù)ADC0832的接口說(shuō)明焊接導(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

17、/ADC0832的引腳sbit ADCS =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)換回來(lái)的值uchar e=0

18、;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+)/共顯示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é)

19、束 _nop_(); _nop_(); dat=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端 A

20、DDO=1;/拉高數(shù)據(jù)端,回到初始狀態(tài) dat=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%

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

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

23、51系列單片微型計(jì)算機(jī)的工作原理;3. 了解基于51單片機(jī)的渦流稱重計(jì)的工作原理;4. 會(huì)用C語(yǔ)言編寫(xiě)時(shí)鐘函數(shù),復(fù)習(xí)用switch語(yǔ)句和do-while語(yǔ)句、for語(yǔ)句實(shí)現(xiàn)循環(huán)的方法;5. 會(huì)使用MEDWIN編譯調(diào)試程序,并生成HEX,通過(guò)數(shù)據(jù)線下載到電路板上;二、算法原理:數(shù)字頻率計(jì)的基本原理數(shù)字頻率計(jì)是直接用十進(jìn)制數(shù)字來(lái)顯示被測(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)的重

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

25、硬件原理:1、光電測(cè)量部分原理:檢測(cè)齒輪上有12個(gè)齒均勻分布在輪盤(pán)周?chē)⒈恢苯庸潭ㄔ诒粶y(cè)軸上,安裝時(shí)光電耦合器的發(fā)光二極管和光敏三極管正對(duì)齒輪上的齒,當(dāng)被測(cè)軸轉(zhuǎn)動(dòng)時(shí)帶動(dòng)檢測(cè)齒輪轉(zhuǎn)動(dòng),光電耦合器通過(guò)對(duì)檢測(cè)齒輪上的齒進(jìn)行耦合從而產(chǎn)生數(shù)字脈沖。脈沖經(jīng)過(guò)放大送向單片機(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ù),送顯示緩存

26、進(jìn)行顯示輸出。四、實(shí)現(xiàn)功能要求:本實(shí)驗(yàn)要求編寫(xiě)程序?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)周期,并且通過(guò)此按鍵可以實(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 longuch

27、ar disValue6;uchar lb1,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ù)dis

28、a = disValuei;/顯示數(shù)據(jù)if (disa TR11開(kāi)始計(jì)數(shù),C/T=0-對(duì)內(nèi)部計(jì)數(shù),模式1-16位計(jì)數(shù)TH0=0X3C;TL0=0XB0;TH1=0X00;TL1=0X00;ET0=1;/打開(kāi)定時(shí)器0中斷ET1=0;/關(guān)閉計(jì)數(shù)器1中斷TR0=1;/打開(kāi)定時(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;

29、TH1=0X00;TL1=0X00;TR1 = 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; /萬(wàn)位 display(); 六、測(cè)試結(jié)果及分析:STC89C52芯片的P3.5引腳實(shí)現(xiàn)的是計(jì)數(shù)功能,將P3.5引腳轉(zhuǎn)速測(cè)量

30、儀的正極接,芯片的地線與轉(zhuǎn)速測(cè)量?jī)x的負(fù)極接,板子通電后,即為顯示的頻率值。由于我編寫(xiě)的頻率轉(zhuǎn)周期的函數(shù)不能讀入緩沖區(qū),所以我的程序不能實(shí)現(xiàn)由頻率到周期的轉(zhuǎn)換,只能顯示和儀器上一樣的頻率數(shù)值。七、遇到的問(wèn)題和解決方法:?jiǎn)栴}一:如何編寫(xiě)程序選擇定時(shí)器和計(jì)數(shù)器的工作方式?解決方法:根據(jù)定時(shí)方式控制寄存器TMOD的格式:GATEC/TM1M0GATEC/TM1M0前四位控制T1,后四位控制T0,所以編寫(xiě)語(yǔ)句:TMOD=0x51; gate0-TR11開(kāi)始計(jì)數(shù),C/T=0-對(duì)內(nèi)部計(jì)數(shù),方式1-16位計(jì)數(shù)。問(wèn)題二:如何設(shè)置計(jì)數(shù)器初值?解決方法:本程序要求50ms中斷一次,20次為一秒,調(diào)整時(shí)間一次。又有T

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論