⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sound.c

📁 51单片机用c语言实例 包括ad
💻 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 + -