熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-5-9 21:49
正文摘要:用單片機(jī)實(shí)現(xiàn)函數(shù)發(fā)生器功能 硬件:單片機(jī)+LCD1602+N個(gè)按鍵+4個(gè)LED燈+DAC0832。 基本要求: 按下按鍵可使DAC輸出不同波形(正弦波、三角波、鋸齒波、方波),對(duì)應(yīng)LED燈亮,且在LCD1602上顯示當(dāng)前波形信息。 1.LC ... |
謝謝各位的指導(dǎo),已經(jīng)寫出來了 |
我貼個(gè)代碼給你吧,用51的單片機(jī)來實(shí)現(xiàn),也有詳細(xì)鏈接自己可以看看 #include <reg52.h> #include <intrins.h> sbit OE=P3^0; sbit EOC=P3^1; sbit CLK=P3^4; sbit ST=P3^2; sbit K1=P1^4; sbit K2=P1^5; sbit K3=P1^6; sbit K4=P1^7; sbit LEDB=P1^0; sbit LEDG=P1^1; sbit LEDR=P1^2; sbit LEDY=P1^3; #define ADC P2 #define uchar unsigned char #define uint unsigned int uchar code sin[]={0,0,0,0,1,1,2,3,4,5,6,8, 9,11,13,15,17,19,22,24, 27,30,33,36,39,42,46,49, 53,56,60,64,68,72,76,80, 84,88,92,97,101,105,110, 114,119,123,128,132,136, 141,145,150,154,158,163, 167,171,175,179,183,187, 191,195,199,202,206,209, 213,216,219,222,225,228, 231,233,236,238,240,242, 244,246,247,249,250,251, 252,253,254,254,255,255,255}; void timer () interrupt 1 //用定時(shí)器來創(chuàng)造時(shí)鐘函數(shù) { CLK=~CLK; } uchar adc0808() { uchar t; ST=0; ST=1; //形成下跳脈沖信號(hào),開啟ad ST=0; while(!EOC); //等待轉(zhuǎn)換完成 OE=1; //允許輸出 t=ADC; //獲取輸出 return (t); } /**********方波*********/ void square() { uchar a,b; for(a=0;a<127;a++) { P0=0xff; P2=0xff; b=adc0808(); b=~b; while(b--); } for(a=0;a<127;a++) { P0=0x00; P2=0xff; b=adc0808(); b=~b; while(b--); } } /********鋸齒波*******/ void sawtooth() { uchar a,b; for(a=0;a<255;a++) { P0=a; P2=0xff; b=adc0808(); b=~b; while(b--); } } /*******三角波*******/ void triang() { uchar a,b; for(a=0;a<254;a=a+2) { P0=a; P2=0xff; b=adc0808(); b=~b; while(b--); } for(a;a>1;a=a-2) { P0=a; P2=0xff; b=adc0808(); b=~b; while(b--); } } /*******正弦波******/ void sinwave() { uchar a,b; for(a=0;a<92;a++) { P0=sin[a]; P2=0xff; b=adc0808(); b=~b; while(b--); } for(a=a-1;a>0;a--) { P0=sin[a]; P2=0xff; b=adc0808(); b=~b; while(b--); } } main() { EA=1; //開定時(shí) ET0=1; TMOD=0X02; TH0=0Xff; TL0=0Xff; TR0=1; while(1) { P0=0; if(K1==0) { LEDB=0; square(); //方波,藍(lán)燈 } LEDB=1; if(K2==0) { LEDG=0; sawtooth(); //鋸齒波,綠燈 } LEDG=1; if(K3==0) { LEDR=0; triang(); //三角波, 紅燈 } LEDR=1; if(K4==0) { LEDY=0; sinwave(); //正弦波,黃燈 } LEDY=1; } } ———————————————— 版權(quán)聲明:本文為CSDN博主「森嶼~~」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/m0_62281625/article/details/122104086 |
Powered by 單片機(jī)教程網(wǎng)