南郵綜合設(shè)計報告(課程設(shè)計)proteus和Keil_第1頁
南郵綜合設(shè)計報告(課程設(shè)計)proteus和Keil_第2頁
南郵綜合設(shè)計報告(課程設(shè)計)proteus和Keil_第3頁
南郵綜合設(shè)計報告(課程設(shè)計)proteus和Keil_第4頁
南郵綜合設(shè)計報告(課程設(shè)計)proteus和Keil_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄一、課題1:數(shù)碼管學(xué)號滾動顯示41.課題任務(wù)要求及技術(shù)指標(biāo)41.1設(shè)計任務(wù)41.2設(shè)計要求42.課題分析及設(shè)計思路42.1功能分析42.2實現(xiàn)思路42.3難點描述43.系統(tǒng)設(shè)計(建模)43.1硬件框圖43.2軟件框圖43.3電路圖53.4元件清單53.5源程序64.仿真結(jié)果與結(jié)果分析7二、課題2:led8彩燈花樣顯示71.課題任務(wù)要求及技術(shù)指標(biāo)71.1設(shè)計任務(wù)71.2設(shè)計要求72.課題分析及設(shè)計思路72.1功能分析82.3難點描述83.系統(tǒng)設(shè)計(建模)83.1硬件框圖83.2軟件框圖83.3電路圖83.4元件清單93.5源程序94.仿真結(jié)果與結(jié)果分析10三、課題3:數(shù)字電子鐘111.課題任

2、務(wù)要求及技術(shù)指標(biāo)111.1設(shè)計任務(wù)111.2設(shè)計要求112.課題分析及設(shè)計思路112.1功能分析112.2實現(xiàn)思路122.3難點描述123.系統(tǒng)設(shè)計(建模)123.1硬件設(shè)計123.2軟件設(shè)計流程圖133.3電路圖143.4元件清單153.5源程序154.仿真結(jié)果與結(jié)果分析19四、課題6:函數(shù)發(fā)生器201.課題任務(wù)要求及技術(shù)指標(biāo)201.1設(shè)計任務(wù)201.2設(shè)計要求202.課題分析及設(shè)計思路202.1功能分析202.2實現(xiàn)思路202.3難點描述203.系統(tǒng)設(shè)計(建模)203.1硬件設(shè)計203.2軟件流程圖213.3電路圖263.4源程序264.仿真結(jié)果與結(jié)果分析32五、課題12:簡易溫度計341

3、.課題任務(wù)要求及技術(shù)指標(biāo)341.1設(shè)計任務(wù)341.2設(shè)計要求342.課題分析及設(shè)計思路342.1功能分析342.2實現(xiàn)思路342.3難點描述343.系統(tǒng)設(shè)計(建模)343.1硬件設(shè)計343.2軟件流程圖353.3電路圖373.4源程序374.仿真結(jié)果與結(jié)果分析46六、課程設(shè)計小結(jié)47一、課題1:數(shù)碼管學(xué)號滾動顯示1.課題任務(wù)要求及技術(shù)指標(biāo)1.1設(shè)計任務(wù):要求學(xué)生在六個數(shù)碼管滾動顯示自己的學(xué)號(六位),每隔一定時間循環(huán)移位一次,學(xué)號為奇數(shù)則左移,學(xué)號為偶數(shù)則右移。間隔時間可由開關(guān)選擇1秒,2秒,3秒和4秒。1.2設(shè)計要求:(1)給出正確的原理圖;(2)給出正確的程序,并結(jié)合原理圖給出相應(yīng)結(jié)果。2

4、.課題分析及設(shè)計思路2.1功能分析:數(shù)碼管滾動顯示學(xué)號,可控制間隔時間。2.2實現(xiàn)思路:1、動態(tài)數(shù)碼顯示技術(shù);如何進行動態(tài)掃描,由于一次只能讓一個數(shù)碼管顯示,因此,要顯示6位的數(shù)據(jù),必須經(jīng)過讓數(shù)碼管一個一個輪流顯示才可以,同時每個數(shù)碼管顯式的時間大約在1ms到4ms之間,所以為了保證正確顯示,必須每隔1ms,就得刷新一個數(shù)碼管。而這刷新時間我們采用單片機的定時/計數(shù)器來控制,每定時1ms對數(shù)碼管刷新一次。2、在進行數(shù)碼顯示的時候,要對顯示單元開辟6個顯示緩沖區(qū),每個顯示緩沖區(qū)裝有顯示的不同數(shù)據(jù)即可。2.3難點描述:對延時的精度要求比較高。3.系統(tǒng)設(shè)計(建模)3.1硬件框圖鍵盤復(fù)位電 路stc8

