版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 智能儀器設(shè)計基礎(chǔ)課程設(shè)計</p><p><b> 目錄</b></p><p> 摘要----------------------------------------------------------------3</p><p> 題目--------------------------------------
2、--------------------------3</p><p> 整體設(shè)計及系統(tǒng)原理--------------------------------------------------3</p><p> 主要硬件介紹--------------------------------------------------------4</p><p> S
3、TC89C51單片機(jī)特點(diǎn)-----------------------------------------------4</p><p> STC89C51引腳說明-------------------------------------------------4</p><p> 硬件設(shè)計------------------------------------------------
4、------------6</p><p> 單片機(jī)最小系統(tǒng)--------------------------------------------------6</p><p> 數(shù)碼管顯示電路--------------------------------------------------7</p><p> 鍵盤電路------------------
5、--------------------------------------8</p><p> AD轉(zhuǎn)換電路-----------------------------------------------------9</p><p> 信號調(diào)理電路----------------------------------------------------9</p><
6、p> 24C02電路------------------------------------------------------10</p><p> 報警電路-------------------------------------------------------11</p><p> 加熱電路---------------------------------------
7、----------------11</p><p> 電源電路-------------------------------------------------------12</p><p> 軟件設(shè)計-----------------------------------------------------------12</p><p> 數(shù)碼管顯示程序
8、-------------------------------------------------12</p><p> 24C02讀寫程序-------------------------------------------------14</p><p> AD轉(zhuǎn)換程序----------------------------------------------------18<
9、;/p><p> 算數(shù)平均濾波程序----------------------------------------------18</p><p> 熱電阻非線性校正算法------------------------------------------19</p><p> 按鍵子程序---------------------------------------
10、-------------20</p><p> 報警子程序----------------------------------------------------23</p><p> PID子程序----------------------------------------------------23</p><p> 主程序--------------
11、------------------------------------------23</p><p> 課程設(shè)計總結(jié)--------------------------------------------------27</p><p> 參考文獻(xiàn)------------------------------------------------------27</p>
12、<p><b> 附錄:</b></p><p><b> 系統(tǒng)原理圖</b></p><p><b> 系統(tǒng)PCB圖</b></p><p><b> 摘要:</b></p><p> 隨著電子技術(shù)的飛速發(fā)展,單片機(jī)在國民經(jīng)濟(jì)生產(chǎn)各行
13、業(yè)發(fā)揮了重要的作用。它因?yàn)榧啥雀?、體積小、運(yùn)行可靠、應(yīng)用靈活、價格低、面向控制等特點(diǎn)得到了廣大工程技術(shù)人員和客戶的好評。在溫度控制方面,單片機(jī)能夠代替常規(guī)的模擬調(diào)節(jié)器。本文主要設(shè)計了單片機(jī)爐溫控制系統(tǒng)硬件電路和軟件程序。系統(tǒng)具有工作可靠、實(shí)時性強(qiáng)等特點(diǎn),滿足控制精度的要求。本著在滿足系統(tǒng)性能要求的前提下,盡可能的減少硬件成本。本文主要涉及到控制系統(tǒng)的硬件設(shè)計和單片機(jī)的控制軟件編程。本系統(tǒng)選用熱電阻Cu50對爐溫進(jìn)行檢測,在AD0804
14、完成模數(shù)轉(zhuǎn)換之后,STC89C51單片機(jī)對數(shù)據(jù)進(jìn)行處理。人機(jī)接口電路部分能實(shí)現(xiàn)溫度設(shè)定、溫度顯示、超溫報警等功能。</p><p> 題目:20. 試設(shè)計智能儀表</p><p> 實(shí)現(xiàn)智能數(shù)字顯示儀表。要求8位數(shù)碼管顯示(4位顯示測量值,4位顯示設(shè)定值),4輸入按鈕(功能選擇、數(shù)碼管選擇、數(shù)字增加、數(shù)字減少),可設(shè)定上下限報警,蜂鳴器報警。適配Cu50熱電阻,測溫范圍為0℃~130℃
15、。采用比例控制、并用晶閘管移相驅(qū)動1000W電加熱器(電源電壓為AC220V)。</p><p> 整體設(shè)計及系統(tǒng)原理:</p><p> 在系統(tǒng)中,利用熱電阻測得電阻爐實(shí)際溫度并轉(zhuǎn)換成毫伏級電壓信號。該電壓信號經(jīng)過溫度檢測電路轉(zhuǎn)換成與爐溫相對應(yīng)的數(shù)字信號進(jìn)入單片機(jī),單片機(jī)進(jìn)行數(shù)據(jù)處理后,通過LED數(shù)碼管顯示溫度并判斷是否報警,同時將溫度與設(shè)定溫度比較,根據(jù)設(shè)定的P算法計算出控制量,根
16、據(jù)控制量通過控制雙向晶閘管的導(dǎo)通和關(guān)閉從而控制電阻絲的導(dǎo)通時間,以實(shí)現(xiàn)對爐溫的控制。該系統(tǒng)中的時鐘電路可以根據(jù)要求進(jìn)行準(zhǔn)確計時。</p><p><b> 主要硬件介紹:</b></p><p> STC89C51是改進(jìn)型的51內(nèi)核單片機(jī),它比人們常用的AT89S51單片機(jī)編程更簡單。</p><p> STC89C51單片機(jī)特點(diǎn):<
17、;/p><p> 12時鐘/6時鐘機(jī)器周期的8051CPU;工作電壓3.4-5.5V;工作頻率0-40MHz;</p><p> 程序存儲器容量4KB;RAM容量512B;I/O端口與AT89S51相同;通過串口(P3.0 P3.1)直接下載用戶程序到代碼存儲器中(ISP功能),可下載10萬次以上;具有EEPROM;具有看門狗,冷啟動后未關(guān)閉狀態(tài),一旦啟動無法關(guān)閉;3個定時計數(shù)器;2個外部
18、中斷,掉電模式可由外部中斷低電平觸發(fā)喚醒;一個異步串行口;溫度范圍0-75℃(商業(yè)),-40-85℃(工業(yè));具有PDIP-40、PLCC-44、PQFP-44封裝。</p><p> STC89C51引腳說明:</p><p> VCC:供電電壓。 GND:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流
19、。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,
20、將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時,P1口作為第八位地址接收。 P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2
21、口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地</p><p><b> 硬件設(shè)計:</b></p><p><b> 單片機(jī)最小系統(tǒng):</b></p><p> 時鐘電路采用12MHz的晶振和兩個30pF的電容連接而成,是單片機(jī)的機(jī)器周期為1us左右,在使用定時器時便于計算和設(shè)置定時器的
22、初始值。</p><p> 復(fù)位電路:由于機(jī)器周期為2us,所以RESET引腳上產(chǎn)生一個2us以上的高電平脈沖,即可產(chǎn)生復(fù)位動作。電源接上瞬間,電容上沒有電荷,相當(dāng)于短路,所以復(fù)位引腳直接連到VCC,單片機(jī)復(fù)位,隨時間增加,電容上電壓逐漸變大,RESET引腳上電壓逐漸降低至低電平時,單片機(jī)恢復(fù)正常狀態(tài),在此使用10k電阻,10uF電容,時間常數(shù)遠(yuǎn)大于2us,高電平能保持2us以上,足以使系統(tǒng)復(fù)位。</p&
23、gt;<p> 串口可以用來向單片機(jī)里下載程序,以及和計算機(jī)通訊等。</p><p><b> 數(shù)碼管顯示電路:</b></p><p> 此電路采用8個數(shù)碼管和一個74LS245,一個74LS138和一個排阻組成。74LS245是一個8雙向總線接收器,與單片機(jī)的P0口相接,控制數(shù)碼管的段選端。由于P0口內(nèi)部沒有上拉電阻,所以做輸出口時,必須外接上
24、拉電阻。74LS138是一個3-8譯碼器,與P2口的高三位相接,經(jīng)過譯碼控制數(shù)碼管的位選端,數(shù)碼管都是共陽數(shù)碼管。</p><p><b> 鍵盤電路:</b></p><p> 4個按鍵分別與單片機(jī)的P3.3、P2.2、P2.3、P2.4相接,功能分別為功能選擇、數(shù)碼管選擇,加數(shù)字、減數(shù)字,都是低電平有效,都接上拉電阻是保證沒有鍵按下時,均為高電平,其中功能鍵按
25、下時會觸發(fā)外部中斷。</p><p><b> AD轉(zhuǎn)換電路:</b></p><p> ADC0804是一個CMOS的逐步逼近式AD轉(zhuǎn)換器,具有8為分辨率,轉(zhuǎn)換時間為100us,而最大誤差為1個LSB值,差動式模擬電壓輸入、三態(tài)數(shù)字輸出,模擬輸入電壓為0-5V。</p><p><b> 信號調(diào)理電路:</b>&l
26、t;/p><p> Cu50在0℃~130℃時電阻變化為50.000Ω——77.833Ω,左上方電路為提供1mA電流的恒流源,因此Cu50輸出的電壓為0.005---0.077833V的電壓,通過信號調(diào)理電路將其轉(zhuǎn)化為0—4.2V的電壓送入AD。</p><p> 可列方程組 0.005m+b=0與 0.077833m+b=4.2</p><p> 解得
27、 m=151 b=-7.55 由電路圖可得 可令R23=150K,R24=1K右下方為參考電壓電路Vref=(1+R22/R21)*V, 可令V=0.03V R22=2K R21=3K. 0.03V可由穩(wěn)壓管TL431經(jīng)分壓可得。此電路中,放大器選擇滿擺幅運(yùn)放TLV2472。</p><p><b> 24C02電路:</b>
28、</p><p> 24C02是一種由I2C接口的EEPROM存儲芯片,存儲容量為256B,100萬次的編程/擦除周期,數(shù)據(jù)保存可達(dá)100年。在此電路中使用此芯片是要保存儀表中某些已設(shè)定好的數(shù)據(jù),當(dāng)?shù)綦姾?,?shù)據(jù)不會丟失。由于I2C總線是開漏結(jié)構(gòu),因此時鐘線SCL和數(shù)據(jù)線SDA用10kΩ電阻上拉到高電平。</p><p><b> 報警電路:</b></p&g
29、t;<p> 該報警電路由蜂鳴器和發(fā)光二極管、PNP三極管組成,當(dāng)單片機(jī)的P2.0口輸出低電平時三極管基極為低電平,三極管導(dǎo)通,蜂鳴器工作發(fā)出響聲,同時發(fā)光二極管也導(dǎo)通,發(fā)光。三極管在此處是為了驅(qū)動蜂鳴器和發(fā)光二極管工作。在軟件設(shè)計中可設(shè)置當(dāng)溫度超過上限或下限時,報警電路工作。</p><p><b> 加熱電路:</b></p><p> 單片機(jī)
30、驅(qū)動移相型驅(qū)動器、具有點(diǎn)阻性負(fù)載的電路如上圖所示。移相型驅(qū)動器可以在單片機(jī)控制驅(qū)動器的瞬間使驅(qū)動器MOC3022觸發(fā)雙向晶閘管BTA12,因此可以按照單片機(jī)發(fā)出的控制信號控制雙向晶閘管導(dǎo)通角。其中R9=(5V-VOL-VF)/IFT=2V/10mA=200Ω,電阻R11用于限制MOC3022的輸出電流ITSM,計算公式如下:R11=Vpeak/ITSM=(220)V/1A=311Ω.</p><p> 第二個電
31、路為電壓過零檢測電路,當(dāng)電壓過零時,向單片機(jī)發(fā)一個中斷,單片機(jī)可以按照此信號控制雙向晶閘管的導(dǎo)通角。</p><p><b> 電源電路:</b></p><p> 這是儀表的供電電路可以通過外接直流電源,然后通過該電源電路給儀表供電。電路圖中的二極管橋式電路是濾波電路。接入電源后通過穩(wěn)壓模塊7805穩(wěn)壓最終獲得+5V的電壓。最左面的發(fā)光二極管是檢測電源是否接通。
32、通電時,二極管亮。</p><p><b> 軟件設(shè)計:</b></p><p><b> 數(shù)碼管顯示程序:</b></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><
33、p> void delay(uint x) //延時函數(shù)大約延時5ms</p><p><b> {</b></p><p> uchar m,n;</p><p> for(m=x;m--;m>0)</p><p> for(n=60;n--;n>0)
34、;</p><p><b> }</b></p><p> void display1(uchar a,uchar b,uchar c,uchar d)//設(shè)定值顯示</p><p><b> {</b></p><p> P2=0x8f&P2;
35、 //送第一個數(shù)碼管的位碼</p><p> P0=a; //送第一個數(shù)碼管的段碼 </p><p> delay(10); //短暫延時</p><p> P2=0x9f&P2;//送第二個數(shù)碼管的位碼</p><
36、p> P0=b; //送第二個數(shù)碼管的段碼delay(10);</p><p> P2=0xaf&P2;//送第三個數(shù)碼管的位碼</p><p> P0=c;//送第三個數(shù)碼管的段碼</p><p> delay(10);</p><p> P2=0x
37、bf&P2;//送第四個數(shù)碼管的位碼</p><p> P0=d;//送第四個數(shù)碼管的段碼</p><p> delay(10);</p><p><b> }</b></p><p> void display2(uchar a,uchar b,uchar c,uchar d)//測量值顯示<
38、/p><p><b> {</b></p><p> P2=0xcf&P2;//送第一個數(shù)碼管的位碼</p><p> P0=a;//送第一個數(shù)碼管的段碼</p><p> delay(10);</p><p> P2=0xdf&P2;//送第二個數(shù)碼管的位碼</
39、p><p> P0=b;//送第二個數(shù)碼管的段碼</p><p> delay(10);</p><p> P2=0xef&P2;//送第三個數(shù)碼管的位碼</p><p> P0=c;//送第三個數(shù)碼管的段碼</p><p> delay(10);</p><p> P2=
40、0xff&P2;//送第四個數(shù)碼管的位碼</p><p> P0=d;//送第四個數(shù)碼管的段碼</p><p> delay(10);</p><p><b> }</b></p><p> 24C02讀寫程序:</p><p> #define uchar unsigned
41、 char</p><p> #define uint unsigned int</p><p><b> uchar a;</b></p><p> sbit sda=P3^4;</p><p> sbit scl=P3^5;</p><p> void delay()</p&g
42、t;<p><b> { ;; }</b></p><p> void start() //啟用總線</p><p><b> {</b></p><p><b> sda=1;</b></p><p&g
43、t;<b> delay();</b></p><p><b> scl=1;</b></p><p><b> delay();</b></p><p><b> sda=0;</b></p><p><b> delay();&l
44、t;/b></p><p><b> }</b></p><p> void stop()//停用總線</p><p><b> {</b></p><p><b> sda=0;</b></p><p><b> delay
45、();</b></p><p><b> scl=1;</b></p><p><b> delay();</b></p><p><b> sda=1;</b></p><p><b> delay();</b></p>
46、<p><b> }</b></p><p> void reply()//應(yīng)答信號</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> scl=1;</b><
47、/p><p><b> delay();</b></p><p> while((sda==1)&&(i<250))</p><p><b> i++;</b></p><p><b> scl=0;</b></p><p>&
48、lt;b> delay();</b></p><p><b> }</b></p><p> void first()//24C02初始化程序</p><p><b> {</b></p><p><b> sda=1;</b></p>
49、<p><b> delay();</b></p><p><b> scl=1;</b></p><p><b> delay();</b></p><p><b> }</b></p><p> void write(uchar
50、 date)//寫一個字節(jié)的程序</p><p><b> {</b></p><p> uchar k,temp;</p><p> temp=date;</p><p> for(k=0;k<8;k++)</p><p><b> {</b></p
51、><p> temp=temp<<1;</p><p><b> scl=0;</b></p><p><b> delay();</b></p><p><b> sda=CY;</b></p><p><b> delay
52、();</b></p><p><b> scl=1;</b></p><p><b> delay();</b></p><p><b> }</b></p><p><b> scl=0;</b></p><p&
53、gt;<b> delay();</b></p><p><b> sda=1;</b></p><p><b> delay();</b></p><p><b> }</b></p><p> uchar read()//讀一個字節(jié)的程序&
54、lt;/p><p><b> {</b></p><p> uchar i,m;</p><p><b> scl=0;</b></p><p><b> delay();</b></p><p><b> sda=1;</b>
55、;</p><p><b> delay();</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> scl=1;</b></p><p><b> dela
56、y();</b></p><p> m=(m<<1)|sda;</p><p><b> scl=0;</b></p><p><b> delay();</b></p><p><b> }</b></p><p>&
57、lt;b> return m;</b></p><p><b> }</b></p><p> void delay1(int x)//延時程序</p><p><b> {</b></p><p> uchar a,b;</p><p> f
58、or(x=a;a>0;a--)</p><p> for(b=100;b>0;b--);</p><p><b> }</b></p><p> void write_add(uchar address,uchar date)//寫程序</p><p><b> {</b>&l
59、t;/p><p><b> start();</b></p><p> write(0xa0);</p><p><b> reply();</b></p><p> write(address);</p><p><b> reply();</b>
60、;</p><p> write(date);</p><p><b> reply();</b></p><p><b> stop();</b></p><p><b> }</b></p><p> uchar read_add(ucha
61、r address)//讀程序</p><p><b> {</b></p><p> uchar dat;</p><p><b> start();</b></p><p> write(0xa0);</p><p><b> reply();<
62、;/b></p><p> write(address);</p><p><b> reply();</b></p><p><b> start();</b></p><p> write(0xa1);</p><p><b> reply();
63、</b></p><p> dat=read();</p><p><b> stop();</b></p><p> return dat;</p><p><b> }</b></p><p><b> AD轉(zhuǎn)換程序:</b>
64、</p><p> sbit wr=P3^6;</p><p> sbit rd=P3^7;</p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> uint AD()
65、 //AD轉(zhuǎn)換函數(shù)</p><p><b> {</b></p><p><b> uchar AD;</b></p><p><b> wr=0;</b></p><p><b> delay(2);</b><
66、;/p><p><b> wr=1;</b></p><p> delay(20);</p><p><b> rd=0;</b></p><p><b> delay(2);</b></p><p><b> P1=0xff;</
67、b></p><p><b> AD=P1;</b></p><p><b> rd=1;</b></p><p> return AD; </p><p><b> }</b></p><p> 算數(shù)平均濾波子程序:</p>
68、<p> #define N 8//定義采樣次數(shù)</p><p> uchar value_buf[N];</p><p> uchar lvbo()//濾波函數(shù)</p><p><b> {</b></p><p><b> uchar i;</b></p>
69、<p> uchar count;</p><p> int sum=0;</p><p> value_buf[i++]=AD; //獲取AD轉(zhuǎn)換結(jié)果,并計算累加和</p><p><b> if(i==N)</b></p><p><b> i=0;</b>
70、;</p><p> for(count=0;count<N;count++)</p><p> sum+=value_buf[count];</p><p> return (uchar)(sum/N);</p><p><b> }</b></p><p> 熱電阻的非線性校正
71、算法:</p><p> 熱電阻Cu50的阻值與溫度的關(guān)系,并非是絕對的線性關(guān)系,因此為了使儀表誤差較小應(yīng)該對熱電阻進(jìn)行非線性校正。在1mA的恒定電流下,</p><p> 熱電阻的電壓與溫度變化的關(guān)系如下表所示:</p><p><b> 程序:</b></p><p><b> uint var;&
72、lt;/b></p><p> uint code Rtable[]={50000 52144 54285 56426 58565 60704 64842 64981 67119 69259 71400 73542 75687 77833}//熱電阻的電壓值,每隔10度對應(yīng)一個電壓</p><p><b> //值</b></p><p&
73、gt; void tab()//查表子函數(shù)</p><p><b> {</b></p><p> uint v1=0,max,min,min,mid,j;</p><p> v1=AD*1000; //AD采樣值擴(kuò)大1000倍,因?yàn)楸碇须妷褐禂U(kuò)大//了1000倍</p><p> min=0;max=
74、13;//給出表格的初始元素序號與最后元素的序號</p><p> while(1)//開始查表</p><p><b> {</b></p><p> mid=(max+min)/2;//中心元素位置</p><p> if(Rtable[mid]=v1) var=mid*10;break;//中心元素等
75、于查表得元素</p><p><b> //計算相應(yīng)溫度</b></p><p> if(Rtable[mid]>v1) max=mid;</p><p> else min=mid;</p><p> if((max-min)<=1)//多次循環(huán)后,獲得v1值對應(yīng)的下限值元素序//號與上限元素序
76、號</p><p><b> {</b></p><p> j=( Rtable[max]-Rtable[min])/10;//表中相鄰兩值對應(yīng)溫度相差//10度</p><p> j=(v1-Rtable[min])/j; //得到max-min之間的電壓/度</p><p> var=10*
77、min+j; //獲得總溫度</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&l
78、t;p><b> 按鍵子程序:</b></p><p> uchar ba,sh,ge,sf,m;</p><p> sbit set=P3^3;</p><p> sbit xuan=P2^2;</p><p> sbit jia=P2^3;</p><p> sbit jia
79、n=P2^4;</p><p> void key()//按鍵函數(shù)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> if(xuan==0) //按下數(shù)碼管選擇鍵</p>
80、<p><b> {</b></p><p> delay(10); //延時消抖</p><p> if(xuan==0) //再次確認(rèn)是否按下</p><p><b> {</b></p><p> i=
81、i+0x10; //位選值加1</p><p> if(i==0xcf)</p><p><b> i=0x8f;</b></p><p> P2=P2&i;//送入位選</p><p> while(!xuan);//等待松手</p><p> w
82、hile((jia!=0)&&(jian!=0)&&(set!=0)&&(xuan!=0))//數(shù)碼管閃爍</p><p><b> {</b></p><p><b> P0=0xff;</b></p><p> delay(20);</p><p
83、><b> P0=0x00;</b></p><p> delay(20);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if
84、(jia==0)//加數(shù)子程序</p><p><b> {</b></p><p> delay(10);</p><p> if(jia==0)</p><p><b> {</b></p><p> switch (i)
85、 //選擇要加數(shù)的數(shù)碼管</p><p><b> {</b></p><p> case 0x8f:{</p><p><b> ba++;</b></p><p> if(ba==10)</p><p><b> ba=0;</b
86、></p><p> P0=table[ba];</p><p> while(!jia);</p><p><b> }break;</b></p><p> case 0x9f:{</p><p><b> sh++;</b></p><
87、;p> if(sh==10)</p><p><b> ba=0;</b></p><p> P0=table[sh];</p><p> while(!jia);</p><p><b> } break;</b></p><p> case 0xaf:{
88、</p><p><b> ge++;</b></p><p> if(ge==10)</p><p><b> ge=0;</b></p><p> P0=table1[ge];</p><p> while(!jia);</p><p>
89、<b> }break;</b></p><p> case 0xbf:{</p><p><b> sf++;</b></p><p> if(sf==10)</p><p><b> sf=0;</b></p><p> P0=table
90、[sf];</p><p> while(!jia);</p><p><b> } break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>&
91、lt;/p><p> if(jian==0)//減數(shù)子程序</p><p><b> {</b></p><p> delay(10);</p><p> if(jian==0)</p><p><b> {</b></p><p> swi
92、tch (i)//選擇要減數(shù)的數(shù)碼管</p><p><b> {</b></p><p> case 0x8f:{</p><p><b> ba--;</b></p><p><b> if(ba==0)</b></p><p><b
93、> ba=9;</b></p><p> P0=table[ba];</p><p> while(!jian);</p><p><b> }break;</b></p><p> case 0x9f:{</p><p><b> sh--;</b&
94、gt;</p><p><b> if(sh==0)</b></p><p><b> sh=9;</b></p><p> P0=table[sh];</p><p> while(!jian);</p><p><b> }break;</b&g
95、t;</p><p> case 0xaf:{</p><p><b> ge--;</b></p><p><b> if(ge==0)</b></p><p><b> ge=9;</b></p><p> P0=table1[ge];&l
96、t;/p><p> while(!jian);</p><p><b> }break;</b></p><p> case 0xbf:{</p><p><b> sf--;</b></p><p><b> if(sf==0)</b></
97、p><p><b> sf=9;</b></p><p> P0=table[sf];</p><p> while(!jian);</p><p><b> }break;</b></p><p><b> }</b></p>&l
98、t;p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void anjian(uint hial,uint loal,uint p,uint sv)//按鍵程序</p><p><b&g
99、t; {</b></p><p> if(m==1)//設(shè)定設(shè)定值</p><p><b> {</b></p><p><b> key();</b></p><p> sv=ba*1000+sh*100+ge*10+sf;</p><p> di
100、splay2(0x00,0x6d,0x1c,0x00);</p><p><b> }</b></p><p> if(m==2)//設(shè)定上限值</p><p><b> {</b></p><p><b> key();</b></p><p&g
101、t; hial=ba*1000+sh*100+ge*10+sf;</p><p> display2(0x76,0x06,0x77,0x38);</p><p><b> }</b></p><p> if(m==3)//設(shè)定下限值</p><p><b> {</b></p>
102、;<p><b> key();</b></p><p> loal=ba*1000+sh*100+ge*10+sf;</p><p> display2(0x38,0x5c,0x77,0x38);</p><p><b> }</b></p><p> if(m==4)
103、//設(shè)定比例帶</p><p><b> {</b></p><p><b> key();</b></p><p> p=ba*1000+sh*100+ge*10+sf;</p><p> display2(0x00,0x73,0x00,0x00);</p><p>
104、;<b> }</b></p><p> if(m==5)//設(shè)定退出</p><p><b> m=0;</b></p><p><b> }</b></p><p> void setjian() interrupt 2 //按下功能選擇鍵觸發(fā)中斷通
105、過記錄中斷//次數(shù)改變要設(shè)定的功能</p><p><b> {</b></p><p> delay(10);</p><p> while(!set);</p><p><b> m++;</b></p><p><b> }</b><
106、;/p><p><b> 報警子程序:</b></p><p> sbit fengmingqi=P2^0;</p><p> sbit led1=P3^1;</p><p> sbit led2=P3^0;</p><p> void baojing()</p><p&
107、gt;<b> {</b></p><p> if(var>hial)</p><p><b> {</b></p><p> fengmingqi=0;</p><p><b> led1=0;</b></p><p><b>
108、; }</b></p><p> if(var<loal)</p><p><b> {</b></p><p> fengmingqi=0;</p><p><b> led2=0;</b></p><p><b> }</b&
109、gt;</p><p><b> }</b></p><p><b> PID子程序:</b></p><p> uint e,out,outm,k;</p><p> void pid()</p><p><b> {</b></p&g
110、t;<p><b> e=var-sv;</b></p><p><b> k=1/p;</b></p><p> out=k*e+outm;</p><p> if(out>outm)</p><p><b> out=outm;</b><
111、/p><p><b> if(out<0)</b></p><p><b> out=0;</b></p><p><b> }</b></p><p><b> 主程序:</b></p><p> #include&l
112、t;reg51.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,</p><p> 0x7
113、f,0x6f};</p><p> uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,</p><p> 0xff,0xef,};</p><p> uint code Rtable[]={50000 52144 54285 56426 58565 60704 64842 64981 67
114、119 69259 71400 73542 75687 77833};</p><p> uchar displaytime, sampletime,controltime, ba,sh,ge,sf,m;</p><p> uint var,e,out,out0,outm,k,ci;</p><p> sbit sda=P3^4;</p><
115、;p> sbit scl=P3^5;</p><p> sbit wr=P3^6;</p><p> sbit rd=P3^7;</p><p> sbit set=P3^3;</p><p> sbit xuan=P2^2;</p><p> sbit jia=P2^3;</p>&l
116、t;p> sbit jian=P2^4;</p><p> sbit fengmingqi=P2^0;</p><p> sbit jiare=P2^1;</p><p> sbit led1=P3^1;</p><p> sbit led2=P3^0;</p><p> void main()&l
117、t;/p><p><b> { </b></p><p> uchar gao,di;</p><p> TMOD=0x22;</p><p><b> TH0=156;</b></p><p><b> TL0=156;</b></p&
118、gt;<p><b> TH1=200;</b></p><p><b> TL1=200;</b></p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b>
119、ET1=1;</b></p><p><b> TR0=1;</b></p><p> gao=uchar read_add(1);</p><p> di=uchar read_add(2);</p><p> sv=gao*100+di;</p><p> gao=uch
120、ar read_add(3);</p><p> di=uchar read_add(4);</p><p> hial=gao*100+di;</p><p> gao=uchar read_add(5);</p><p> di=uchar read_add(6);</p><p> loal=gao*1
121、00+di;</p><p> gao=uchar read_add(7);</p><p> di=uchar read_add(8);</p><p> p=gao*100+di;</p><p><b> while(1)</b></p><p><b> {</b
122、></p><p> anjian(hial,loal,p,sv);</p><p> write_add(0x01,sv/100);</p><p> write_add(0x02,sv%100);</p><p> write_add(0x03,hial/100);</p><p> write_a
123、dd(0x04,hial%100);</p><p> write_add(0x05,loal/100);</p><p> write_add(0x06,loal%100);</p><p> write_add(0x07,p100);</p><p> write_add(0x08,p%100);</p><p
124、> ba=sv/1000;</p><p> sh=sv%1000/100;</p><p> ge=sv%100/10;</p><p><b> sf=sv%10</b></p><p> display1(tsble[ba],table[sh],table1[ge],table[sf]);</
125、p><p> if(displaytime==1)</p><p><b> {</b></p><p> ba=var/1000;</p><p> sh=var%1000/100;</p><p> ge=var%100/10;</p><p><b>
126、 sf=var%10</b></p><p> display2(tsble[ba],table[sh],table1[ge],table[sf]);</p><p> displaytime=0;</p><p><b> }</b></p><p> if(sampletime==1)</
127、p><p><b> {</b></p><p> uint AD();</p><p> uchar lvbo();</p><p><b> tab();</b></p><p> sampletime=0;</p><p><b>
128、; }</b></p><p> If(controltime==1)</p><p><b> {</b></p><p><b> pid();</b></p><p> baojing();</p><p> controltime=0; <
129、;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void timer0() interrupt 1</p><p><b> {</b><
130、;/p><p> static uint n,m,k;</p><p><b> n++;</b></p><p><b> m++;</b></p><p><b> k++;</b></p><p><b> h++;</b&g
131、t;</p><p><b> if(n=100)</b></p><p><b> {</b></p><p><b> n=0;</b></p><p> displaytime=1;</p><p><b> }</b&g
132、t;</p><p> if(m=5000)</p><p><b> {</b></p><p><b> m=0;</b></p><p> displaytime=1;</p><p><b> }</b></p><
133、p> if(k=5000)</p><p><b> {</b></p><p><b> k=0;</b></p><p> controltime=1;</p><p><b> }</b></p><p><b> }&
134、lt;/b></p><p> void intr0 interrupt 0</p><p><b> {</b></p><p><b> TR1=1;</b></p><p><b> jiare=1;</b></p><p><
135、b> }</b></p><p> void setjian() interrupt 2 </p><p><b> {</b></p><p> delay(10);</p><p> while(!set);</p><p><b> m++
136、;</b></p><p><b> }</b></p><p> void tim1 interrupt 3</p><p><b> {</b></p><p><b> ci++;</b></p><p> if(ci==18
137、0-(180*out/outm))</p><p><b> {</b></p><p><b> ci=0;</b></p><p><b> jiare=0;</b></p><p><b> } </b></p><p&g
138、t;<b> }</b></p><p><b> 課程設(shè)計總結(jié):</b></p><p> 通過這次課程設(shè)計,我不只是僅僅簡單的設(shè)計出電阻爐溫度控制系統(tǒng),我還加深了對單片機(jī)硬件系統(tǒng)和微型計算機(jī)控制系統(tǒng)的理解,此外我對C語言有了更深刻的理解,更進(jìn)一步了解了如何用C語言編寫程序,以及如何用Altium designer繪制電路原理圖和系
139、統(tǒng)的PCB圖。</p><p> 在這次課程設(shè)計的過程中,我遇到過許多次失敗的考驗(yàn),比如說對溫度控制系統(tǒng)的不太了解等,這些都增加了課程設(shè)計的難度。這次課程設(shè)計更鍛煉了我發(fā)現(xiàn)問題,解決問題的能力。我在這次課程設(shè)計上的收獲不僅僅對于單片機(jī)這一門課有幫助,這些對于其他專業(yè)課乃至以后的學(xué)習(xí)、生活、工作都有極大的幫助。</p><p> 總之這次課程設(shè)計不是簡簡單單的一次課程設(shè)計,它也是我的一次
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能儀器設(shè)計基礎(chǔ)課程設(shè)計_單片機(jī)原理及應(yīng)用課程設(shè)計x
- 智能儀器課程設(shè)計
- 課程設(shè)計--智能儀器設(shè)計
- 智能儀器課程設(shè)計
- 智能儀器課程設(shè)計
- 橋梁基礎(chǔ)課程設(shè)計
- 橋梁基礎(chǔ)課程設(shè)計
- 樁基礎(chǔ)課程設(shè)計
- 樁基礎(chǔ)課程設(shè)計
- 樁基礎(chǔ)課程設(shè)計
- 樁基礎(chǔ)課程設(shè)計
- web基礎(chǔ)課程設(shè)計
- 智能儀器課程設(shè)計報告
- 智能儀器設(shè)計課程設(shè)計報告
- 機(jī)械設(shè)計基礎(chǔ)課程設(shè)計
- 機(jī)械設(shè)計基礎(chǔ)課程設(shè)計
- 機(jī)械設(shè)計基礎(chǔ)課程設(shè)計
- 程序設(shè)計基礎(chǔ)課程設(shè)計
- 機(jī)械設(shè)計基礎(chǔ)課程設(shè)計
- 預(yù)制樁基礎(chǔ)課程設(shè)計
評論
0/150
提交評論