函數(shù)信號(hào)發(fā)生器設(shè)計(jì)_第1頁(yè)
函數(shù)信號(hào)發(fā)生器設(shè)計(jì)_第2頁(yè)
函數(shù)信號(hào)發(fā)生器設(shè)計(jì)_第3頁(yè)
函數(shù)信號(hào)發(fā)生器設(shè)計(jì)_第4頁(yè)
函數(shù)信號(hào)發(fā)生器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩36頁(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)介

函數(shù)信號(hào)發(fā)生器設(shè)計(jì)摘要隨著科技的不斷發(fā)展,信號(hào)發(fā)生器已成為電子實(shí)驗(yàn)室中不可或缺的一部分。信號(hào)發(fā)生器的設(shè)計(jì)和制作一直是電子愛(ài)好者和工程師們感興趣的課題。51單片機(jī)是一種高性能、低功耗的微控制器,它可以提供豐富的外設(shè)和功能,使得它非常適合用于信號(hào)發(fā)生器的設(shè)計(jì)。我們將利用51單片機(jī)的定時(shí)器和DAC模塊來(lái)實(shí)現(xiàn)信號(hào)的生成和輸出。本文研究一種基于51單片機(jī)的函數(shù)信號(hào)發(fā)生器設(shè)計(jì),主要包括時(shí)鐘電路模塊,AD9910系統(tǒng)模塊,LCD顯示屏模塊,按鍵模塊。關(guān)鍵詞:51單片機(jī);信號(hào)發(fā)生器;LCD顯示屏目錄TOC\o"1-3"\h\u第1章緒論 第6章總結(jié)基于51單片機(jī)的函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)是一項(xiàng)復(fù)雜的工程,需要考慮到許多方面,包括硬件設(shè)計(jì)、軟件編程、功能需求等等。硬件設(shè)計(jì)方面,需要考慮到AD9910芯片的功能需求和連接方式,以及顯示屏和按鍵的類型和布局,同時(shí)需要進(jìn)行良好的PCB布局設(shè)計(jì),以確保信號(hào)質(zhì)量和穩(wěn)定性。軟件編程方面,需要編寫適配AD9910芯片的驅(qū)動(dòng)程序,實(shí)現(xiàn)信號(hào)發(fā)生器的各種功能,同時(shí)還需要編寫相應(yīng)的按鍵處理程序,以實(shí)現(xiàn)按鍵的正常使用和菜單選項(xiàng)的選擇。功能需求方面,需要考慮到信號(hào)發(fā)生器的各種參數(shù)和菜單選項(xiàng),以滿足不同應(yīng)用場(chǎng)景的需求。此次畢業(yè)設(shè)計(jì),充分利用單片機(jī)開(kāi)發(fā)上的靈活、快速的特點(diǎn),來(lái)實(shí)現(xiàn)智能控制的設(shè)計(jì)。通過(guò)本次畢業(yè)論文的設(shè)計(jì),使我認(rèn)識(shí)到作為科技人員,重要的是思維縝密,知識(shí)經(jīng)驗(yàn)積累深厚,堅(jiān)強(qiáng)的意志,同時(shí)還要有創(chuàng)新的精神,當(dāng)你覺(jué)得一種做法可能可以實(shí)現(xiàn)的時(shí)候就應(yīng)該勇于嘗試,遇到問(wèn)題的時(shí)候應(yīng)該多問(wèn)多想,不輕易放棄。在以后的工.作和學(xué)習(xí)中,要勤奮踏實(shí),善于思考,才能在競(jìng)爭(zhēng)激烈的社會(huì)中提升自我的實(shí)用價(jià)值。這次的畢業(yè)設(shè)計(jì)給了我一個(gè)很好的學(xué)習(xí)機(jī)會(huì),我在這里面學(xué)習(xí)到很多東西,受益匪淺。參考文獻(xiàn)梁狀.基于DDS的高頻函數(shù)信號(hào)發(fā)生器設(shè)計(jì)與實(shí)現(xiàn)[M].哈爾濱理工大學(xué).2020.方淼.一種基于STC89C52的函數(shù)信號(hào)發(fā)生器實(shí)驗(yàn)設(shè)計(jì)[C],洛陽(yáng)師范學(xué)院學(xué)報(bào).2022.居秋愷;朱立宇;趙可為;劉琪.基于DDS技術(shù)的簡(jiǎn)易函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)[C],電子制作.2020.陳華清.電子測(cè)量技術(shù)的發(fā)展及應(yīng)用[J].電子測(cè)量,2022曹慧.淺談電子測(cè)量技術(shù)的發(fā)展及應(yīng)用的因素與對(duì)策[J].工程技術(shù),2019.李輝,饒睿楠,任亞欣.基于AD9910的通用雷達(dá)信號(hào)產(chǎn)生器[J].火控雷達(dá)技術(shù),2021.崔建平.電子測(cè)量?jī)x器行業(yè)發(fā)展回顧與展望[J].國(guó)外電子測(cè)量技術(shù),2019.項(xiàng)川,王皓.基于DDS技術(shù)的信號(hào)源的設(shè)計(jì)與制作研究[J].自動(dòng)化應(yīng)用,2019.楊建華.基于FPGA和DDS技術(shù)的多通道信號(hào)源設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2021.任英杰;黃建清;郭凱;李亞軍.基于STC89C51單片機(jī)的簡(jiǎn)單函數(shù)信號(hào)發(fā)生器設(shè)計(jì)[M].電子設(shè)計(jì)工程.2022.周江.51單片機(jī)原理及硬件電路設(shè)計(jì)研究[J].數(shù)字技術(shù)與應(yīng)用,2018,000(011):1-1陳志遠(yuǎn),朱葉承,周卓泉,等.一種基于51智能家居控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2019,28(9):138-140.李洹.單片機(jī)控制的輕觸開(kāi)關(guān)壽命試驗(yàn)儀.電聲技術(shù),2017(5):52-55.馬澤,張志杰,張潤(rùn)哲.壓力傳感器動(dòng)態(tài)校準(zhǔn)系統(tǒng)的不確定度分析[J].測(cè)試報(bào),2018,32(5):416-421.陳志遠(yuǎn),朱葉承,周卓泉,等.一種基于51智能家居控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2019,28(9):138-140.GozdeTektas;CuneytCeliktas.DesignofaVirtualFunctionGeneratorforSignalGeneration.2022.WanQianCheng;;YueJunGuo;;BiaoWang.DesignofProgramControlledFunctionSignalGeneratorBasedonLPC2138.2021. HuiLingSi.DesignofVirtualFunctionSignalGeneratorBasedonSoundCard.2020.ChunYingWang;JunZhang.BasedonFPGADesignandSimulationofFunctionSignalGenerator[J].ProcediaEngineering.2020.MeimeiLv;BinZhang;MengnanLi;DapengShen.DesignofFunctionSignalGeneratorBasedonDDFS[M].Newnes.2020.

