📄 复件 信号发生器.c
字号:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define DAC0832 XBYTE[0XFE00]
uchar bdata flag1=0;
uchar waveno=0; //选择信号类型
sbit start =flag1^0; //用在遇外问中断时,结束原信号的标志
uchar code duan_table[]={0xc0,0x9f,0xb0,0xc8}; //显示1,2,3,4
void squarewave(void); //方波
void sawtoothwave(void); //锯齿波1
void trianglewave(void); //三角波2
void sinwave(void);//正弦波 3
void main(void)
{
IT0=0;//电平触发方式
EA=1;
EX0=1;//开外部0中断
while(1)
{ switch(waveno)
{ case 0 : squarewave();break;
case 1: sawtoothwave();break;
case 2: trianglewave();break;
case 3: sinwave(); break;
default : break;
}
} }
void ex0_int() interrupt 0 using 1//外部0中断入口
{
++waveno;
P1=duan_table[waveno];//模式显示
if(waveno>=4) waveno=0;
start=1;//使程序跳出原来一种模工的信号
}
void squarewave(void)
{
uchar i;
start=0;
while(~start)
{ DAC0832=0xff;
P1=duan_table[waveno];
for(i=0;i<255;i++);
DAC0832=0X00;
P1=duan_table[waveno];
for(i=0;i<255;i++);
}
}
void sawtoothwave(void)
{ unsigned char i;
start=0;
while(~start)
{ for(i=0;i<255;i++)
{ DAC0832=i;
P1=duan_table[waveno];
}
}
}
void trianglewave(void)
{ uchar i;
start=0;
while(~start)
{ P1=duan_table[waveno];
for(i=0;i<255;i++)
DAC0832=i;
P1=duan_table[waveno];
for (i=0;i<255;i++)
DAC0832=i;
}
}
void sinwave(void)
{
uchar i;
uchar code sin_table[]={0x7f,0x89,0x94,0x9f,0xaa,0xb4,0xbe,0xc8,0xd1,0xd9,
0xe0,0xe7,0xed,0xf2,0xf7,0xfa,0xfc,0xfe,0xff};
start=0;
while(~start)
{ for(i=0;i<18;i++)
DAC0832=sin_table[i];
P1=duan_table[waveno];
for(i=18;i>0;i--)
DAC0832=sin_table[i];
for(i=0;i<18;i++)
DAC0832=-sin_table[i];
for(i=18;i>0;i--)
DAC0832=-sin_table[i];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -