51单片机波形发生器51c语言,51单片机波形发生器程序设计及Proteus仿真
时间: 2024-01-04 11:04:49 浏览: 63
好的,以下是一个基本的51单片机波形发生器的程序,可供参考:
```c
#include <reg51.h>
#define FREQ 1000 // 波形频率
#define AMP 127 // 波形幅度
unsigned char wave[] = { // 正弦波数据表
127, 136, 145, 154, 163, 172, 180, 189,
197, 205, 213, 220, 228, 235, 241, 247,
253, 258, 263, 268, 272, 276, 279, 282,
285, 287, 288, 290, 290, 291, 291, 291,
290, 290, 288, 287, 285, 282, 279, 276,
272, 268, 263, 258, 253, 247, 241, 235,
228, 220, 213, 205, 197, 189, 180, 172,
163, 154, 145, 136, 127, 118, 109, 100,
91, 82, 74, 65, 57, 49, 41, 34,
26, 19, 13, 7, 1, 0, 0, 0,
1, 1, 3, 4, 6, 9, 12, 15,
19, 23, 28, 33, 38, 44, 50, 57,
64, 71, 79, 87, 95, 104, 113, 122,
131, 141, 151, 161, 171, 181, 191, 201,
211, 221, 230, 240, 249, 258, 267, 275,
284, 292, 299, 307, 314, 321, 327, 333,
339, 344, 349, 353, 357, 360, 363, 365,
367, 368, 369, 369, 369, 368, 367, 365,
363, 360, 357, 353, 349, 344, 339, 333,
327, 321, 314, 307, 299, 292, 284, 275,
267, 258, 249, 240, 230, 221, 211, 201,
191, 181, 171, 161, 151, 141, 131, 122,
113, 104, 95, 87, 79, 71, 64, 57,
50, 44, 38, 33, 28, 23, 19, 15,
12, 9, 6, 4, 3, 1, 1, 0,
0, 0, 1, 7, 13, 19, 26, 34,
41, 49, 57, 65, 74, 82, 91, 100,
109, 118
};
void main() {
unsigned char i = 0; // 波形数据计数器
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0 - (FREQ / 1000000.0 * 12 / 2); // 定时器0初始值
TL0 = TH0; // 定时器0初始值
TR0 = 1; // 启动定时器0
P1 = AMP; // 初始化输出端口
while (1) {
if (TF0) { // 定时器0溢出中断
TF0 = 0; // 清除定时器0溢出标志
TH0 = 0 - (FREQ / 1000000.0 * 12 / 2); // 重新设置定时器0初始值
TL0 = TH0; // 重新设置定时器0初始值
P1 = wave[i++]; // 输出波形数据
if (i >= sizeof(wave)) { // 数据计数器溢出
i = 0; // 重新开始输出
}
}
}
}
```
上述程序实现了一个输出正弦波的波形发生器,输出频率和幅度可以自行修改。在程序中,通过定时器0的溢出中断来触发波形数据的输出,通过P1口输出波形数据。在实际的应用中,可以根据需要对程序进行调整和优化。
关于Proteus仿真,您可以通过建立相应电路并将程序下载到单片机中进行仿真。在仿真过程中,可以通过示波器等工具来观察波形输出情况。
阅读全文