5、9c51數(shù)碼管顯示震蕩電 路3.2軟件框圖開 始數(shù)碼管顯示學(xué)號讀取鍵值根據(jù)鍵值命令數(shù)碼管延時滾動執(zhí)行結(jié)束3.3電路圖3.4元件清單器材規(guī)格數(shù)量單片機at89c511數(shù)碼管7seg-mpx6-ca-blue1按鍵button2晶振12mhz1瓷片電容22pf2電解電容10uf1電阻2202電阻10k93.5源程序#include #define uint unsigned int #define uchar unsigned charuchar code dis_seg7=0xc0,0xa4,0xc0,0xa4,0xc0,0xf9;/設(shè)置學(xué)號,共陽字形碼uchar code dis_bit6=0

6、x3e,0x3d,0x3b,0x37,0x2f,0x1f;/六位數(shù)碼管位選sbit k1=p10;sbit k2=p11;void delay1ms(uint i) uint j;while(i-) for(j = 0; j 110; j+); void main(void) uchar cnt, ttt;uchar disp = 0, 1, 2, 3, 4, 5,;while(1) for(ttt = 0; ttt 100; ttt+) for(cnt = 0; cnt 6; cnt+) /點亮數(shù)碼管0-5 p2 = 0;p0 = dis_seg7dispcnt;p2 = dis_bitcn

7、t;if(k1=1&k2=1)delay1ms(1);elseif(k1=0&k2=1)delay1ms(2);elseif(k1=1&k2=0)delay1ms(3);elseif(k1=0&k2=0)delay1ms(4);ttt = disp0;disp0 = disp1;disp1 = disp2;disp2 = disp3;disp3 = disp4;disp4 = disp5;disp5 = ttt; 4.仿真結(jié)果與結(jié)果分析當(dāng)按鍵k1、k2彈起時,學(xué)號延時1s滾動;當(dāng)k1按下,k2彈起時,學(xué)號延時2s滾動;當(dāng)k1彈起,k2按下時,學(xué)號延時3s滾動;當(dāng)k1、k2按下時,學(xué)號延時4s滾

8、動。二、課題2:led8彩燈花樣顯示1.課題任務(wù)要求及技術(shù)指標(biāo)1.1設(shè)計任務(wù):要求學(xué)生設(shè)計出led8彩燈在兩個撥碼開關(guān)的控制下每隔1秒,2秒,3秒和4秒間隔點亮。1.2設(shè)計要求:(1)給出正確的原理圖;(2)給出正確的程序,并結(jié)合原理圖給出相應(yīng)結(jié)果。2.課題分析及設(shè)計思路2.1功能分析:彩燈流水顯示,間隔時間可控。2.2實現(xiàn)思路:當(dāng)51單片機的p2口有高電平輸出時,相應(yīng)的發(fā)光二極管就會點亮。應(yīng)用這一原理我們可以容易的點亮一個數(shù)碼管,例如令p2口輸出0000 0001時d1就會點亮。若再把0000 0001向左循環(huán)一位,利用p2口輸出,就會點亮d2。在發(fā)光二極管兩次點亮的間隔中加延時程序,讓每次

9、點亮停留一段時間,像這樣人眼就可以看到“流水” 的現(xiàn)象。2.3難點描述: 移位與延時之間的關(guān)聯(lián)。3.系統(tǒng)設(shè)計(建模)3.1硬件框圖鍵盤復(fù)位電 路stc89c51流水燈電 路震蕩電 路3.2軟件框圖開 始數(shù)碼管顯示學(xué)號讀取鍵值根據(jù)鍵值命令數(shù)碼管延時滾動執(zhí)行結(jié)束 3.3電路圖3.4元件清單器材規(guī)格數(shù)量單片機at89c511發(fā)光二極管藍+紅+黃+綠2播碼開關(guān)dipsw_21晶振11.0592mhz1瓷片電容22pf2電解電容10uf1電阻2208電阻10k13.5源程序#include #include #define uchar unsigned char #define uint unsigne

