c语言正弦函波的2*pi*f,[转载]C语言查表法实现DA正弦波输出

// 呼呼.cpp : Defines the entry point for the console

application.

//

#include "stdafx.h"

#include

#define pi 3.1415926

int _tmain(int argc, _TCHAR* argv[])

{

FILE *fp=fopen("D:\t.txt","a+");

int i;

int shuzu[720];

for(i=0;i<720;i++)

{

double j = i * pi / 360;

double y = sin(j);

int z = 128 * y+128;

shuzu[i]=z;

fprintf(fp, "0x%x,",shuzu[i]);

}

return 0;

}

//--------分隔线-------------------

附2:半周期0-255正弦表[360点][分辨率0.5度]

0x0,0x2,0x4,0x6,0x8,0xb,0xd,0xf,0x11,0x14,0x16,0x18,0x1a,0x1c,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2e,0x30,0x32,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x53,0x55,0x57,0x59,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x67,0x69,0x6b,0x6d,0x6f,0x71,0x73,0x75,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x87,0x89,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x95,0x97,0x99,0x9b,0x9c,0x9e,0xa0,0xa2,0xa3,0xa5,0xa7,0xa8,0xaa,0xac,0xad,0xaf,0xb1,0xb2,0xb4,0xb5,0xb7,0xb8,0xba,0xbc,0xbd,0xbe,0xc0,0xc1,0xc3,0xc4,0xc6,0xc7,0xc8,0xca,0xcb,0xcc,0xce,0xcf,0xd0,0xd2,0xd3,0xd4,0xd5,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xdf,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xee,0xef,0xf0,0xf1,0xf1,0xf2,0xf3,0xf3,0xf4,0xf5,0xf5,0xf6,0xf6,0xf7,0xf7,0xf8,0xf8,0xf9,0xf9,0xfa,0xfa,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfb,0xfb,0xfb,0xfa,0xfa,0xf9,0xf9,0xf8,0xf8,0xf7,0xf7,0xf6,0xf6,0xf5,0xf5,0xf4,0xf3,0xf3,0xf2,0xf1,0xf1,0xf0,0xef,0xee,0xee,0xed,0xec,0xeb,0xea,0xe9,0xe8,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe2,0xe1,0xe0,0xdf,0xdd,0xdc,0xdb,0xda,0xd9,0xd8,0xd7,0xd5,0xd4,0xd3,0xd2,0xd0,0xcf,0xce,0xcc,0xcb,0xca,0xc8,0xc7,0xc6,0xc4,0xc3,0xc1,0xc0,0xbe,0xbd,0xbc,0xba,0xb8,0xb7,0xb5,0xb4,0xb2,0xb1,0xaf,0xad,0xac,0xaa,0xa8,0xa7,0xa5,0xa3,0xa2,0xa0,0x9e,0x9c,0x9b,0x99,0x97,0x95,0x94,0x92,0x90,0x8e,0x8c,0x8a,0x89,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71,0x6f,0x6d,0x6b,0x69,0x67,0x65,0x63,0x61,0x5f,0x5d,0x5b,0x59,0x57,0x55,0x53,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x44,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x32,0x30,0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1c,0x1a,0x18,0x16,0x14,0x11,0xf,0xd,0xb,0x8,0x6,0x4,0x2,0x0,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在单片机中,我们通常需要将产生的正弦数据转换为模拟信号,这时我们需要使用DA(Digital-to-Analog)转换器。下面是一份简单的代码示例,演示如何在单片机中产生正弦DA数据。 ```c #include <reg52.h> #include <math.h> #define PI 3.14159265 sbit DAC_CS = P1^4; // DA芯片的CS引脚 sbit DAC_CLK = P1^5; // DA芯片的CLK引脚 sbit DAC_DI = P1^6; // DA芯片的DI引脚 void delay_us(int us) // 延时函数 { while(us--); } void write_DAC(unsigned int data) // 写入DA数据 { int i; DAC_CS = 0; // 使能DA芯片 DAC_CLK = 0; for(i = 0; i < 16; i++) // 写入16位数据 { DAC_DI = (data & 0x8000) ? 1 : 0; data <<= 1; DAC_CLK = 1; delay_us(1); // 延时1us DAC_CLK = 0; delay_us(1); // 延时1us } DAC_CS = 1; // 禁用DA芯片 } void main() { double amplitude = 2048.0; // 振幅 double frequency = 50.0; // 频率 double phase = 0.0; // 相位 double time = 0.0; // 时间 double period = 1.0 / frequency; // 周期 double sample_rate = 1000.0; // 采样率 double sample_period = 1.0 / sample_rate; // 采样周期 int num_samples = (int)(period / sample_period); // 样本数 int i; while(1) { for(i = 0; i < num_samples; i++) { double value = amplitude * sin(2.0 * PI * frequency * time + phase); unsigned int data = (unsigned int)(value + 2048.0); // 转换为DA数据 write_DAC(data); // 写入DA数据 time += sample_period; } } } ``` 在上面的代码中,我们使用了51单片机的三个引脚(P1.4、P1.5、P1.6)来控制DA芯片的CS、CLK和DI引脚。我们使用write_DAC函数来将产生的正弦数据转换为DA数据,并输出DA芯片。在循环中,我们不断产生并输出正弦数据。需要注意,由于单片机的计算能力较弱,我们在产生正弦数据时应该尽可能使用硬件加速或简化计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值