单片机中基于定时器的简易电子琴问题
时间:10-02
整理:3721RD
点击:
/* ch09-5-1.c- 简易电子琴实验 */
#include <reg51.h> // 包含reg51.h档
#define SW_Port P2 // 定义按键位置
sbit buzzer=P3^7; // 声明蜂鸣器位置
unsigned char keys; // 声明变量
unsigned char TH0_temp,TL0_temp;//声明计时相关变量
/* 声明音阶阵列 -- Do Re Mi Fa So La Si Do_H */
unsigned char code tone[]= {956, 852, 759, 716, 638, 568, 506, 478 };
void sound(unsigned char); // 声明发声函数
//====主程序=====================================
main() // 主程序开始
{
IE=0x82;//启动定时器0中断
TMOD=0x01;//选择Mode1模式
while (1) // while循环
{
buzzer=1;
keys=~SW_Port; // 读取按键
switch (keys) // 判读
{ case 0x01:sound(0);break; // 按下S1,发Do音
case 0x02:sound(1);break; // 按下S2,发Re音
case 0x04:sound(2);break; // 按下S3,发Mi音
case 0x08:sound(3);break; // 按下S4,发Fa音
case 0x10:sound(4);break; // 按下S5,发So音
case 0x20:sound(5);break; // 按下S6,发La音
case 0x40:sound(6);break; // 按下S7,发Si音
case 0x80:sound(7);break; // 按下S8,发高音Do音
default:TR0=0;break;
}
}
// while循环结束
} // 主程序结束
//=====发声函数=============================
void sound(unsigned char x) // 发声函数开始
{
LED=SW_Port; // 点亮LED
TH0_temp=(65536-tone[x])/256;
TH0=TH0_temp;
TL0_temp=(65536-tone[x])%256;
TL0=TL0_temp;
TR0=1;//启动定时器0
} // 结束
//======timer0中断子程序===============================
void timer0_int(void) interrupt 1
{
TH0=TH0_temp;
TL0=TL0_temp;
buzzer=~buzzer;
}
这是基于定时器的简易电子琴,想问一下为什么声音音调听起来是对的,但是特别嘈杂,又很尖锐的感觉,想问一下这是为什么?
#include <reg51.h> // 包含reg51.h档
#define SW_Port P2 // 定义按键位置
sbit buzzer=P3^7; // 声明蜂鸣器位置
unsigned char keys; // 声明变量
unsigned char TH0_temp,TL0_temp;//声明计时相关变量
/* 声明音阶阵列 -- Do Re Mi Fa So La Si Do_H */
unsigned char code tone[]= {956, 852, 759, 716, 638, 568, 506, 478 };
void sound(unsigned char); // 声明发声函数
//====主程序=====================================
main() // 主程序开始
{
IE=0x82;//启动定时器0中断
TMOD=0x01;//选择Mode1模式
while (1) // while循环
{
buzzer=1;
keys=~SW_Port; // 读取按键
switch (keys) // 判读
{ case 0x01:sound(0);break; // 按下S1,发Do音
case 0x02:sound(1);break; // 按下S2,发Re音
case 0x04:sound(2);break; // 按下S3,发Mi音
case 0x08:sound(3);break; // 按下S4,发Fa音
case 0x10:sound(4);break; // 按下S5,发So音
case 0x20:sound(5);break; // 按下S6,发La音
case 0x40:sound(6);break; // 按下S7,发Si音
case 0x80:sound(7);break; // 按下S8,发高音Do音
default:TR0=0;break;
}
}
// while循环结束
} // 主程序结束
//=====发声函数=============================
void sound(unsigned char x) // 发声函数开始
{
LED=SW_Port; // 点亮LED
TH0_temp=(65536-tone[x])/256;
TH0=TH0_temp;
TL0_temp=(65536-tone[x])%256;
TL0=TL0_temp;
TR0=1;//启动定时器0
} // 结束
//======timer0中断子程序===============================
void timer0_int(void) interrupt 1
{
TH0=TH0_temp;
TL0=TL0_temp;
buzzer=~buzzer;
}
这是基于定时器的简易电子琴,想问一下为什么声音音调听起来是对的,但是特别嘈杂,又很尖锐的感觉,想问一下这是为什么?