版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、. . . 1設(shè)計(jì)選題與任務(wù)設(shè)計(jì)題目:多功能波形發(fā)生器 任務(wù)與要求:設(shè)計(jì)一個(gè)由單片機(jī)控制的波形發(fā)生器。運(yùn)用單片機(jī)系統(tǒng)控制產(chǎn)生多種波形,這些波形包括方波、三角波、鋸齒波、正弦波等。信號(hào)發(fā)生器所產(chǎn)生的波形的頻率、幅度均可調(diào)節(jié)。并可通過軟件任意改變信號(hào)的波形。基本要求:1.產(chǎn)生方波、三角波、鋸齒波、正弦波可通過開關(guān)選擇2.波形幅值調(diào)圍80HFFH,兩檔。周期兩檔 3.有波形指示幅值周期檔顯示功能。 2系統(tǒng)概述與硬件簡(jiǎn)介隨著科技的發(fā)展和現(xiàn)代科研的需要,信號(hào)發(fā)生器已經(jīng)成為了很多行業(yè)進(jìn)行研究測(cè)試不可或缺的工具,但目前使用波形發(fā)生器大部分體積大,可靠性差,準(zhǔn)確度低。因此為了實(shí)驗(yàn)研究方便,研制一種體積小、可靠
2、性強(qiáng)、準(zhǔn)確性高的波形發(fā)生器顯得尤為重要。方案總體設(shè)計(jì)框圖 圖2.1總體電路圖見附錄2。由于proteus單片機(jī)已默認(rèn)連接復(fù)位電路、晶振電路、以與電源,所以本設(shè)計(jì)中沒有這幾個(gè)模塊的具體電路。3.軟件的實(shí)現(xiàn)系統(tǒng)軟件由主程序和外部中斷程序,定時(shí)器中斷程序以與鍵值判斷子程序,顯示子程序子程序組成,波形的產(chǎn)生主要通過定時(shí)器中斷來完成。波形的轉(zhuǎn)換通過改變波形標(biāo)志位實(shí)現(xiàn)。周期的改變可通過定時(shí)器的初值改變的方法來實(shí)現(xiàn)。幅值可通過初始值的改變而方法來實(shí)現(xiàn),由LCD1602完成顯示部分。具體如下所述3.1波形的產(chǎn)生原理將各種波形的每個(gè)周期平均分成255份,把每份的值依次發(fā)給P0口,每份的時(shí)間間隔通過開啟定時(shí)器0來
3、控制,當(dāng)定時(shí)時(shí)間到時(shí)單片機(jī)就產(chǎn)生中斷,在中斷服務(wù)程序里面通過P0口將每份的值發(fā)出去,這個(gè)值通過DAC0832轉(zhuǎn)換為模擬量。如圖3.1圖3.13.2波形的產(chǎn)生過程3.2.1正弦波的產(chǎn)生過程對(duì)正弦波的一個(gè)周期進(jìn)行等間隔的采樣,采樣次數(shù)為255次,將所采樣的數(shù)值轉(zhuǎn)化為8位二進(jìn)制數(shù)存放在數(shù)組tosin255里面。然后定義一個(gè)無符號(hào)型變量b,當(dāng)定時(shí)器產(chǎn)生一次中斷,單片機(jī)就將tosinb值賦予P0引腳,同時(shí)變量b自加1,并且當(dāng)b加到255時(shí)會(huì)自動(dòng)變?yōu)?,因?yàn)闊o符號(hào)型變量的圍是0255。程序如下:switch(fun)case0: /fun=0正弦波 P0=tosinb ;b+; break;3.2.2三角
4、波的產(chǎn)生過程 定義一個(gè)無符號(hào)變量c,每當(dāng)定時(shí)器定時(shí)時(shí)間到達(dá)時(shí),如果c值大于0而小于128,c自加1,將c值賦予P0口;如果c值大于128,則用255減去c值賦予P0口;程序如下:case1: / fun=1三角波 if(c128) P0=2*c; else P0=2*(255-c); c+; break;給賦值結(jié)果乘以2,因?yàn)椴怀?的話,鋸齒波中的變量e最大可以加到255,但三角波中賦予P0口的最大值只有128,為了讓輸出電壓幅值統(tǒng)一期間,我們對(duì)其乘以2。圖3.33.2.3方波的產(chǎn)生過程方波較其它波的產(chǎn)生原理較簡(jiǎn)單,它也是定義一個(gè)無符號(hào)字符變量d,當(dāng)定時(shí)器產(chǎn)生一次中斷則d自動(dòng)加1。當(dāng)d小于12
5、8時(shí),將0xff賦予P0口;當(dāng)d大于128時(shí),將0x00賦予P0口;程序如下:case2: /fun=2 方波 d+; if(d=128) P0=0x00; else P0=0xff; break;圖 圖3.43.2.4鋸齒波的產(chǎn)生過程鋸齒波的產(chǎn)生是定義一個(gè)變量e,每當(dāng)定時(shí)器中斷一次,則把n值賦予P0口。同時(shí)n自加1。在此處當(dāng)e加到255時(shí)則會(huì)自動(dòng)溢出變?yōu)?。程序如下:case3: /fun=3鋸齒波 if(n255) P0=n; n+; break; 圖3.53.3波形的選擇與調(diào)頻調(diào)幅的實(shí)現(xiàn) 波形的選擇與調(diào)頻調(diào)幅通過P1口按鍵選擇來實(shí)現(xiàn),具體如下所述3.3.1波形的選擇在本方案中,我們通過1
6、#按鍵進(jìn)行波形選擇。具體方法是定義一個(gè)變量fun,當(dāng)1#按鍵按下一次時(shí),其就自動(dòng)加1。其不同的數(shù)值代表不同的波形。具體如下:fun=0代表正弦波fun=1代表三角波fun=2代表方波fun=3代表鋸齒波3.3.2調(diào)幅功能的實(shí)現(xiàn) 本方案對(duì)波形的幅值可以調(diào)節(jié)為5V、4V、3V、2V、1V;在這里我們定義一個(gè)變量“chu”,并且將賦予P0端口的值5等分,也就是把那個(gè)值先除以5,再乘以變量“chu”,所以在這里只要改變變量“chu的值就可以改變輸出波形的幅值。在方案中是通過2#按鍵改變變量的。void key2(void) /選擇幅值 chu+;if(chu=11)chu=0x01;具體的調(diào)壓方式以正
7、弦波說明如下: case0: /fun=0正弦波 P0=tosinb/5*chu; b+; break;也就是說,調(diào)壓功能把將要賦給P0口的值除以5乘以“chu”即可實(shí)現(xiàn)。3.3.3調(diào)頻功能的實(shí)現(xiàn)由于波形的輸出時(shí)通過將一個(gè)周期的完整波形平均分成255份,每等份的時(shí)間是由定時(shí)器0初值來確定的。故在這里改變定時(shí)器0的初值就可以改變輸出波形的頻率。本方案是通過3#按鍵來調(diào)頻的,定義一個(gè)變量fre,每按一下fre加1,則定時(shí)器初值改變,頻率改變。3.4按鍵中斷方式的介紹與程序本方案采用獨(dú)立式按鍵中斷來控制單片機(jī)的,相比較鍵盤掃描方式而言大大的節(jié)省了CPU運(yùn)行時(shí)間,因?yàn)閽呙璺绞絾纹瑱C(jī)不停的忙于掃描鍵盤,
8、而中斷方式不需要,只要鍵盤有按鍵按下,硬件就會(huì)給單片機(jī)一次中斷,單片機(jī)收到外部中斷后采取掃面鍵盤一次,所以無需不停地掃描。void exinto(void) interrupt0EA=0;TR0=1;key_value=(P1&0Xff);EA=1;void judge(void) /鍵值判斷程序 uchar line; line=key_value;if(line=0xfe)key1();if(line=0xfd)key2();if(line=0xfb)key3();key_value=0; 4.仿真與調(diào)試分析 本次實(shí)驗(yàn)我們是在proteus仿真軟件下完成的。 系統(tǒng)的仿真波形如下: 正弦波
9、三角波方波鋸齒波#include #define uchar unsigned char #define uint unsigned intsbit rs=P37;sbit rw=P36;sbit e=P35;uchar fun=0,chu=5,key_value=0,fre=0,b=0,c=0,d=0,n=0,pinlu,tl,th; uchar code table1= sin ;uchar code table2=sawtooth;uchar code table3= square ;uchar code table4= train ;uchar codefe2=0xa9,0xfc;uc
10、har code tosin256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,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,
11、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,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,0xa
12、5,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,0x55,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,
13、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,0x04,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,0x4
14、0,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 ; void delay(uint t) while(t-);void delay1(uint z) uint x,y; for(x=z;x0;x-) /1毫秒延時(shí) for(y=110;y0;y-); void write_(uchar ) rs=0; P2=; e=1; delay(5); e=0;void write_date(uchar date) rs=1; P2=dat
15、e; e=1; delay1(5); e=0; void write_f(uint date) /寫頻率/uchar qian,bai,shi,ge;if(fre=0)date=25;else if(fre=1)date=40;qian=date/1000;bai=date/100%10;shi=date/10%10;ge=date%10;write_(0x80+0x45);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);write_date(0x48);write_date
16、(0x5a);void write_h(uint date1)/寫幅值 uchar high; high=date1%10; write_(0x80+0x40); write_date(0x30+high); void display() /顯示 uchar num,fuzhi; write_(0x80); switch(fun) case0: for(num=0;num9;num+)write_date(table1num);break; case1: / for(num=0;num9;num+)write_date(table2num); break;case2: for(num=0;nu
17、m9;num+) write_date(table3num); break; case3:for(num=0;num9;num+)write_date(table4num); break; fuzhi=chu; write_h(chu); write_f(fre);void key1(void) /選擇波形 fun+; if(fun=4) fun=0x00; void key2(void) /選擇幅值 chu+;if(chu=6)chu=0x01; void key3(void)/選擇頻率 fre+;if(fre=2)fre=0x00;th=0xff;tl=fefre; void exinto
18、(void) interrupt0EA=0;TR0=1;key_value=(P1&0Xff);EA=1;void judge(void) /判斷鍵值 uchar line; line=key_value;if(line=0xfe)key1(); if(line=0xfd)key2(); if(line=0xfb)key3(); key_value=0; void time0_int(void) interrupt 1 /中斷服務(wù)程序 TH0=th; TL0=tl; TR0=0; switch(fun) case0: P0=tosinb/5*chu; /正弦波 b+; break; case1:/三角波 if(c128) P0=2*c/5*chu; else P0=2*(255-c)/5*chu; c+; break;case2:/方波 d+; if(d=128)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)折紙社團(tuán)活動(dòng)方案
- 二次供水清洗消毒合同
- 土石方開挖、爆破專項(xiàng)施工方案
- 年度個(gè)人工作總結(jié)
- 2023年懷化中方縣事業(yè)單位招聘(含醫(yī)療崗位)考試真題
- 2023年桂林資源縣招聘縣級(jí)公立醫(yī)院聘用筆試真題
- 中小學(xué)教師教學(xué)述評(píng)制度
- 2024年社會(huì)主義核心價(jià)值觀活動(dòng)方案
- 幼兒園一崗雙責(zé)工作制度
- 游泳池安全管理規(guī)章制度
- PDT集群無線技術(shù)規(guī)范培訓(xùn)計(jì)劃
- (高清版)TDT 1047-2016 土地整治重大項(xiàng)目實(shí)施方案編制規(guī)程
- 2023年10月自考00155中級(jí)財(cái)務(wù)會(huì)計(jì)試題及答案含評(píng)分標(biāo)準(zhǔn)
- 自然教育行業(yè)的行業(yè)分析
- 探析機(jī)械電子工程行業(yè)現(xiàn)狀分析及未來發(fā)展趨勢(shì)
- 機(jī)電一體化生涯發(fā)展報(bào)告
- 科學(xué)精神青少年的科學(xué)思維認(rèn)知
- 2024年浙江高壓電工證考試題庫app高壓電工復(fù)審模擬考試題庫(全國通用)
- 豐田汽車組織架構(gòu)圖課件
- 老年人中醫(yī)藥養(yǎng)生健康知識(shí)講座
- 物業(yè)保盤行動(dòng)策劃方案
評(píng)論
0/150
提交評(píng)論