附錄A總原理圖圖A-1總原理圖

附錄B程序#include<reg52.h> //包含頭文件#include<intrins.h>#defineucharunsignedchar //宏定義#defineuintunsignedintsbits1=P3^5; //定義按鍵的接口sbits2=P3^6;sbits3=P3^7;sbits4=P3^4;sbitled0=P3^0; //定義四個(gè)LED,分別表示不同的波形sbitled1=P3^1;sbitled2=P3^2;sbitled3=P3^3; sbitlcdrs=P2^7; //液晶控制引腳,還有一個(gè)控制腳是RW,因?yàn)槲覀冎恍枰蛞壕Ю飳憯?shù)據(jù)系那是就好了,所以,我們直接將RW引腳接地sbitlcden=P2^6;charnum,boxing,u; //定義全局變量intpinlv=100,bujin=1,bujin1=1; //頻率初始值是10Hz,步進(jìn)值默認(rèn)是0.1,顯示步進(jìn)值變量ucharcodetable[]="0123456789"; //定義顯示的數(shù)組ucharcodetable1[]="Fout=Waveform:"; //初始化顯示字符unsignedlongintm; //定義長(zhǎng)整形變量minta,b,h,num1; //定義全局變量//自定義字符ucharcodezifu[]={ //此數(shù)組內(nèi)數(shù)據(jù)為液晶上顯示波形符號(hào)的自定義字符 0x0e,0x11,0x11,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x11,0x11,0x0e,0x00, //正弦波 01 0x00,0x07,0x04,0x04,0x04,0x04,0x1c,0x00, 0x00,0x1c,0x04,0x04,0x04,0x04,0x07,0x00, //矩形波 23 0x00,0x01,0x02,0x04,0x08,0x10,0x00,0x00, 0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00, //三角波 45 0x00,0x01,0x03,0x05,0x09,0x11,0x00,0x00, //鋸齒波 6};ucharcodesin[64]={ //此數(shù)組內(nèi)的數(shù)據(jù)為,da輸出對(duì)應(yīng)電壓值對(duì)應(yīng)的數(shù)字量,0是0V,255是5V135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128}; //正弦波取碼ucharcodejuxing[64]={ //一個(gè)周期是采樣64個(gè)點(diǎn),所以數(shù)組內(nèi)是64個(gè)數(shù)據(jù)255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //矩形波取碼ucharcodesanjiao[64]={0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0}; //三角波取碼ucharcodejuchi[64]={0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255}; //鋸齒波取碼voiddelay(uintxms) //延時(shí)函數(shù){ inta,b; for(a=xms;a>0;a--) for(b=110;b>0;b--);}voidwrite_com(ucharcom) //寫命令函數(shù){ lcdrs=0; P0=com; delay(1); lcden=1; delay(1); lcden=0;}voidwrite_date(uchardate) //寫數(shù)據(jù)函數(shù){ lcdrs=1; P0=date; delay(1); lcden=1; delay(1); lcden=0;}//自定義字符集voidLcd_ram(){ uinti,j,k=0,temp=0x40; for(i=0;i<7;i++) { for(j=0;j<8;j++) { write_com(temp+j); write_date(zifu[k]); k++; } temp=temp+8; }}voidinit_lcd() //初始化函數(shù){ uchari; lcden=0; //默認(rèn)開(kāi)始狀態(tài)為關(guān)使能端,見(jiàn)時(shí)序圖 Lcd_ram(); write_com(0x0f); write_com(0x38); //顯示模式設(shè)置,默認(rèn)為0x38,不用變。 write_com(0x01); //顯示清屏,將上次的內(nèi)容清除,默認(rèn)為0x01. write_com(0x0c); //顯示功能設(shè)置0x0f為開(kāi)顯示,顯示光標(biāo),光標(biāo)閃爍;0x0c為開(kāi)顯示,不顯光標(biāo),光標(biāo)不閃 write_com(0x06); //設(shè)置光標(biāo)狀態(tài)默認(rèn)0x06,為讀一個(gè)字符光標(biāo)加1. write_com(0x80); //設(shè)置初始化數(shù)據(jù)指針,是在讀指令的操作里進(jìn)行的 for(i=10;i<20;i++) //顯示初始化 { write_date(table1[i]); //顯示第一行字符 } write_com(0x80+0x40); //選擇第二行 for(i=0;i<9;i++) { write_date(table1[i]); //顯示第二行字符 } write_com(0x80+10); //選擇第一行第十個(gè)位置 write_date(0); write_date(1); write_date(0); write_date(1); write_date(0); write_date(1); //顯示自定義的波形圖案 write_com(0x80+0x40+0x09); //選擇第二行第九個(gè)位置 write_date(''); write_date('1'); write_date('0'); write_date('.'); write_date('0'); write_date('H'); write_date('z'); //顯示初始的頻率值}voidinitclock() //定時(shí)器初始化函數(shù){ TMOD=0x01; //定時(shí)器的工作方式 TH0=a; TL0=b; //定時(shí)器賦初值 EA=1; //打開(kāi)中斷總開(kāi)關(guān) ET0=1; //打開(kāi)定時(shí)器允許中斷開(kāi)關(guān) TR0=1; //打開(kāi)定時(shí)器定時(shí)開(kāi)關(guān)}voiddisplay() //顯示函數(shù){ ucharqian,bai,shi,ge; //定義變量用于顯示 qian=pinlv/1000; //將頻率值拆成一位的數(shù)據(jù),將數(shù)據(jù)除以1000,得到的商是一位數(shù),賦值給qian bai=pinlv%1000/100; //將頻率除以1000的余數(shù)再除以100就得到了頻率的百位,賦值給bai shi=pinlv%1000%100/10; //同上,得到頻率的十位 ge=pinlv%1000%100%10; write_com(0x80+0x40+0x09);//選中第二行第九個(gè)位置 if(qian==0) //千位如果為0 write_date(''); //不顯示 else //千位不為0 write_date(table[qian]);//正常顯示千位 if(qian==0&&bai==0) //千位和百位都為0 write_date(''); //百位不顯示 else //不都為0 write_date(table[bai]); //百位正常顯示 write_date(table[shi]); //顯示十位數(shù) write_date('.'); //顯示小數(shù)點(diǎn) write_date(table[ge]); //顯示個(gè)位 write_date('H'); //顯示頻率的單位Hz write_date('z'); if(boxing==0) //判斷波形為正弦波 { write_com(0x80+10); //選中一行頻率圖案位置 write_date(0); //顯示正弦波圖案 write_date(1); write_date(0); write_date(1); write_date(0); write_date(1); led3=1; led0=0; //點(diǎn)亮正弦波指示燈 } if(boxing==1) //注釋同上 { write_com(0x80+10); write_date(2); write_date(3); write_date(2); write_date(3); write_date(2); write_date(3); led0=1; led1=0; } if(boxing==2) { write_com(0x80+10); write_date(4); write_date(5); write_date(4); write_date(5); write_date(4); write_date(5); led1=1; led2=0; } if(boxing==3) { write_com(0x80+10); write_date(6); write_date(6); write_date(6); write_date(6); write_date(6); write_date(6); led2=1; led3=0; }}voidkeyscan() //頻率調(diào)節(jié)鍵盤檢測(cè)函數(shù){ if(s1==0) //加按鍵是否按下 { EA=0; //關(guān)閉中斷 delay(2); //延時(shí)去抖 if(s1==0) //再次判斷 { while(!s1); //按鍵松開(kāi) pinlv+=bujin; //頻率以步進(jìn)值加 if(pinlv>1000) //最大加到100Hz { pinlv=100; //100Hz } display(); //顯示函數(shù) m=65536-(150000/pinlv);//計(jì)算頻率/*頻率值最小是10Hz,pinlv的值是100(因?yàn)橐@示小數(shù)點(diǎn)后一位),150000/100=1500,這個(gè)1500就是定時(shí)器需要計(jì)時(shí)的,單位是us,65536-1500得到的是定時(shí)器的初值,先不管初值,先看定時(shí)時(shí)間,1500us,一個(gè)波形的周期是由64個(gè)定時(shí)組成的,所以,一個(gè)波形周期就是64*1500us=96000,也就是96ms,約等于100ms,也就是10Hz的頻率*/ a=m/256; //將定時(shí)器的初值賦值給變量 b=m%256; EA=1; //打開(kāi)中斷總開(kāi)關(guān) } } if(s2==0) //減按鍵按下 { delay(5); if(s2==0) { EA=0; while(!s2); pinlv-=bujin; //頻率以步進(jìn)值減 if(pinlv<100) { pinlv=1000; } display(); m=65536-(150000/pinlv); a=m/256; b=m%256; EA=1; } } if(s3==0) //波形切換按鍵 { delay(5); if(s3==0) { EA=0; while(!s3); boxing++; //波形切換 if(boxing>=4) //4種波形 { boxing=0; } display(); EA=1; } } }voidbujindisplay() //步進(jìn)值設(shè)置界面顯示程序{ uintbai,shi,ge; //定義步進(jìn)值百十個(gè)位 bai=bujin1/100; //將步進(jìn)值除以100得到百位,也就是頻率值的十位,因?yàn)橛幸粋€(gè)小數(shù)位 shi=bujin1%100/10; //將步進(jìn)值除以100的余數(shù)除以十得到十位 ge=bujin1%100%10; //取余10后得到個(gè)位,也就是頻率步進(jìn)值的小數(shù)點(diǎn)后一位 write_com(0x80+11); //選中液晶第一行第十一列 if(bai==0) //百位是否為0 write_date(''); //百位不顯示 else //百位不為0 write_date(table[bai]); //顯示百位數(shù)據(jù) write_date(table[shi]); //顯示十位數(shù)據(jù) write_date('.'); //顯示小數(shù)點(diǎn) write_date(table[ge]); //顯示個(gè)位,也就是小數(shù)點(diǎn)后一位}voidbujinjiance() //步進(jìn)值設(shè)置鍵盤程序{ if(s4==0) //步進(jìn)設(shè)置按鍵按下 { delay(5); //延時(shí)去抖 if(s4==0) //再次判斷按鍵 { while(!s4); //按鍵釋放,按鍵松開(kāi)才繼續(xù)向下執(zhí)行 h++; //變量加 if(h==1) //進(jìn)入設(shè)置狀態(tài)時(shí) { write_com(0x01); //清屏 write_com(0x80); //初始化顯示步進(jìn)設(shè)置界面 write_date('S');delay(1); //stepvalue write_date('t');delay(1); write_date('e');delay(1); write_date('p');delay(1); write_date('');delay(1); write_date('v');delay(1); write_date('a');delay(1); write_date('l');delay(1); write_date('u');delay(1); write_date('e');delay(1); write_date(':');delay(1); bujin1=bujin; //步進(jìn)值賦值給臨時(shí)變量 bujindisplay(); //顯示步進(jìn)值 } if(h==2) //退出設(shè)置 { h=0; //清零 bujin=bujin1; //設(shè)置好的臨時(shí)步進(jìn)值賦值給步進(jìn)變量 init_lcd(); //初始化液晶顯示 initclock(); //定時(shí)器初始化 display(); //調(diào)用顯示程序 } } } if(h==1) //設(shè)置步進(jìn)值時(shí) { if(s1==0) //加按鍵按下 { delay(5); //延時(shí)去抖 if(s

溫馨提示

  • 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)論