10、d int sbit k1=p10;sbit k2=p11;/延時void delayms(uint x) uchar i; while(x-) for(i=0;i120;i+); /主程序void main() uchar i; p2=0x80; while(1) for(i=0;i7;i+) p2=_crol_(p2,1); /p2 的值向左循環(huán)移動if(k1=1&k2=1)delayms(400);elseif(k1=0&k2=1)delayms(800);elseif(k1=1&k2=0)delayms(1200);elseif(k1=0&k2=0)delayms(1600); 4.仿

11、真結(jié)果與結(jié)果分析啟動程序,二極管由d1到d8逐個點亮。播碼開關(guān)播向1,1時,點亮間隔為1s;播碼開關(guān)播向0,1時,點亮間隔為2s;播碼開關(guān)播向1,0時,點亮間隔為3s;播碼開關(guān)播向0,0時,點亮間隔為4s。三、課題3:數(shù)字電子鐘1.課題任務(wù)要求及技術(shù)指標(biāo)1.1設(shè)計任務(wù):運用單片機的中斷技術(shù),led顯示技術(shù)和鍵盤掃描技術(shù),設(shè)計一實用的多功能電子鐘。1.2設(shè)計要求:(1)給出正確的原理圖;(2)給出正確的程序,并結(jié)合原理圖給出相應(yīng)結(jié)果。2.課題分析及設(shè)計思路2.1功能分析:數(shù)字電子鐘是一個將“ 時”,“分”,“秒”顯示于人的視覺器官的計時裝置。它的計時周期為24小時,顯示滿刻度為23時59分59秒

12、,另外還有校時功能。2.2實現(xiàn)思路:8個數(shù)碼管的段選接到單片機的p0口,位選接到單片機的p2口。數(shù)碼管按照數(shù)碼管動態(tài)顯示的工作原理工作,將標(biāo)準(zhǔn)秒信號送入“秒單元”,“秒單元”采用60進制計數(shù)器,每累計60秒發(fā)出一個“分脈沖”信號,該信號將作為“分單元”的時鐘脈沖?!胺謫卧币膊捎?0進制計數(shù)器,每累計60分鐘,發(fā)出一個“時脈沖”信號,該信號將被送到“時單元”。“時單元”采用24進制計時器,可實現(xiàn)對一天24小時的累計。顯示電路將“時”、“分”、“秒”通過七段顯示器顯示出來。校時電路時用來對“時”、“分”、“秒”顯示數(shù)字進行校對調(diào)整,按一下s,秒單元就加1 ,按一下m,分就加1,按一下h,時就加1

13、。2.3難點描述:按鍵校對時間時容易抖動,抖動問題不解決就會引起對閉合鍵的識別。3.系統(tǒng)設(shè)計(建模)3.1硬件設(shè)計(1)最小系統(tǒng)設(shè)計單片機的最小系統(tǒng)是由電源、復(fù)位、晶振、/ea=1組成(2)數(shù)碼管顯示電路數(shù)碼管使用條件:a、段及小數(shù)點上加限流電阻 b、使用電壓:段:根據(jù)發(fā)光顏色決定; 小數(shù)點:根據(jù)發(fā)光顏色決定。(3)鍵盤控制電路當(dāng)用手按下一個鍵時,如圖3-8所示,往往按鍵在閉合位置和斷開位置之間跳幾下才穩(wěn)定到閉合狀態(tài)的情況;在釋放一個鍵時,也回會出現(xiàn)類似的情況。這就是抖動。抖動的持續(xù)時間隨鍵盤材料和操作員而異,不過通??偸遣淮笥?0ms。很容易想到,抖動問題不解決就會引起對閉合鍵的識別。用軟件

14、方法可以很容易地解決抖動問題,這就是通過延遲10ms來等待抖動消失,這之后,在讀入鍵盤碼。3.2軟件設(shè)計流程圖n24小時到?分單元清零,時單元加1nnnyy時單元清零時間顯示中斷返回開始一秒時間到?60秒時間到?60分鐘到?秒單元加1秒單元清零,分單元加1yy3.3電路圖3.4元件清單器材規(guī)格數(shù)量單片機at89c511數(shù)碼管7seg-mpx8-cc-blue1按鍵button3晶振11.0592mhz1瓷片電容22pf2電解電容10uf1電阻10k83.5源程序#include sbit ksec=p30; sbit kmin=p31; sbit khour=p32; unsigned cha

15、r secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0; unsigned int num=0,sec=0,min=0,hour=0; unsigned char code table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; void delay(unsigned int); void keyscan(); void display();main()tmod=0x01; th0=(65536-50000)/256; tl0=(65536-50000)%256; ea=1;et

16、0=1;tr0=1; while(1) display(); keyscan(); void delay(unsigned int z) unsigned int x,y; for(x=z;x0;x-) for(y=110;y0;y-);/定時器中斷程序void time0()interrupt 1 num+; th0=(65536-50000)/256; tl0=(65536-50000)%256; /led顯示程序void display() if(num=20) num=0; sec+; if(sec=60) sec=0; min+; if(min=60) min=0; hour+; i

17、f(hour=24) hour=0; min=0; sec=0; secge=sec%10; secshi=sec/10; minge=min%10; minshi=min/10;hourge=hour%10; hourshi=hour/10; p2=0xfe; p0=tablesecge; delay(5); p2=0xfd; p0=tablesecshi;delay(5); p2=0xfb; p0=0x40; delay(5); p2=0xf7; p0=tableminge; delay(5); p2=0xef; p0=tableminshi; delay(5); p2=0xdf;p0=0

18、x40; delay(5); p2=0xbf; p0=tablehourge;delay(5); p2=0x7f; p0=tablehourshi; delay(5); /按鍵控制子程序void keyscan() if(ksec=0) delay(10); if(ksec=0) sec+; if(sec=60) sec=0; while(ksec=0) display(); if(kmin=0) delay(10); if(kmin=0) min+; if(min=60) min=0; while(kmin=0)display(); if(khour=0) delay(10);if(khou

19、r=0) hour+; if(hour=24) hour=0; while(khour=0) display(); 4.仿真結(jié)果與結(jié)果分析走時:默認(rèn)為走時狀態(tài),按24小時制分別顯示“時時-分分-秒秒”,有2個“-”動態(tài)顯示,時間會按實際時間以秒為最少單位變化。走時調(diào)整:按s對秒進行調(diào)整,按一下加一秒;按m對分進行調(diào)整,按一下加一分;按h對時進行調(diào)整,按一下加一小時,從而達到快速設(shè)定時間的目的。四、課題6:函數(shù)發(fā)生器1.課題任務(wù)要求及技術(shù)指標(biāo)1.1設(shè)計任務(wù):采用數(shù)字合成技術(shù)和d/a轉(zhuǎn)換器件,實現(xiàn)多種信號波形的輸出,設(shè)計一臺實用的函數(shù)信號發(fā)生器。1.2設(shè)計要求:(1)給出正確的原理圖;(2)給出正

20、確的程序,并結(jié)合原理圖給出相應(yīng)結(jié)果。2.課題分析及設(shè)計思路2.1功能分析:系統(tǒng)能產(chǎn)生方波、鋸齒及正弦信號;能提供信號的頻率的顯示,能改變頻率。2.2實現(xiàn)思路:以89c51為核心,結(jié)合dac0832實現(xiàn)程序控制產(chǎn)生正弦波、鋸齒波及方波等常用的低頻信號??梢酝ㄟ^鍵盤選擇波形及增減頻率。2.3難點描述:波形的產(chǎn)生,數(shù)模轉(zhuǎn)換3.系統(tǒng)設(shè)計(建模)3.1硬件設(shè)計(1)放大電路dac0832與反相比例放大器相連,實現(xiàn)電流到電壓的轉(zhuǎn)換,因此輸出模擬信號的極性與參考電壓的極性相反,數(shù)字量與模擬量的轉(zhuǎn)換關(guān)系為 若d/a轉(zhuǎn)換器輸出為雙極性,如圖3-6所示。運算放大器b的作用是把運算放大器a的單向輸出電壓轉(zhuǎn)換成雙向輸

