📄 sound.c
字号:
/****************************************************************/
/* 文件名称: Sound.C */
/* 功能描述: 电子发生实验,演奏"友谊地久天长" */
/****************************************************************/
#include "SST89x5x4.h"
sbit POUT = P0^0; //扬声器控制引脚
#define Clk 0x070000
unsigned char data val_H; //计数器高字节
unsigned char data val_L; //计数器低字节
//频率表
unsigned int code freq_list[] = {371,495,495,495,624,556,495,556,624,
495,495,624,742,833,833,833,742,624,
624,495,556,495,556,624,495,416,416,
371,495,833,742,624,624,495,556,495,
556,833,742,624,624,742,833,990,742,
624,624,495,556,495,556,624,495,416,
416,371,495,0};
//时间表
unsigned char code time_list[]= {4, 6, 2, 4, 4, 6, 2, 4, 4, 6,
2, 4, 4,12, 1, 3, 6, 2, 4, 4,
6, 2, 4, 4, 6, 2, 4, 4,12, 4,
6, 2, 4, 4, 6, 2, 4, 4, 6, 2,
4, 4,12, 4, 6, 2, 4, 4, 6, 2,
4, 4, 6, 2, 4, 4,12};
void t0_isr() interrupt 1 //定时器0中断处理程序
{
POUT = ~POUT; //产生方波
TH0 = val_H; //重新装入计数值
TL0 = val_L;
}
void Delay(unsigned char cnt) //单位延时
{
unsigned char i;
unsigned int j;
for(i=0; i<cnt; i++)
{
for(j=0; j<0x3600; j++);
}
}
void main(void)
{
unsigned int val;
unsigned char i;
TMOD = 0x01; //初始化
IE = 0x82;
TR0 = 1;
while(1)
{
i = 0;
while(freq_list[i]) //频率为0重新开始
{
val = Clk/(freq_list[i]);
val = 0xFFFF - val; //计算计数值
val_H = (val>>8)&0xff;
val_L = val&0xff;
TH0 = val_H;
TL0 = val_L;
Delay(time_list[i]);
i++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -