渦流稱重和電子時(shí)鐘工程測(cè)控設(shè)計(jì)報(bào)告_第1頁(yè)
渦流稱重和電子時(shí)鐘工程測(cè)控設(shè)計(jì)報(bào)告_第2頁(yè)
渦流稱重和電子時(shí)鐘工程測(cè)控設(shè)計(jì)報(bào)告_第3頁(yè)
渦流稱重和電子時(shí)鐘工程測(cè)控設(shè)計(jì)報(bào)告_第4頁(yè)
渦流稱重和電子時(shí)鐘工程測(cè)控設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、工程測(cè)控設(shè)計(jì)報(bào)告班級(jí):電子112 姓名:李大龍分組序號(hào):電子2-4 1.課程設(shè)計(jì)目的及要求(1) 課程設(shè)計(jì)的目的1、 熟悉元器件及芯片的焊接與調(diào)試;2、 了解基于51單片機(jī)的軟件時(shí)鐘和數(shù)碼管顯示的工作原理;3、 會(huì)用C語言開發(fā)單片機(jī);4、 會(huì)使用Keil uVision編譯調(diào)試程序,并生成HEX文件,通過數(shù)據(jù)線下載到電路板上;(2)課程設(shè)計(jì)的要求及最終達(dá)到的效果軟件時(shí)鐘:p 按鍵1-進(jìn)入調(diào)整狀態(tài),(硬件左側(cè)第1個(gè))p 按鍵2-向左移動(dòng)調(diào)整位置,p 按鍵3-增加所選位值的數(shù)值,p 按鍵4-退出調(diào)整狀態(tài),恢復(fù)時(shí)鐘狀態(tài)。p 通常采用 “位”是否閃爍讓操作者明確當(dāng)前自己所選定的調(diào)整“位”。渦流稱重計(jì):

2、p 前三位數(shù)碼管顯示輸入電壓V,后三位數(shù)碼管顯示稱重Wp W與V的數(shù)學(xué)表達(dá)式及數(shù)碼管的顯示情況為:稱重W關(guān)系式V的取值前三位數(shù)碼管顯示后三位數(shù)碼管顯示W(wǎng)W=0V<0.5正常顯示顯示最下面一橫W=10*V-50.5=<V<=1.5正常顯示正常顯示W(wǎng)=40*V-501.5<V<=2正常顯示正常顯示V>2正常顯示顯示最上面一橫2.硬件電路的原理框圖(1)軟件時(shí)鐘的硬件電路原理圖顯示電路電源及功能指示電路 單片機(jī)外圍電路(復(fù)位電路、時(shí)鐘電路) 按鍵控制電路 數(shù)碼管驅(qū)動(dòng)電路 6個(gè)數(shù)碼管的地址從左至右依次為:0xf0、0xf1、0xf2、0f3、0xf4、0xf54個(gè)按

3、鍵的地址從左至右依次為:0xe0、0xd0、0xb0、0xff(2)渦流稱重計(jì)原理圖3.軟件設(shè)計(jì)(1)軟件時(shí)鐘的軟件設(shè)計(jì)算法的原理概述軟件時(shí)鐘就是利用51單片機(jī)制作一個(gè)電子時(shí)鐘。其算法就是以單片機(jī)的時(shí)鐘為基準(zhǔn),記錄單片機(jī)時(shí)鐘脈沖的數(shù)量,當(dāng)數(shù)量足夠多(如脈沖為每秒12Mhz,那么記錄12M個(gè)脈沖所需時(shí)間即為1秒)就可以將顯示部分的“秒”位加一。加到60以后進(jìn)位為“分”,“秒”位清零以后繼續(xù)記錄。當(dāng)“分”累加為60以后進(jìn)位為“時(shí)”,“分”位清零以后繼續(xù)記錄,當(dāng)“時(shí)”位為24以后,“時(shí)”位清零并繼續(xù)記錄。程序流程圖(2)渦流稱重計(jì)的軟件設(shè)計(jì)算法的原理概述本項(xiàng)設(shè)計(jì)中用電位器的中間抽頭所輸出的電壓模擬采

