51单片机c语言正弦波,用51单片机产生正弦波,那个数据表怎么得到的?谢谢!...

用51单片机产生正弦波,那个数据表怎么得到的?谢谢!0

00e27ab806e4881f8254fe7ae8741834.png卐卐卐鼒2013.08.31浏览164次分享举报

unsigned char code Sin[256]={ //正弦波编码

0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96,

0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,

0xB1,0xB4,0xB7,0xBA,0xBC,0xBF,0xC2,0xC5,

0xC7,0xCA,0xCC,0xCF,0xD1,0xD4,0xD6,0xD8,

0xDA,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,

0xEA,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,

0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,

0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,

0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,

0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEA,

0xE9,0xE7,0xE5,0xE3,0xE1,0xDE,0xDD,0xDA,

0xD8,0xD6,0xD4,0xD1,0xCF,0xCC,0xCA,0xC7,

0xC5,0xC2,0xBF,0xBC,0xBA,0xB7,0xB4,0xB1,

0xAE,0xAB,0xA8,0xA5,0xA2,0x9F,0x9C,0x99,

0x96,0x93,0x90,0x8D,0x89,0x86,0x83,0x80,

0x80,0x7C,0x79,0x78,0x72,0x6F,0x6C,0x69,

0x66,0x63,0x60,0x5D,0x5A,0x57,0x55,0x51,

0x4E,0x4C,0x48,0x45,0x43,0x40,0x3D,0x3A,

0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,

0x25,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,

0x15,0x13,0x11,0x10,0x0E,0x0D,0x0B,0x0A,

.... ....

}

比如最前面的数据 0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96

是怎么得到的?比如最前面的数据 0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96

是怎么得到的?

还有如何得到三角波和锯齿波的,如果用DAc0832的话

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的51单片机上实现SPWM正弦波逆变的C代码示例: ```c #include <reg51.h> // 定义正弦波表 unsigned char sinTable[] = { 127, 141, 155, 168, 181, 194, 205, 216, 226, 235, 242, 248, 252, 254, 255, 254, 252, 248, 242, 235, 226, 216, 205, 194, 181, 168, 155, 141, 127, 113, 99, 86, 73, 60, 49, 38, 28, 19, 12, 6, 2, 0, 0, 0, 2, 6, 12, 19, 28, 38, 49, 60, 73, 86, 99, 113 }; // 定义PWM输出引脚 sbit pwmPin = P1^0; // 延时函数 void delay(unsigned int time) { unsigned int i,j; for(i=0;i<time;i++) for(j=0;j<120;j++); } // 初始化PWM void initPWM() { TMOD |= 0x01; // 设置定时器0为16位定时器模式 TH0 = sinTable[0]; // 设置初始计数值为正弦波表的第一个值 TL0 = sinTable[0]; ET0 = 1; // 允许定时器0中断 TR0 = 1; // 启动定时器0 EA = 1; // 允许总中断 } // 定时器0中断处理函数 void timer0_ISR() interrupt 1 { static unsigned char index = 0; pwmPin = 1; // 设置PWM引脚为高电平 TH0 = sinTable[index]; // 更新计数器值为下一个正弦波表的值 TL0 = sinTable[index]; index++; if (index >= sizeof(sinTable)) { index = 0; } } // 主函数 int main() { initPWM(); // 初始化PWM while(1) { delay(100); // 控制输出频率 } return 0; } ``` 请注意,这只是一个简单的示例代码,仅供参考。要根据您的具体需求进行适当修改和优化。此外,还需要根据您的硬件接口和外部电路设计来配置相应的引脚和定时器。建议您阅读51单片机的相关文档和资料,以了解更多关于PWM和定时器的详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值