版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p> 系 部: 電子通信工程系 </p><p> 專 業(yè): 電子信息工程 </p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p><b> 前言: </b></p
2、><p> 本文以8051f410單片機(jī)為核心設(shè)計(jì)了一個(gè)低頻函數(shù)信號(hào)發(fā)生器。信號(hào)發(fā)生器采用數(shù)字波形合成技術(shù),通過(guò)硬件電路和軟件程序相結(jié)合,可輸出自定義波形,如正弦波、方波、鋸齒、三角波、及其他任意波形,波形的頻率和幅度在一定范圍內(nèi)可任意改變。波形和頻率的改變通過(guò)軟件控制,幅度的改變通過(guò)硬件實(shí)現(xiàn)。介紹了波形的生成原理、硬件電路和軟件部分的設(shè)計(jì)原理。本系統(tǒng)可以產(chǎn)生最高頻率99999HZ的波形。該信號(hào)發(fā)生器具有體積小、價(jià)
3、格低、性能穩(wěn)定、功能齊全的優(yōu)點(diǎn)。</p><p><b> 設(shè)計(jì)報(bào)告:</b></p><p><b> 一、工作原理</b></p><p> 數(shù)字信號(hào)可以通過(guò)數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號(hào),因此可通過(guò)產(chǎn)生數(shù)字信號(hào)再轉(zhuǎn)換成模擬信號(hào)的方法來(lái)獲得所需要的波形。8051f410單片機(jī)本身就是一個(gè)完整的微型計(jì)算機(jī),具有組成微型
4、計(jì)算機(jī)的各部分部件:中央處理器CPU、隨機(jī)存取存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、I/O接口電路、定時(shí)器/計(jì)數(shù)器以及串行通訊接口等,只要將8051f410再配置鍵盤(pán)及、及波形輸出、放大電路等部分,即可構(gòu)成所需的波形發(fā)生器。經(jīng)過(guò)考慮,我們確定方案如下:利用F410單片機(jī)采用程序設(shè)計(jì)方法產(chǎn)生鋸齒波、三角波、正弦波、方波四種波形,再通過(guò)D/A轉(zhuǎn)換器將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),濾波放大,最終由示波器顯示出來(lái),通過(guò)鍵盤(pán)來(lái)控制四種波形的類型選擇、頻率變化
5、,最終輸出顯示其各自的類型以及數(shù)值。</p><p><b> 1.1、設(shè)計(jì)要求</b></p><p> 1)、利用單片機(jī)采用軟件設(shè)計(jì)方法產(chǎn)生四種波形</p><p> 2)、四種波形可通過(guò)鍵盤(pán)選擇</p><p><b> 3)、波形頻率可調(diào)</b></p><p&g
6、t; 4)、需顯示波形的種類及其頻率</p><p><b> 二、主程序思路</b></p><p> 主程序先是進(jìn)行一些初始化的工作,然后根據(jù)波形標(biāo)志代碼的值,使其形成多個(gè)數(shù)組,每個(gè)數(shù)組都是一個(gè)波形代碼。這樣寫(xiě)的好處是輸出的波形頻率也可以有定時(shí)常數(shù)決定,找到定時(shí)常數(shù)和輸出頻率的關(guān)系。在按鍵設(shè)置波形轉(zhuǎn)換狀態(tài)的循環(huán)中,波形的轉(zhuǎn)換狀態(tài)在按鍵上可以一一看出,把四種波
7、形設(shè)置成0、1、2、3、在數(shù)碼管的最高位設(shè)置成循環(huán)顯示,然后把每個(gè)波形的代碼值通過(guò)單片機(jī)自帶的AD轉(zhuǎn)換賦給輸出的數(shù)據(jù)口,確定每個(gè)數(shù)組然后確定數(shù)組的列是否為數(shù)組中最后行的一個(gè)元素,若是則運(yùn)行下一行的元素(另一個(gè)波形),并通過(guò)端口輸出P0.0。同時(shí)還要有按鍵控制頻率,因?yàn)檎业捷敵鲱l率和定時(shí)常數(shù)的關(guān)系,所以頻率的調(diào)節(jié),可以有一個(gè)按鍵控制頻率的個(gè)位、十位、百位、千位,再通過(guò)另一按鍵分別可以在頻率的個(gè)位、十位、百位、千位進(jìn)行加一功能,則實(shí)現(xiàn)了頻率
8、的要求調(diào)節(jié),然后再把頻率通過(guò)數(shù)碼管的低四位一一顯示出來(lái),即構(gòu)成四位的頻率。</p><p><b> 主程序流程圖</b></p><p><b> 三、軟件流程程序:</b></p><p> 本程序中兩個(gè)外部中斷分別起到了控制波形和頻率的作用。在程序中還加入了消抖部分。</p><p>&
9、lt;b> 軟件流程圖</b></p><p><b> 電路板圖:</b></p><p><b> 程序六</b></p><p> #include <C8051F410.h></p><p> sbit CH452_SCL = P1^3;</p&
10、gt;<p> sbit CH452_SDA = P1^4; </p><p> sbit CH452_KEY = P1^5; </p><p> unsigned char second0,second1,minute0,minute1,f,j;//四個(gè)參數(shù)</p><p> unsigned char tc,sta=0
11、x08,stb=0x01;//軟件延時(shí)單元,狀態(tài)標(biāo)志 </p><p> code unsigned char ds=0x14; //軟件延時(shí)系數(shù)__20</p><p> bit flag1=0;</p><p> unsigned char k,dispbuff[] = {0,0,0,0,0,0,0,0}; //顯示緩沖,初始顯示全0<
12、;/p><p> unsigned int CMD,DAT,DAT1;</p><p> unsigned char buffer[]={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,};</p><p> code unsigned char font[32] = {0xFC,0
13、x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0, //01234567</p><p> 0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E, //89ABCDEF</p><p> 0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1, //0.1.2.3.4.5.6.7.</p><p&g
14、t; 0xFF,0xF7,0x00,0x62,0x02,0x12,0x7C,0x1C};//8.9.滅 + — = U L</p><p> code unsigned char key[16] = {0xC6,0xB6,0x86,0xD6,0x96,0xA6,0xF6,0xE6,</p><p> 0xC4,0xB4,0x84,0xD4,0x94,0xA4,0xF4,0xE4}
15、;//鍵盤(pán)位置碼 </p><p> code unsigned int table1[4][32]={</p><p> 4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
16、, 0, 0, 0, 0,</p><p> 0, 256,512,768,1024,1280,1536,1792,2048,2304,2560,2816,3072,3328,3584,3840,4095,3840,3584,3328,3072,2816,2560,2304,2048,1792,1536,1280,1024,768,512,256,</p><p> 2048
17、,2447,2831,3185,3496,3750,3940,4056,4095,4057,3941,3752,3498,3188,2834,2451,2051,1652,1268,913, 603, 348, 158, 40, 0, 38, 154, 342, 596,905,1259,1642,</p><p> 0, 132, 264,396, 528,660, 792,924, 10
18、56,1188,1320,1452,1584,1716,1848,1980,2112,2244,2376,2508,2640,2772,2904,3036,3168,3300,3432,3564,3696,3828,3960,4092};//二維數(shù)組(方波,鋸齒波,正弦波 ,三角波) </p><p> /* mS延時(shí) */</p><p> void dela
19、yms(unsigned int i)</p><p> {unsigned intj;</p><p> do{for(j=0;j!=1000;j++)</p><p><b> {;}</b></p><p> }while(--i);</p><p><b> }&
20、lt;/b></p><p> /////////////////////////////////////////////////////////////////////////////////////</p><p> /* uS延時(shí) */</p><p> void delayus(void)</p><p> { un
21、signed int k;</p><p> for (k=0;k<8;k++)</p><p><b> {;}</b></p><p><b> } </b></p><p> unsigned char rdch452(void)</p><p><
22、;b> {</b></p><p> unsigned char j,key;</p><p> CH452_SDA = 0;</p><p> delayus();</p><p> CH452_SCL = 0;</p><p> delayus();</p><p&
23、gt; CH452_SCL = 1;</p><p> delayus();</p><p> CH452_SCL = 0;</p><p> key = 0x9F;</p><p> for (j=0;j<8;j++)</p><p><b> {</b></p>
24、<p> if(key>=0x80 ) </p><p> CH452_SDA = 1;</p><p><b> else</b></p><p> CH452_SDA = 0;</p><p> CH452_SCL = 1;</p><p> delayus(
25、);</p><p> CH452_SCL = 0;</p><p> key = key << 1 ;</p><p><b> };</b></p><p> delayus();</p><p><b> key = 0;</b></p>
26、;<p> for (j=0;j<8;j++)</p><p><b> { </b></p><p> CH452_SCL = 1;</p><p> if (CH452_SDA == 1)</p><p><b> key ++;</b></p>&l
27、t;p> key = key << 1;</p><p> CH452_SCL = 0;</p><p> delayus();</p><p><b> }</b></p><p> CH452_SDA = 1;</p><p> delayus();</p&
28、gt;<p> CH452_SCL = 1;</p><p> return key;</p><p><b> }</b></p><p> //////////////////////////////////////////////////////////////////////////////////////////
29、///////////</p><p> /* 命令、數(shù)據(jù)送CH452 */</p><p> void toch452(unsigned int cmda) </p><p><b> {</b></p><p> unsigned char j;</p><p> CH452_SD
30、A = 0;</p><p> delayus();</p><p> CH452_SCL = 0;</p><p> delayus();</p><p> CH452_SCL = 1;</p><p> delayus();</p><p> CH452_SCL = 0;<
31、/p><p> for (j=0;j<16;j++)</p><p><b> {</b></p><p> if(cmda>=0x8000 ) </p><p> CH452_SDA = 1;</p><p><b> else</b></p&g
32、t;<p> CH452_SDA = 0;</p><p> CH452_SCL = 1;</p><p> delayus();</p><p> CH452_SCL = 0;</p><p> cmda = cmda << 1 ;</p><p><b> };<
33、;/b></p><p> CH452_SDA = 1;</p><p> delayus();</p><p> CH452_SCL = 1;</p><p><b> }</b></p><p> ////////////////////////////////////////
34、/////////////////////////////////////////////</p><p><b> /* 讀鍵盤(pán) */</b></p><p> ////////////////////////////////////////////////////////////////////////////////////</p><p
35、> void display(void)</p><p><b> {</b></p><p> unsigned char i;</p><p> DAT1 = 0xA100;//8個(gè)數(shù)碼管逐一送顯示</p><p> for (i=0;i<8;i++)</p><p&g
36、t;<b> {</b></p><p> DAT = DAT1 + font[dispbuff [i]];</p><p> toch452(DAT);</p><p> DAT1 = DAT1 + 0x0400;</p><p><b> }</b></p><p&
37、gt;<b> }</b></p><p> void sx (void)//送顯示函數(shù)</p><p><b> {</b></p><p> dispbuff[0]=second0;//頻率個(gè)位</p><p> dispbuff[1]=second1;//頻
38、率十位</p><p> dispbuff[2]=minute0;//頻率 百位 //"-"</p><p> dispbuff[3]=minute1;//頻率千位</p><p> dispbuff[4]=29; //等號(hào)</p><p> dispbuff[5]=15;
39、 //"f"</p><p> dispbuff[6]=26;//不顯示</p><p> dispbuff[7]=j%10;//轉(zhuǎn)換波形狀態(tài)</p><p><b> }</b></p><p> unsigned int key1(void)</p>&
40、lt;p><b> {</b></p><p> unsigned char i,keycode,keyn;</p><p> if (CH452_KEY == 0 ) //查詢鍵盤(pán)</p><p><b> {</b></p><p> keycode = rdch452
41、(); //將鍵值賦給變量keycode</p><p><b> keyn = 0;</b></p><p> for (i=0;i<16;i++) //鍵譯碼</p><p><b> {</b></p><p> if (key[i] == keycode)</p>
42、<p> keyn = i ;</p><p><b> }</b></p><p> switch (keyn)</p><p><b> {</b></p><p> case 0://轉(zhuǎn)換波形,有二維數(shù)組4行,32列,</p><p><
43、;b> {</b></p><p> for(i=0;i<32;i++)</p><p><b> {</b></p><p> buffer[i]=table1[j][i];//把數(shù)組中的單行數(shù)組,一次送到數(shù)組buffer中</p><p><b> }</b>&
44、lt;/p><p><b> j=j+1;//行</b></p><p> if(j==4) j=0;</p><p><b> }break;</b></p><p> case 1://轉(zhuǎn)換狀態(tài) </p><p><b> {</b>&l
45、t;/p><p> sta=sta+sta;</p><p> if(sta==0x10) sta=0x01;</p><p><b> }</b></p><p><b> break;</b></p><p> case 2://校頻率位</p>
46、<p><b> {</b></p><p> switch (sta)</p><p><b> {</b></p><p> case 0x01://校頻率個(gè)位</p><p><b> {</b></p><p> se
47、cond0++;</p><p> if(second0==10) </p><p><b> {</b></p><p> //second1++;</p><p> second0=1;</p><p><b> }</b></p><p&g
48、t;<b> }</b></p><p><b> break;</b></p><p> case 0x02://校十位</p><p><b> {</b></p><p> second1++;</p><p> if(second
49、1==10) </p><p><b> {</b></p><p> second1=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b><
50、;/p><p> case 0x04://校百位</p><p><b> {</b></p><p> minute0++;</p><p> if(minute0==10)</p><p><b> {</b></p><p> min
51、ute0=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p> case 0x08: //千位</p><p><b> {
52、</b></p><p> minute1++;</p><p> if(minute1==10)</p><p><b> {</b></p><p> minute1=0;</p><p><b> }</b></p><p>
53、;<b> }</b></p><p><b> }</b></p><p><b> };</b></p><p> f=second0+second1*10+minute0*100+minute1*1000;</p><p><b> }</b&g
54、t;</p><p> sx();//送顯</p><p> display();//顯示</p><p><b> }</b></p><p> return(f);</p><p><b> }</b></p><p>
55、 void Init_Device(void)</p><p><b> {</b></p><p> PCA0MD &= ~0x40; //PCA_Init()禁止看門(mén)狗</p><p> PCA0MD = 0x00; </p><p> IDA0CN = 0xF5;
56、 //DAC_Init()</p><p> P1MDOUT = 0x00;</p><p> P0MDIN = 0xFE; //Port_IO_Init()</p><p> P0SKIP = 0x01;</p><p> IDA0CN = 0xF2;//使能IDA0轉(zhuǎn)換器</p><
57、p> REF0CN = 0x08;//選擇電源電壓為IDA0的參考電壓</p><p> P0MDIN = 0xFE;//使能交叉開(kāi)關(guān)</p><p><b> }</b></p><p> void main(void)</p><p><b> {</b></p
58、><p> unsigned char i;</p><p> Init_Device();</p><p> XBR1 = 0x40;</p><p> PCA0MD = 0x00;</p><p> OSCICN = 0x86;//選擇系統(tǒng)時(shí)鐘位24.5MHZ</p>&l
59、t;p> TMOD=0x10;//定時(shí)器1初始化</p><p> TH1=65536-1000000/(384*f); //輸出頻率和定時(shí)常數(shù)</p><p> TL1=65536-1000000%(384*f); </p><p><b> EA=1;</b>&l
60、t;/p><p> ET0=1; //開(kāi)放定時(shí)器1中斷</p><p> tc=ds;//軟件延時(shí)初值</p><p><b> TR0=1;</b></p><p> delayms(100);</p><p>
61、 CMD = 0x9103;//設(shè)置CH452系統(tǒng)參數(shù) 1001 0001 0000 0011--> 0100 0000 0011 ---> 403 (低電平按鍵中斷,1HZ閃爍,共陰管,開(kāi)鍵盤(pán),開(kāi)顯示)</p><p> // ===> 413 (低電平按鍵中斷,2HZ閃爍,共陰管,開(kāi)鍵盤(pán),開(kāi)顯示)</p><p>
62、 toch452(CMD);</p><p> CMD = 0x9500; //設(shè)置CH452顯示參數(shù) 1001 0101 0100 0000--> 0101 0100 0000 ---> 540 (不譯碼,四位數(shù)碼管掃描)</p><p> // ===> 500 (不譯碼,8位數(shù)碼管掃描)</p>
63、<p> toch452(CMD);</p><p><b> while(1)</b></p><p><b> {</b></p><p> key1(); //鍵處理</p><p> if(flag1==1)//有標(biāo)志位<
64、;/p><p><b> {</b></p><p><b> flag1=0;</b></p><p> IDA0H=buffer[i]; //輸出波形</p><p> if(i<32)i++;</p><p><b> e
65、lse i=0;</b></p><p><b> }</b></p><p> sx();//送顯</p><p> display();</p><p><b> }</b></p><p><b> }</b>
66、</p><p> void timer0(void) interrupt 1//定時(shí)器1中斷服務(wù)函數(shù)</p><p><b> {</b></p><p><b> flag1=1;</b></p><p> TH1=65536-1000000/(384*f);</p>
67、<p> TL1=65536-1000000%(384*f); </p><p><b> }</b></p><p><b> 七、心得體會(huì)</b></p><p> 通過(guò)這次畢業(yè)設(shè)計(jì),使我深刻地認(rèn)識(shí)到學(xué)好專業(yè)知識(shí)的重要性,也理解了理論聯(lián)系實(shí)際的含義,并且檢驗(yàn)了大學(xué)三年的學(xué)習(xí)成果,進(jìn)一步加深了我對(duì)專
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡(jiǎn)易信號(hào)發(fā)生器單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)信號(hào)發(fā)生器課程設(shè)計(jì)論文
- 單片機(jī)課程設(shè)計(jì)報(bào)告--波形發(fā)生器
- 單片機(jī)課程設(shè)計(jì)報(bào)告--- 函數(shù)發(fā)生器
- 單片機(jī)波形發(fā)生器課程設(shè)計(jì)報(bào)告
- 基于單片機(jī)的函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)
- 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)--信號(hào)發(fā)生器
- 課程設(shè)計(jì)—基于單片機(jī)的方波信號(hào)發(fā)生器
- 課程設(shè)計(jì)--基于單片機(jī)的函數(shù)信號(hào)發(fā)生器
- 單片機(jī)課程設(shè)計(jì)報(bào)告---基于單片機(jī)的波形發(fā)生器
- 單片機(jī)課程設(shè)計(jì)(波形發(fā)生器)
- 單片機(jī)課程設(shè)計(jì)---波形發(fā)生器
- 單片機(jī)波形發(fā)生器課程設(shè)計(jì)報(bào)告 (2)
- 基于單片機(jī)的函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)
- 課程設(shè)計(jì)---基于單片機(jī)的信號(hào)發(fā)生器的設(shè)計(jì)
- 51單片機(jī)課程設(shè)計(jì)---多功能信號(hào)發(fā)生器設(shè)計(jì)
- 課程設(shè)計(jì)-基于單片機(jī)的函數(shù)信號(hào)發(fā)生器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)—波形發(fā)生器
- 課程設(shè)計(jì)--單片機(jī)波形發(fā)生器
- 單片機(jī)課程設(shè)計(jì)-波形發(fā)生器
評(píng)論
0/150
提交評(píng)論