4、集的重量數(shù)據(jù),單片機(jī)經(jīng)ADC0832的通道0輸入該電壓信號(hào),并根據(jù)給定的轉(zhuǎn)換關(guān)系將其轉(zhuǎn)換為數(shù)字信息送6位共陽(yáng)8段LED顯示。程序流程圖開始程序初始化選擇稱重函數(shù)函數(shù)1函數(shù)2程序運(yùn)行顯示重量最終兩個(gè)程序組合在一起功能為:上電后進(jìn)入時(shí)鐘程序,各種功能時(shí)鐘的要求但是當(dāng)直接按下2鍵時(shí)進(jìn)入渦流稱重計(jì)程序按下復(fù)位鍵又回到始終程序?qū)崿F(xiàn)的方法為在時(shí)鐘程序判斷1鍵是否按下前先判斷一下2鍵是否按下,如果2鍵先按下了就轉(zhuǎn)入執(zhí)行稱重程序,反之繼續(xù)執(zhí)行始終程序合并后的源程序見最后附錄4.檢測(cè)裝置的使用方法在為單片機(jī)寫入程序后看一下是否進(jìn)行時(shí)鐘的顯示,在逐一測(cè)試四個(gè)調(diào)整鍵,沒問題后將時(shí)間設(shè)置為23.59.54看一下能否從

5、23.59.59變?yōu)?0.00.00如果可以則表示時(shí)鐘部分沒有問題退出時(shí)鐘的調(diào)整狀態(tài),直接按下2鍵則單片機(jī)應(yīng)執(zhí)行稱重程序,并且顯示關(guān)系為稱重W關(guān)系式V的取值前三位數(shù)碼管顯示后三位數(shù)碼管顯示W(wǎng)W=0V<0.5正常顯示顯示最下面一橫W=10*V-50.5=<V<=1.5正常顯示正常顯示W(wǎng)=40*V-501.5<V<=2正常顯示正常顯示V>2正常顯示顯示最上面一橫5.測(cè)試結(jié)果分析實(shí)驗(yàn)結(jié)果為: 上電后時(shí)鐘顯示正常p 按鍵1-進(jìn)入調(diào)整狀態(tài),(硬件左側(cè)第1個(gè))p 按鍵2-向左移動(dòng)調(diào)整位置,p 按鍵3-增加所選位值的數(shù)值,p 按鍵4-退出調(diào)整狀態(tài),恢復(fù)時(shí)鐘狀態(tài)。p “位”

6、閃爍明確當(dāng)前自己所選定的調(diào)整“位”。將時(shí)間調(diào)整為23.59.54后可以看到從23.59.59變?yōu)?0.00.00說明軟件時(shí)鐘滿足功能要求然后退出時(shí)鐘的調(diào)整狀態(tài)直接按下2鍵可以看到單片機(jī)開始執(zhí)行稱重程序調(diào)節(jié)滑動(dòng)變阻器測(cè)試表格為前三位數(shù)碼管顯示V(v)后三位數(shù)碼管顯示W(wǎng)(g)前三位數(shù)碼管顯示V(v)與電壓變測(cè)得輸入電壓的比較結(jié)果0.10顯示最下面一橫基本一致0.31顯示最下面一橫0.500001.500102.000302.30顯示最上面一橫2.47顯示最上面一橫說明渦流稱重計(jì)滿足功能要求6.遇到的問題與解決辦法問題一:如何設(shè)置時(shí)間?解決辦法:讀取按鍵,設(shè)置按鍵對(duì)時(shí)鐘進(jìn)行調(diào)整,編寫SWITCH語句

7、控制按鍵的選擇,將修改以后的結(jié)果放到數(shù)組中進(jìn)行顯示。問題二:如何使前三位數(shù)碼管顯示的電壓值一位一位的變?解決辦法:要改變算法,先做加和相乘,最后再做除法和取余數(shù)操作,并且在計(jì)算時(shí)盡量不使用中間變量,盡量使用最原始的變量進(jìn)行計(jì)算減小誤差問題三:如何使V和W滿足所給定的函數(shù)關(guān)系?解決辦法:使用if語句,根據(jù)V的取值,選擇表達(dá)W的取值。問題四:如何實(shí)現(xiàn)兩個(gè)程序之間的切換?解決辦法:由于時(shí)鐘程序要進(jìn)行時(shí)間的調(diào)整必須先按下1鍵,因此可以在時(shí)鐘程序判斷1鍵是否按下前先判斷2鍵是否按下,如果2鍵一按下則轉(zhuǎn)入執(zhí)行稱重程序,如果2鍵沒有按下則繼續(xù)執(zhí)行時(shí)鐘程序,按下復(fù)位鍵是又開始執(zhí)行時(shí)鐘程序7.焊接、設(shè)計(jì)、調(diào)試心