21、出電壓。其原理是將b的反向輸入端通過電阻r2與參考電壓vref相連,vref經(jīng)r2向b提供一個偏流i1,其電流方向與i2相反,因此運算放大器b的輸入電流為i1、i2的代數(shù)和。則d/a轉(zhuǎn)換器的總輸出電壓為: 。 因r5= r6=2 r7,所以。(2)顯示模塊 1602液晶器件 3.2軟件流程圖(1)主程序流程圖主程序開始 開轉(zhuǎn)換器的dac寄存器關(guān)閉輸入輸入寄存器初始顯示子程序初始waveform=0設(shè)置定時器0和外部中斷while(1)循環(huán)等待主程序主要設(shè)置了d/a轉(zhuǎn)換器件dac0832的工作模式,定義了dac0832數(shù)據(jù)端口。調(diào)用了顯示初始子程序,設(shè)置了定時器工作模式及定時中斷和外部中斷。(2

22、)定時中斷程序流程圖定時器中斷程序開始waveform=2waveform=2設(shè)置th,tl寄存器waveform=0否waveform=1是正弦波輸出子程序否是鋸齒波輸出子程序方波輸出子程序返回定時中斷的作用是用來改變相應(yīng)波形的頻率,通過改變th,tl的值就可以改變定時時間,從而改變相應(yīng)波形的頻率。waveform的值代表不同的波形,waveform=0代表正弦波,waveform=1代表鋸齒波,waveform=2代表方波,根據(jù)waveform值調(diào)用對應(yīng)的波形輸出子程序。(3)外部中斷按鍵子程序流程圖外部中斷程序開始關(guān)總中斷p3.6=0獲取p3口高四位p3.4=0否p3.5=0wavefo

23、rm+是否是p3.6=06.6是wavefreqwaveform+wavefreqwaveform- 設(shè)定t_temp取值方式求得當(dāng)前頻率值顯示當(dāng)前率值及對應(yīng)的波形形式開總中斷與定時器中斷 返回外部中斷是由按鍵引起的p3.2引腳下降沿觸發(fā)的,波形切換、頻率增減都是通過外部中斷和定時中斷相結(jié)合完成的,外部中斷程序中只是改變了相應(yīng)的參數(shù)或中間值(如波形形式waveform及相應(yīng)波形頻率wavefreqwaveform和定時器0的定時初值寄存器的中間值t_temp)另外外部中斷程序還對波形的頻率做了數(shù)據(jù)處理并送到液晶屏顯示。(4)正弦波子程序流程圖正弦波子程序dadate=sine_tabwavec

24、ountwavecount+wavecount255 否 開dac0832輸入寄存器wavecount=0是關(guān)dac0832輸入寄存器返回正弦波主要是通過單片機向d/a轉(zhuǎn)換器dac0832輸送8位二進制數(shù)產(chǎn)生的,本方案選取的256個8位二進制數(shù)存放在數(shù)組sine_tab,中wavecount的作用就是抽點計數(shù)范圍是0255,本方案中dac0832工作在單緩沖狀態(tài),dac寄存器處于直通狀態(tài),只要在相應(yīng)的時間打開和關(guān)閉輸入寄存器就能完成數(shù)據(jù)輸送。(5)三角波子主程序流程圖三角波子程序dadate=sawtooth_tabwavecountwavecount+wavecount63否是開dac083

25、2輸入寄存器wavecount=0關(guān)dac0832輸入寄存器返回三角波的產(chǎn)生方法以正弦波類似都是通過取點來產(chǎn)生的,本方案取了64個點,全部存放在sawtooth_tabwavecount中。(6)方波子程序流程圖方波子程序 judge=judgejudge=1否 dadate=0xff 是dadate=0x00開dac0832輸入寄存器關(guān)dac0832輸入寄存器返回(7)初始顯示子程序流程圖初始顯示子程序方波子程序初始化lcd在第一行顯示select wave在第二行顯示press no.1 key!返回方波子程序3.3電路圖3.4源程序#include#define uchar unsign

26、ed char#define uint unsigned int#define dadata p0sbit da_s1= p20;sbit da_s2= p21; sbit key= p32;uchar wavecount; uchar thtemp,tltemp;uchar judge=1; uchar waveform; uchar code freq_unit3=10,50,200;uchar idata wavefreq3=1,1,1; uchar code lcd_hang1=sine wave sawtooth wave square wave select wave: press

