我貼個代碼給你吧,用51的單片機來實現,也有詳細鏈接自己可以看看
#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 //用定時器來創造時鐘函數
{
CLK=~CLK;
}
uchar adc0808()
{
uchar t;
ST=0;
ST=1; //形成下跳脈沖信號,開啟ad
ST=0;
while(!EOC); //等待轉換完成
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; //開定時
ET0=1;
TMOD=0X02;
TH0=0Xff;
TL0=0Xff;
TR0=1;
while(1)
{
P0=0;
if(K1==0)
{
LEDB=0;
square(); //方波,藍燈
}
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;
}
}
————————————————
版權聲明:本文為CSDN博主「森嶼~~」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m0_62281625/article/details/122104086 |