8、得體會(huì)。在焊接時(shí)注意要先預(yù)熱焊盤,這樣焊點(diǎn)會(huì)比較光亮好看,一定不要有虛焊,另外在焊接元件之前要先檢查元件的好壞,否則一旦有壞的元件,在整機(jī)焊接完成之后就很難找出來了在寫程序時(shí)不可能一次就寫好,在調(diào)試和修改時(shí)一定要保留上一個(gè)文件,新建一個(gè)工程去修改以免把原來的程序改的面目全非了要注意算法的選擇,比如在做稱重程序時(shí),由于一開始使用了中間變量(做除法取余數(shù)后的)導(dǎo)致顯示結(jié)果不能連續(xù)變化,這是因?yàn)閱纹瑱C(jī)不同于計(jì)算機(jī),它的位數(shù)太少計(jì)算時(shí)尤其是對(duì)整型數(shù)做除法和取余數(shù)會(huì)有很多的省略誤差會(huì)很大,因此要盡量減少中間變量的使用因?yàn)檫@些中間變量本身已經(jīng)有誤差了,并且要先做加減和乘法最后再做除法和取余操作8.現(xiàn)場(chǎng)布置

9、的程序修改使的按下3鍵時(shí)前三位數(shù)碼管顯示123 只需將源程序在兩個(gè)程序之間跳轉(zhuǎn)的語句條件改為3鍵被按下,同時(shí)為顯示子程序中前三位數(shù)碼管永久賦值為123即可附錄軟件時(shí)鐘和渦流稱重計(jì)綜合后的程序?yàn)椋?include <reg52.H> #include "intrins.h"#define ulong unsigned long /定義ulong 代替 unsigned long #define uint unsigned int#define uchar unsigned charuchar n,h,s,m,h_1,h_0,m_1,m_0,s_1,s_0;uint

10、 i,counter;uchar xuanz,jieg,shift,x;unsigned char code duanx=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x00;void delay();void display(uchar,uchar,uchar,uchar,uchar,uchar);void display1(uchar,uchar,uchar,uchar,uchar,uchar);uchar inkey(void);sbit ADCS =P35; /ADC0832 ch

11、ip seclectsbit ADCLK =P34; /ADC0832 clock signalsbit ADDI =P33; /ADC0832 k insbit ADDO =P33; /ADC0832 k out sbit P20=P20;/Asbit P21=P21;/Bsbit P22=P22;/Csbit P23=P23;/38譯碼器使能端sbit P10=P10;/LED測(cè)試端口sbit P26= P26;sbit P25 =P25;uchar dispbuf6;uchar code tab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6

12、f,0x8,0x1 ;uint temp;uchar getdata; /獲取ADC轉(zhuǎn)換回來的值uchar e=0; void zd() interrupt 3 n+;if(n=20) n=0;s+;TH1=(65536-50000)/256;TL1=(65536-50000)%256;TR1=1;/*時(shí)間顯示子程序*/void display(uchar h_1,uchar h_0,uchar m_1,uchar m_0,uchar s_1,uchar s_0) /根據(jù)數(shù)碼管的地址選擇要顯示的值P23=0;P20=0;P21=0;P22=0;P0=duanxh_1;delay();P20=1

13、;P21=0;P22=0;P0=duanxh_0|0x80;delay();P20=0;P21=1;P22=0;P0=duanxm_1;delay();P20=1;P21=1;P22=0;P0=duanxm_0|0x80;delay();P20=0;P21=0;P22=1;P0=duanxs_1;delay();P20=1;P21=0;P22=1;P0=duanxs_0;delay();void display1(uchar h_1,uchar h_0,uchar m_1,uchar m_0,uchar s_1,uchar s_0)switch(shift) case 0:h_1=15;bre

14、ak;case 1:h_0=15;break;case 2:m_1=15;break;case 3:m_0=15;break;case 4:s_1=15;break;case 5:s_0=15;break; P23=0;P20=0;P21=0;P22=0;P0=duanxh_1;delay();P20=1;P21=0;P22=0;P0=duanxh_0|0x80;delay();P20=0;P21=1;P22=0;P0=duanxm_1;delay();P20=1;P21=1;P22=0;P0=duanxm_0|0x80;delay();P20=0;P21=0;P22=1;P0=duanxs_

15、1;delay();P20=1;P21=0;P22=1;P0=duanxs_0;delay();P10=0;uchar inkey(void) uchar jjj,keydat; P2 = 0xff;/P2準(zhǔn)備讀入 keydat = P2;/讀入鍵值 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