27、 no.1 key! ;uchar idata lcd_hang216=f= hz ;uchar code waveth= 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,0xfc,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xf6,0xfb,0xfd,0xfb,0xfe,0xff,0xff,0xff,0xff,0xff;uchar code wavetl= 0x79,0x3d,0x7e,0x9e,0xbe,0xbf,0xc8,0xcf,0xd4,0xd9, /正弦波頻率調(diào)整中間值0xe8,0x

28、f4,0xf8,0x7a,0xc7,0xfc,0x23,0x3d,0x53,0x64,/鋸齒波頻率調(diào)整中間值0x3c,0x1e,0x8f,0x32,0xc7,0x63,0xb1,0xd8,0xec,0xf6; /方波頻率調(diào)整中間值 uchar code sawtooth_tab= 0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c,0x20,0x24,0x28,0x2c,0x30,0x34,0x38,0x3c,0x40,0x44,0x48,0x4c,0x50,0x54,0x58,0x5c,0x60,0x64,0x68,0x6c,0x70,0x74,0x78,0x7c

29、,0x80,0x84,0x88,0x8c,0x90,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb0,0xb4,0xb8,0xbc,0xc0,0xc4,0xc8,0xcc,0xd0,0xd4,0xd8,0xdc,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,; uchar code sine_tab256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2

30、,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2

31、,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x5

32、5,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0

33、x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80; void delay(uchar z) uint x,y

34、;for(x=z;x0;x-)for(y=110;y0;y-);/*void sawtooth_out()uchar i; for(i=255;i0;i-) dadata=i; da_s1=0; da_s1=1; */void sawtooth_out() dadata=sawtooth_tabwavecount+;if(wavecount64) wavecount=0;da_s1=0;da_s1=1; void sine_out() dadata=sine_tabwavecount+;da_s1=0; da_s1=1; void square_out() judge=judge; if(ju

35、dge=1) dadata=0xff;else dadata=0x00;da_s1=0; da_s1=1; /*1602液晶的相關(guān)函數(shù)*/#define lcd_ports p1sbit rs=p22;sbit rw=p23;sbit lcden=p24;void write_com(uchar com)rs=0;/置零,表示寫指令lcden=0;lcd_ports=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)rs=1;/置1,表示寫數(shù)據(jù)(在指令所指的地方寫數(shù)據(jù))lcden=0;lcd_ports=date;

36、delay(5);lcden=1;delay(5);lcden=0;void disp_lcd(uchar addr,uchar *temp1)uchar num;write_com(addr);delay(1); /延時一會兒?for(num=0;num2) waveform=0; break; case 0xd0: /頻率按規(guī)定單位依次增加 wavefreqwaveform+; if(wavefreqwaveform10) wavefreqwaveform=1; / /*這邊要用10,因為它比=11可靠 break; / 性更高,使加數(shù)有個上限,不會一直加下去*/ case 0xb0: /

37、頻率按規(guī)定單位依次衰減 wavefreqwaveform-; if(wavefreqwaveform1) wavefreqwaveform=10; /這邊要用1,因為它比=0可靠性更高 break;thtemp=wavethwaveform*10+(wavefreqwaveform-1); /方括號中選取第幾個數(shù)后,并把該值賦給t_temptltemp=wavetlwaveform*10+(wavefreqwaveform-1); total_freq= wavefreqwaveform * freq_unitwaveform; /求輸出頻率(個數(shù)*單位) lcd_hang25=total_f

38、req%10+0x30; /在液晶中顯示個位,(0x30 在液晶顯示中表示數(shù)字0) total_freq/=10; lcd_hang24=total_freq%10+0x30; /在液晶中顯示時十位 total_freq/=10; lcd_hang23=total_freq%10+0x30; /在液晶中顯示時百位 total_freq/=10; lcd_hang22=total_freq%10+0x30; /在液晶中顯示時千位 disp_lcd(0x80,&lcd_hang1waveform*16); /在第一行顯示 disp_lcd(0xc0,lcd_hang2); /在第二行顯示ea=1;

