单片机信号发生器,一般是通过控制单片机的IO的高低电平来实现的,具体为
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、雅安服务器托管、营销软件、网站建设、泾川网站维护、网站推广。
1,可以通过先配置一个管脚为输出,然后给这个管脚写0,输出就为低电平,然后写1,这个管脚就输出为高电平。如果你的单片机是3.3v供电的话,那么高电平一般为3.3V,低电平一般为0v。
2,如果要产生一个方波的话,需要先输出1,然后延迟一段时间,然后再输出0,然后再延迟一段时间,然后输出1.... 要如此反复的话,可以用while(1), 然后在while(1)里面写入你的置高,延迟,置低的代码,具体伪代码可以为
配置对应输出管脚为输出; //因为管脚可以配置为输出和输入,所以需要先配置为输出
while(1)
{
对对应输出管脚置高;
sleep(半个周期的时间);
对对应输出管脚置低;
sleep(半个周期的时间);
}
3, 如果你牵涉到高级应用的话,比如要输出一个正弦波,那么需要外加信号产生芯片,比如DDS芯片。
4,如果还需要更加复杂的信号,任意波形的,可以用一个片内DA按照你的意思输出对应的电平,或者片外DA来输出。
#includereg51.h
#includeabsacc.h
#includeMAX72191.h
#defineDAC XBYTE[0x7fff] //P2.7接CS
sbitkey0 = P3^2;// 增减切换键
sbitkey1 = P3^3;//个位,十位,百位,千位的控制切换
sbitkey2 = P3^4;// 调整位
sbitkey3 = P3^5;// 波形选择正弦、三角、矩形波,锯齿波
unsignedchar i,j;
unsignedint counter,step,flag;
typedefunsigned int uint;
//定时器0初始化
voidInit_Timer0(void)
{
TMOD = (TMOD 0XF0) | 0X01;//设置工作方式和定时初始值
TH0 = 0xff;
TL0 = 0x00;
TR0 =1; //启动定时器
ET0 =1;
}
//定义输出波形的代码
unsignedchar code type[4][256]={
{ //正弦波代码
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8,
0x9, 0xb,0xc, 0xd, 0xf, 0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x39,0x3b,0x3e,0x41,0x43,0x46,0x49,0x4c,
0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x7a,0x7d,
0x80,0x83,0x86,0x89,0x8c,0x8f,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb1,0xb4,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xeb,0xed,0xef,0xf0,0xf1,0xf3,0xf4,
0xf5,0xf6,0xf8,0xf9,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf9,0xf8,0xf6,0xf5,
0xf4,0xf3,0xf1,0xf0,0xef,0xed,0xeb,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,0xda,
0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,
0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x8f,0x8c,0x89,0x86,0x83,0x80,
0x7d,0x7a,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,
0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,
0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0xf,0xd, 0xc, 0xb, 0x9,
0x8,0x7, 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1, 0x1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //三角波代码
0x2,0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10,0x12,0x14, 0x16, 0x18, 0x1a,0x1c, 0x1e, 0x20,
0x22,0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30,0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40,
0x42,0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50,0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60,
0x62,0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70,0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80,
0x82,0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90,0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0,
0xa2,0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0,0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc,0xbe, 0xc0,
0xc2,0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0,0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc,0xde, 0xe0,
0xe2,0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0,0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc,0xfe, 0xff,
0xfe,0xfc, 0xfa, 0xf8, 0xf6, 0xf4, 0xf2, 0xf0,0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe4,0xe2, 0xe0,
0xde,0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd2, 0xd0,0xce, 0xcc, 0xca, 0xc8, 0xc6, 0xc4,0xc2, 0xc0,
0xbe,0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0,0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa4,0xa2, 0xa0,
0x9e, 0x9c, 0x9a, 0x98, 0x96, 0x94, 0x92, 0x90,0x8e, 0x8c, 0x8a, 0x88, 0x86, 0x84, 0x82, 0x80,
0x7e, 0x7c, 0x7a, 0x78, 0x76, 0x74, 0x72, 0x70,0x6e, 0x6c, 0x6a, 0x68, 0x66, 0x64, 0x62, 0x60,
0x5e, 0x5c, 0x5a, 0x58, 0x56, 0x54, 0x52, 0x50,0x4e, 0x4c, 0x4a, 0x48, 0x46, 0x44, 0x42, 0x40,
0x3e, 0x3c, 0x3a, 0x38, 0x36, 0x34, 0x32, 0x30,0x2e, 0x2c, 0x2a, 0x28, 0x26, 0x24, 0x22, 0x20,
0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10,0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2, 0x00
},
{// 矩形脉冲波代码
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
},
{//锯齿波代码
0x00,0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08,0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10,0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,0x18,0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20,0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,0x28,0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38,0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40,0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,0x48,0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50,0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58,0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60,0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,0x68,0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70,0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78,0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80,0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,0x88,0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90,0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,0x98,0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0,0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,0xa8,0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0,0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,0xb8,0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0,0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,0xc8,0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0,0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,0xd8,0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0,0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,0xe8,0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0,0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,0xf8,0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}
};
//显示子函数
Disp7219(unsignedlong dat)
{
unsigned char i;
unsigned char led[8];
led[7]=dat%10;
led[6]=dat/10%10;
led[5]=dat/100%10;
led[4]=dat/1000%10;
led[3]=dat/10000%10;
led[2]=dat/100000%10;
led[1]=dat/1000000%10;
led[0]=dat/10000000%10;
for(i=0;i8;i++)
{
max_7219(i+1, led[i]);
}
}
//延时约1m秒
voiddelay_ms(uint n)
{
uchar j;
while(n--)
for(j=0;j120;j++);
}
//主函数
main()
{
unsigned int f,n,j;
delay_ms(500);
Init_Max7219();//初始化7219
Disp7219(000);
Init_Timer0();
step=18;
EA = 1;
while(1)
{
if(key0 == 0) n=n+1;
if(n==2)n=0;
if(key1==0) j=j+1;
if(j==4) j=0;
if(n==0 j == 0 key2 == 0) if(step180) step+=18; //个位增
if(n==1 j == 0 key2 == 0) if(step18) step-=18; //个位减
if(n==0 j == 1 key2 == 0) if(step1800) step+=180;//十位增
if(n==1 j == 1 key2 == 0) if(step180) step-=180; //十位减
if(n==0 j == 2 key2 == 0) if(step18000) step+=1800;//百位增
if(n==1 j == 2 key2 == 0) if(step1800) step-=1800;//百位减
if(n==0 j == 3 key2 == 0) if(step54000) step+=18000;//千位增
if(n==1 j == 3 key2 == 0) if(step18000) step-=18000;//千位减
if(key3==0)flag=flag+1;if(flag==4)flag=0;
while((!key0)||(!key1)||(!key2)||(!key3));
f=step/18;
Disp7219(f);}//显示频率
}
// 定时中断服务
voidTimer0(void) interrupt 1 using 2
{
TH0 = 0xff;
TL0 = 0x00;
counter = counter + step;
DAC=type[flag][(unsignedint)counter8];
}
你贴的代码里那几个数组没有用到啊,暂时不知道干什么的,初步猜测估计是液晶的点阵数据,main函数里也就是初始化了定时器和lcd液晶屏,不停的扫描按键键值,定时中断里应该还有很多东西,这里看不到。
需要问具体的话可以把程序发我邮箱吧:cxz1088cxz@vip.qq.com
我没做过正弦波和三角波,我认为正弦波做的话用带DA功能的单片机,但是你没说正弦波的频率和赋值,三角波也可以用DA做,方波就很简单了用拉高活拉低口线就可以了。你直接用单片机做,不用外围电路吗??
文章标题:c语言实现函数信号发生器 利用函数信号发生器产生输入信号
标题网址:https://www.cdcxhl.com/article48/ddccgep.html
成都网站建设公司_创新互联,为您提供网站策划、域名注册、商城网站、响应式网站、网站内链、网站营销
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联