任务:使用单片机和DAC0832芯片生成锯齿拨波和方波,并在数码管上显示所生成波的频率.
设计要求:
1、电子仿真、测试电路。
2、独立完成课程设计报告,严禁报告内容雷同;
3、电路图中的图形符号必须符合国家或国际标准;
4、所有电路图的制作应采用电子CAD正确绘制;
5、报告内容完整,格式正确,A4纸张打印,字数不少于5000字。
说明:※符号表示提高要求。
课程设计内容与要求:
任务:使用单片机和DAC0832芯片生成锯齿拨波和方波,并在数码管上显示所生成波的频率
基本图:
0832的图解:
0032电路接法:
程序:
#include
unsigned char flag=0;
bit time;
sbit P32=P3^2;
unsigned char sin(unsigned char x){
unsigned char co
125,128,131,134,138,141,144,147,150, 153,156,159,162,165,168,171,174,177,180,182,
185,188,191,193,196,198,201,203,206,208,211,213,215,217,219,221,223,225,227,229,
231,232,234,235,237,238,239,241,242,243,244,245,246,246,247,248,248,249,249,250,
250,250,250,250,250,250,250,249,249,248,248,247,246,246,245,244,243,242,241,239,
238,237,235,234,232,231,229,227,225,223,221,219,217,215,213,211,208,206,203,201,
198,196,193,191,188,185,182,180,177,174,171,168,165,162,159,156,153,150,147,144,
141,138,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76,
73,70,68,65,62,59,57,54,52,49,47,44,42,39,37,35,33,31,29,27,25,23,21,19,18,16,15,
13,12,11,9,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,1,1,2,2,3,4,4,5,6,7,8,9,11,12,13,
15,16,18,19,21,23,25,27,29,31,33,35,37,39,42,44,47,49,52,54,57,59,62,65,68,70,73,
76,79,82,85,88,91,94,97,100,103,106,109,112,116,119,122}; //正弦波一个周期,按250个点取值。
return sin_tab[x]; //直接查表,并返回对应的正弦值
}
void delaynms(int n)
{
unsigned char i,k;
while(n--)
{
for(i=2;i>0;i--)
for(k=250;k>0;k--);
}
}
void DAC0832(unsigned char x)
{
P2=x;
}
void main()
{
unsigned char i;
TMOD=0X02;
TH0=256-50; // 晶振为12MHz时,定时为40us。
ET0=1;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
TR0=1;
flag=1;
i=0;
while(1)
{
if(time==1) // 时间到了
{
time=0;
if (i>249) i=0; else i++; //指向下一个点
switch(flag) // 判断标志
{
case 1:
DAC0832(0); // 状态1:输出之直波
P1=0X06;
break;
case 2: // 状态2:输出三角波
if(i>125) DAC0832(250-i);
else DAC0832(i);
P1=0X5B;
break;
case 3: // 状态3:输出正弦波
DAC0832(sin(i));
P1=0X4F;
break;
case 4: // 状态4:输出方波
DAC0832(0);
delaynms(5);
DAC0832(sin(43));
delaynms(5);
P1=0X66;
break;
}
}
}
}
void time0() interrupt 1
{
time=1; // 时间标志
}
void int0() interrupt 0
{
delaynms(5);
if(INT0==0)
flag++;
if(flag>4)
flag=1;
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』