39、 tr0=1; /開啟總中斷與定時器4.仿真結(jié)果與結(jié)果分析 圖1 鋸齒波 圖2 方波 圖3 正弦波系統(tǒng)可以改變頻率的大小,方波的頻率區(qū)間為200hz至2000hz,鋸齒波的頻率區(qū)間是10hz至100hz,正弦波的頻率區(qū)間為10hz至100hz,利用定時中斷并改變相應(yīng)的定時時間即可改變頻率的大小。五、課題12:簡易溫度計1.課題任務(wù)要求及技術(shù)指標(biāo)1.1設(shè)計任務(wù):采用溫度傳感器,采集和顯示室溫,實現(xiàn)數(shù)字溫度計功能。1.2設(shè)計要求:(1)給出正確的原理圖;(2)給出正確的程序,并結(jié)合原理圖給出相應(yīng)結(jié)果。2.課題分析及設(shè)計思路2.1功能分析: 多點測量溫度,并在數(shù)碼管上顯示,另加報警系統(tǒng)。2.2實現(xiàn)思

40、路:基于at89c51單片機的測溫系統(tǒng),并采用了數(shù)字溫度傳感器ds1621和串行總線通信系統(tǒng)。2.3難點描述: 溫度的采集以及轉(zhuǎn)化顯示。3.系統(tǒng)設(shè)計(建模)3.1硬件設(shè)計(1)數(shù)字溫度傳感器斜坡累加電路重預(yù)置比較器計數(shù)溫度低敏感振蕩器重預(yù)置電路溫度寄存器溫度低敏感振蕩器計數(shù)器=0ds1621的構(gòu)成原理框圖如圖所示,在測量溫度時使用了獨有的在線溫度測量技術(shù)。它通過在一個由對溫度高度敏感的振蕩器決定的計數(shù)周期內(nèi)對溫度低敏感的振蕩器時鐘脈沖的計數(shù)值的計算來測量溫度。ds1621在計數(shù)器中預(yù)置了一個初值,它相當(dāng)于50攝氏度。如果計數(shù)周期結(jié)束之前計數(shù)器達到0,已預(yù)置了此初值的溫度寄存器中的數(shù)字就會增加,

41、從而表明溫度高于55攝氏度。與此同時,計數(shù)器斜坡累加電路被重新預(yù)置一個值,然后計數(shù)器重新對時鐘計數(shù),直到計數(shù)值為0。通過改變增加的每1s內(nèi)的計數(shù)器的計數(shù),斜坡累加電路可以補償振蕩器的非線性誤差,以提高精度,任意溫度下計數(shù)器的值和每一斜坡累加電路的值對應(yīng)的計數(shù)次數(shù)須為已知。 ds1621通過計算可以得到0. 5攝氏度的精度,溫度輸出為9位,在發(fā)出讀溫度值請求后還會輸出兩位補償值。表2給出了所測的溫度和輸出數(shù)據(jù)的關(guān)系。這些數(shù)據(jù)可通過2線制串行口連續(xù)輸出,msb在前,lsb在后。(2)七段led數(shù)碼顯示電路3.2軟件流程圖(1)主程序的設(shè)計初始化n讀溫度數(shù)據(jù)并存儲生成地址字節(jié)1001000,循環(huán)次數(shù)

42、3延時1s以上等待結(jié)果啟動轉(zhuǎn)換向設(shè)置/狀態(tài)寄存器設(shè)置為連續(xù)工作方式生成地址字節(jié)1001000,循環(huán)次數(shù)3次地址字節(jié)加02h 循環(huán)次數(shù)減1為0?讀溫度數(shù)據(jù)并存儲及顯示地址字節(jié)加02h 循環(huán)次數(shù)減1為0?nn主程序的主要功能是負責(zé)多點溫度數(shù)據(jù)的實時采集、傳輸,處理和顯示。其程序流程如圖所示。(2)溫度計算模塊設(shè)計計算溫度子程序?qū)膁s1621中讀取的溫度值進行bcd碼的轉(zhuǎn)換運算,并進行溫度值正負的判定,其程序流程圖如圖5-2所示。 開始溫度零下?溫度值取補碼置“”標(biāo)志計算小數(shù)位溫度bcd值 計算整數(shù)位溫度bcd值 結(jié)束置“+”標(biāo)志ny3.3電路圖3.4源程序#include #include #define uchar unsigned char#define uint unsigned

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論