全部評(píng)論(1條)
-
- 我昱云南的人民 2018-07-19 00:00:00
- 采用AT89C52單片機(jī)作為控制核心,外圍采用數(shù)字/模擬轉(zhuǎn)換電(DAC0832)、運(yùn)放電路(TL082)、按鍵和LCD1602液晶屏顯示電路等。采用程序設(shè)計(jì)方法產(chǎn)生三角波、方波、正弦波三種波形,再通過D/A轉(zhuǎn)換器DAC0832將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),濾波放大,Z終由示波器顯示出來。通過按鍵來控制三種波形的類型選擇、頻率變化,并通過液晶屏1602顯示各自的類型以及數(shù)值。輸出波形的幅度可以用滑動(dòng)變阻器來實(shí)現(xiàn)調(diào)幅。系統(tǒng)大致包括信號(hào)發(fā)生部分、數(shù)/模轉(zhuǎn)換部分以及液晶顯示部分。本設(shè)計(jì)具有線路簡單、結(jié)構(gòu)緊湊、價(jià)格低廉、性能優(yōu)良等優(yōu)點(diǎn),可用于多種需要低頻信號(hào)源的場所,具有一定的實(shí)用性。 #include<reg52.h> #define uchar unsigned char #define uint unsigned int //#define Fosc 24000000/12000000 //12分頻后的頻率 #define DAdata P0 //DA數(shù)據(jù)端口 sbit DA_S1= P2^0; // 控制DAC0832的8位輸入寄存器,僅當(dāng)都為0時(shí),可以輸出數(shù)據(jù)(處于直通狀態(tài)),否則,輸出將被鎖存 sbit DA_S2= P2^1; // 控制DAC0832的8位DAC寄存器,僅當(dāng)都為0時(shí),可以輸出數(shù)據(jù)(處于直通狀態(tài)),否則,輸出將被鎖存 sbit key= P3^2; uchar wavecount; //'抽點(diǎn)'計(jì)數(shù) uchar THtemp,TLtemp;//傳遞頻率的中間變量 //uint T_temp; uchar judge=1; //在方波輸出函數(shù)中用于簡單判別作用 uchar waveform; //當(dāng)其為0、1、2時(shí),分別代表三種波 uchar code freq_unit[3]={10,50,200}; //三種波的頻率單位 uchar idata wavefreq[3]={1,1,1}; //給每種波定義一個(gè)數(shù)組單元,用于存放單位頻率的個(gè)數(shù) uchar code lcd_hang1[]={"Sine Wave " "Triangle Wave " "Square Wave " "Select Wave: " "press No.1 key! "}; uchar idata lcd_hang2[16]={"f= Hz "}; /***********這兩組數(shù)組很重要,需要根據(jù)波形來調(diào)試,選擇合適的值,使輸出波形達(dá)到頻率要求************/ uchar code waveTH[]={ 0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe}; uchar code waveTL[]={ 0x06,0x8a,0x10,0x4e,0x78,0x93,0xa8,0xb3,0xbe,0xc6, //正弦波頻率調(diào)整中間值 0xac,0xde,0x48,0x7a,0x99,0xaf,0xbb,0xc8,0xd0,0xde, //三角波頻率調(diào)整中間值 0x88,0x50,0x90,0x32,0x34,0xbe,0x4a,0xa3,0xe5,0x2c}; /*************************************************************************************************/ uchar code triangle_tab[]={ //每隔數(shù)字8,采取一次 0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78, 0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8,0xf0,0xf8,0xff, 0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x98,0x90,0x88,0x80, 0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x18,0x10,0x08,0x00}; uchar code sine_tab[256]={ //輸出電壓從0到Z大值(正弦波1/4部分) 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,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, //輸出電壓從Z大值到0(正弦波1/4部分) 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,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80, //輸出電壓從0到Z小值(正弦波1/4部分) 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,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, //輸出電壓從Z小值到0(正弦波1/4部分) 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, 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; for(x=z;x>0;x--) for(y=110;y>0;y--); } void triangle_out() //三角波輸出 { DAdata=triangle_tab[wavecount++]; if(wavecount>64) wavecount=0; DA_S1=0; //打開8位輸入寄存器 DA_S1=1; //關(guān)閉8位輸入寄存器 } void sine_out() //正弦波輸出 { DAdata=sine_tab[wavecount++]; DA_S1=0; //打開8位輸入寄存器 DA_S1=1; //關(guān)閉8位輸入寄存器 } void square_out() //方波輸出 { judge=~judge; if(judge==1) DAdata=0xff; else DAdata=0x00; DA_S1=0; //打開8位輸入寄存器 DA_S1=1; //關(guān)閉8位輸入寄存器 } /************1602液晶的相關(guān)函數(shù)*************/ #define lcd_ports P1 sbit rs=P2^2; sbit rw=P2^3; sbit lcden=P2^4; 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; delay(5); lcden=1; delay(5); lcden=0; } void disp_lcd(uchar addr,uchar *temp1) { uchar num; write_com(addr); delay(1); //延時(shí)一會(huì)兒??? for(num=0;num<16;num++) { write_date(temp1[num]);//或者這樣寫write_date(*(temp1+num)); delay(1); } } void init_lcd() { //uchar num; lcden=0; //可有可無??? rw=0; //初始化一定要設(shè)置為零,表示寫數(shù)據(jù) write_com(0x38); //使液晶顯示點(diǎn)陣,為下面做準(zhǔn)備 write_com(0x0c); //初始設(shè)置 write_com(0x06); //初始設(shè)置 write_com(0x01); //清零 write_com(0x80); //使指針指向diyi行diyi格 disp_lcd(0x80,&lcd_hang1[3*16]); //在diyi行顯示 disp_lcd(0xc0,&lcd_hang1[4*16]); //在第二行顯示 } /********************1602液晶函數(shù)聲明結(jié)束*********************/ void main() { uchar i=0; DA_S2=0; //使DAC寄存器處于直通狀態(tài) DAdata=0; DA_S1=1; //關(guān)閉8位輸入寄存器 init_lcd(); waveform=0; TMOD=0x01; //設(shè)置定時(shí)器0為16位工作方式 IT0=1; //設(shè)置外部中斷0為下降沿觸發(fā) ET0=1; //開定時(shí)器中斷 EX0=1; EA=1; while(1) { //DAout(0xff); //可輸出TTL波形 //DAout(0x80); //T_temp=32; } } void timer0() interrupt 1 { TH0=THtemp; TL0=TLtemp; if(waveform==0) sine_out(); else if(waveform==1) triangle_out(); else if(waveform==2) square_out(); } void key_int0() interrupt 0 { uchar keytemp; uint total_freq; //總頻率 EA=0; TR0=0; //關(guān)總中斷與定時(shí)器 delay(5); //延時(shí)夠嗎??? if(key==0) //確實(shí)有按鍵按下而引發(fā)中斷 { keytemp=P3&0xf0; //獲取P3口高四位的值 switch(keytemp) { case 0xe0: //選擇波形 waveform++; if(waveform>2) waveform=0; break; case 0xd0: //頻率按規(guī)定單位依次增加 wavefreq[waveform]++; if(wavefreq[waveform]>10) wavefreq[waveform]=1; // /*這邊要用“>10”,因?yàn)樗取?11”可靠 break; // 性更高,使加數(shù)有個(gè)上限,不會(huì)一直加下去*/ case 0xb0: //頻率按規(guī)定單位依次衰減 wavefreq[waveform]--; if(wavefreq[waveform]<1) wavefreq[waveform]=10; //這邊要用“<1”,因?yàn)樗取?0”可靠性更高 break; case 0x70: //TTL輸出 DA_S2=1; //使DAC寄存器關(guān)閉 break; } THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)]; //方括號(hào)中選取第幾個(gè)數(shù)后,并把該值賦給T_temp TLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)]; total_freq= wavefreq[waveform] * freq_unit[waveform]; //求輸出頻率(個(gè)數(shù)*單位) lcd_hang2[5]=total_freq%10+0x30; //在液晶中顯示個(gè)位,(0x30 在液晶顯示中表示數(shù)字0) total_freq/=10; lcd_hang2[4]=total_freq%10+0x30; //在液晶中顯示時(shí)十位 total_freq/=10; lcd_hang2[3]=total_freq%10+0x30; //在液晶中顯示時(shí)百位 total_freq/=10; lcd_hang2[2]=total_freq%10+0x30; //在液晶中顯示時(shí)千位 disp_lcd(0x80,&lcd_hang1[waveform*16]); //在diyi行顯示 disp_lcd(0xc0,lcd_hang2); //在第二行顯示 } wavecount=0; //'抽點(diǎn)'計(jì)數(shù)清零 while(!key); EA=1; TR0=1; //開啟總中斷與定時(shí)器 }
-
贊(12)
回復(fù)(0)
登錄或新用戶注冊(cè)
- 微信登錄
- 密碼登錄
- 短信登錄
請(qǐng)用手機(jī)微信掃描下方二維碼
快速登錄或注冊(cè)新賬號(hào)
微信掃碼,手機(jī)電腦聯(lián)動(dòng)
注冊(cè)登錄即表示同意《儀器網(wǎng)服務(wù)條款》和《隱私協(xié)議》
熱門問答
- 有沒有單片機(jī)低頻信號(hào)發(fā)生器的源代碼 求幫助
2018-07-18 07:40:09
289
1
- 課程設(shè)計(jì) 單片機(jī)低頻信號(hào)發(fā)生器設(shè)計(jì)
- 采用8031單片機(jī),DAC8032轉(zhuǎn)換器,實(shí)現(xiàn)占空比可調(diào)的方波發(fā)生器qq420332100急需謝謝... 采用8031單片機(jī),DAC8032轉(zhuǎn)換器,實(shí)現(xiàn)占空比可調(diào)的方波發(fā)生器 qq 420332100 急需 謝謝 展開
2010-07-04 05:30:39
312
2
- 求基于單片機(jī)的低頻信號(hào)發(fā)生器的原理圖和程序
- 需要的是4*4鍵盤DAC0832濾波電路放大電路AT89C51液晶顯示... 需要的是4*4鍵盤 DAC0832 濾波電路 放大電路 AT89C51 液晶顯示 展開
2015-04-15 00:58:46
259
2
- 100分求 低頻信號(hào)發(fā)生器的設(shè)計(jì)
- 設(shè)計(jì)要求:輸出信號(hào)為正弦信號(hào),信號(hào)頻率為8K--10K,頻率連續(xù)可調(diào);Z大輸出電壓為5V;同時(shí)要求數(shù)字顯示輸出電壓的大小,單位為伏特,精確到小數(shù)點(diǎn)后兩位。希望高手給出幾個(gè)方案供參考... 設(shè)計(jì)要求:輸出信號(hào)為正弦信號(hào),信號(hào)頻率為8K--10K,頻率連續(xù)可調(diào);Z大輸出電壓為5V;同時(shí)要求數(shù)字顯示輸出電壓的大小,單位為伏特,精確到小數(shù)點(diǎn)后兩位。 希望高手給出幾個(gè)方案供參考,希望有原理和電路圖。 萬分感謝。 要求有單元電路,不能用集成的芯片,求各位高人指點(diǎn),拜謝 展開
2009-01-06 17:40:52
474
3
- 求幾篇關(guān)于低頻信號(hào)發(fā)生器的外文文獻(xiàn)
- 幫個(gè)忙發(fā)下急用... 幫個(gè)忙發(fā)下急用 展開
2014-03-09 11:42:41
420
2
- 求“簡易低頻信號(hào)發(fā)生器”論文 有原理圖
2018-11-26 10:08:16
429
0
- 低頻信號(hào)發(fā)生器的用途?
2015-11-18 17:33:32
354
1
- 低頻信號(hào)發(fā)生器的主要用途?
2015-07-08 20:44:49
273
1
- 低頻信號(hào)發(fā)生器的設(shè)計(jì)
- 低頻信號(hào)發(fā)生器... 低頻信號(hào)發(fā)生器 展開
2016-11-30 13:17:16
439
1
- 低頻信號(hào)發(fā)生器的介紹
2018-11-18 01:48:05
263
0
- 低頻信號(hào)發(fā)生器是什么?
2015-09-28 07:11:20
344
1
- 低頻信號(hào)發(fā)生器原理?
2018-01-09 21:35:08
491
1
- 求用單片機(jī)制作簡易信號(hào)發(fā)生器的電路圖
- 采用單片機(jī)AT89C51及D/A轉(zhuǎn)換器0832設(shè)計(jì)信號(hào)發(fā)生器... 采用單片機(jī)AT89C51及D/A轉(zhuǎn)換器0832設(shè)計(jì)信號(hào)發(fā)生器 展開
2009-06-10 17:48:33
450
3
- 低頻信號(hào)發(fā)生器輸出的是什么???
- 請(qǐng)問低頻信號(hào)發(fā)生器輸出的到底是什么,電流還是電壓?還是什么都不是?能把這種輸出直接接在用電器上嗎?還是要用某種轉(zhuǎn)換器轉(zhuǎn)換一下?盼答!!菜鳥一只... 請(qǐng)問低頻信號(hào)發(fā)生器輸出的到底是什么,電流還是電壓?還是什么都不是? 能把這種輸出直接接在用電器上嗎?還是要用某種轉(zhuǎn)換器轉(zhuǎn)換一下? 盼答?。〔锁B一只 展開
2011-06-27 00:24:00
1001
4
- 低頻信號(hào)發(fā)生器的作用是什么?
2017-05-20 16:17:08
540
2
- 有關(guān)低頻信號(hào)發(fā)生器的論文范文
- 論文格式... 論文格式 展開
2009-02-19 10:34:56
494
2
- 低頻信號(hào)發(fā)生器的主要技術(shù)指標(biāo)
- 請(qǐng)幫幫忙啊... 請(qǐng)幫幫忙啊 展開
2011-06-27 04:46:17
521
2
- 示波器低頻信號(hào)發(fā)生器的連接
- 示波器低頻信號(hào)發(fā)生器的連接可不可以具體拍照給我看看,示波器的探頭是接在低頻信號(hào)發(fā)生器的哪里。... 示波器低頻信號(hào)發(fā)生器的連接可不可以具體拍照給我看看,示波器的探頭是接在低頻信號(hào)發(fā)生器的哪里。 展開
2017-09-22 03:11:17
442
1
- 低頻信號(hào)發(fā)生器的工作環(huán)境是?
2015-07-05 15:35:34
465
1
- 低頻信號(hào)發(fā)生器的產(chǎn)品特性
2018-11-18 12:12:05
459
0
4月突出貢獻(xiàn)榜
推薦主頁
最新話題





參與評(píng)論
登錄后參與評(píng)論