16、 & 0xf0; /等待鍵松手 while (jjj != 0xf0); return (keydat); void delay(void)/延時(shí)程序uchar i;for (i=0;i<201;i+)_nop_();void ddisplay(void) /六位數(shù)碼管顯示程序,disdat是要顯示的內(nèi)容(是09的數(shù)字),xsd是在那一位顯示小數(shù)點(diǎn)uchar i,disa,disb,disc;disb = 0x00;/顯示第n位for (i=0;i<6;i+)/共顯示3個(gè)數(shù)據(jù)disa = dispbufi;/顯示數(shù)據(jù)if (disa < 10 && e

17、 =0)P2 = disb;disc = tabdisa; /顯示段碼if (i = 0 | i = 5)disc = disc | 0x80;/增加小數(shù)點(diǎn)顯示P0 = disc;/送顯示delay ();/延時(shí)P0 = 0x0;disb+;/下一個(gè)要顯示的位置if(e=1)P2 = disb;if(i>=3)disc = tab10; /顯示段碼P0 = disc;elseif (i = 0 | i = 5)disc = tabdisa;disc = disc | 0x80;/增加小數(shù)點(diǎn)顯示 P0 = disc;elsedisc = tabdisa; P0 = disc;/送顯示del

18、ay ();/延時(shí)P0 = 0x0;disb+;/下一個(gè)要顯示的位置 if (e=2)P2 = disb;if(i>=3)disc = tab11; /顯示段碼P0 = disc;/送顯示elseif (i = 0 | i = 5)disc = tabdisa;disc = disc | 0x80;/增加小數(shù)點(diǎn)顯示 P0 = disc;else disc = tabdisa; P0 = disc;delay ();/延時(shí)P0 = 0x0;disb+;/下一個(gè)要顯示的位置 P2 = 0xff;unsigned int Adc0832(unsigned char channel) /AD轉(zhuǎn)換

19、,返回結(jié)果 uchar i=0; uchar j; uint dat=0; uchar ndat=0; if(channel=0)channel=2; if(channel=1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;/拉低CS端 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_(); ADCLK=0;/拉低

20、CLK端,形成下降沿2 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿3 ADDI=1;/控制命令結(jié)束 _nop_(); _nop_(); dat=0; for(i=0;i<8;i+) dat|=ADDO;/收數(shù)據(jù) ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次時(shí)鐘脈沖 _nop_(); _nop_(); dat<<=1; if(i=7)dat|=ADDO; for(i=0;i&

21、lt;8;i+) j=0; j=j|ADDO;/收數(shù)據(jù) ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次時(shí)鐘脈沖 _nop_(); _nop_(); j=j<<7; ndat=ndat|j; if(i<7)ndat>>=1; ADCS=1;/拉低CS端 ADCLK=0;/拉低CLK端 ADDO=1;/拉高數(shù)據(jù)端,回到初始狀態(tài) dat<<=8; dat|=ndat; return(dat); /return ad kvoid main(void) EA=1;ET1=1;TMOD=0x10;TH1=(65536-50000)

22、/256;TL1=(65536-50000)%256;TR1=1;while(1) /時(shí)鐘的計(jì)時(shí)if(s=60)s=0;m+;if(m=60)m=0;h+;if(h=24)h=0;s_1=s/10;s_0=s%10;m_1=m/10;m_0=m%10;h_1=h/10;h_0=h%10;display(h_1,h_0,m_1,m_0,s_1,s_0);xuanz=inkey();if(xuanz=0xd0) /判斷是否跳出時(shí)鐘程序轉(zhuǎn)而執(zhí)行稱重程序 unsigned int w; while(1) getdata=Adc0832(0); temp=getdata*1.0/255*500; /電壓

23、值轉(zhuǎn)換,5V做為參考電壓,分成256份。 dispbuf2=temp%10; /個(gè)位 dispbuf1=temp/10%10; /十位 dispbuf0=temp/100; /百位 w = temp * 1.0 /2.5/6;/確定稱重與輸入電壓的函數(shù)關(guān)系 w=0.1*temp-5; if(w>10) w=0.4*temp-50;if(dispbuf0=0&& dispbuf1<5)e=1;else if( dispbuf0=2&&( dispbuf1>0 |dispbuf2>0) )e=2;elsee=0;dispbuf5=w%10; /個(gè)位 dispbuf4=w/10%10; /十位 dispbuf3=w/100; /百位 ddisplay(); else switch(xuanz) /根據(jù)按下的鍵進(jìn)入相應(yīng)的調(diào)整狀態(tài)case 0xe0:jieg=1;break;case 0xd0:jieg=2;break;case 0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論