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

📄 main.c.110606143232

📁 很实用的单片机例程
💻 110606143232
字号:
//开发环境:HJ-1G HJ-3G 开发板+AVR增强包套装
//芯片:ATMEGA16A
//编译器:ICCV7
//编写:慧净电子
//网址:WWW.HLMCU.COM   QQ:121350852
//HJ-1G/3G开发板上的8个LED灯前后流动
//晶振:1M 12M
/*****************************************
* 慧净电子 *
* www.HLMCU.cn *
* 目    的:IO模拟音频 *
* 功    能:IO模拟音频 *
* 时钟频率:内部1M *
* 整    理:HLMCU *
* 修改日期:2008年08月8日 *
* 编译环境:ICC-AVR6.31 *
* 实验环境:HJ-2G 80AVR开发板 *
* 使用硬件:无源喇叭 杜邦线 *
* 结    果:音乐发声 *
* 操作要求:用杜邦线连接J7的第1脚和PD5端口上 *本程序只能发出 的 的 的声音。
*****************************************/
/*******************************************
  文件:BEEP.C
  环境:编译为ICC AVR6.31A,仿真为AVR Studio4.10 
  硬件:ATMEGA16芯片 外部晶振 12M
  日期:2008年8月8日 
  功能:驱动开发板上的蜂鸣器
  备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
/******************************************/
#include <iom16v.h>			//包含型号头文件
#include <macros.h>			//包含"位"操作头文件
#include <stdio.h>			//标准输入输出头文件
#include <HJ-1G_AVR.H>		//包含自定义常量头文件

#pragma interrupt_handler Timer1_Ov:10
/*-------------两只老虎-------------*/
const uchar MusicTable2[77]={13,2,  15,2,  17,2,   13,1,  0,1,  
                     13,2,  15,2,  17,2,   13,1,  0,1, 
                     17,2,  18,2,  20,2,    0,2,
                     17,2,  18,2,  20,2,    0,2,
                     20,1,  22,1,  20,1,   18,1,  17,2,  13,2,  
                     20,1,  22,1,  20,1,   18,1,  17,2,  13,2, 
                     15,2,   8,2,  13,2,    0,2,
                     15,2,   8,2,  13,2,    0,2,
                     0xff};                                      

/*-----------------新年好------------------*/
const uchar MusicTable1[129]={ 13,1,  13,1,  13,2,   8,2,//音符,拍数,  
                      17,1,  17,1,  17,2,  13,2,
                      13,1,  17,1,  20,2,  20,2,
                      18,1,  17,1,  15,2,   0,2,
                      15,1,  17,1,  18,2,  18,2,
                      17,1,  15,1,  17,2,  13,2,
                      13,1,  17,1,  15,2,   8,2,
                      12,1,  15,1,  13,2,   0,2,
                     
                      13,1,  13,1,  13,2,   8,2,//音符,拍数,  
                      17,1,  17,1,  17,2,  13,2,
                      13,1,  17,1,  20,2,  20,2,
                      18,1,  17,1,  15,2,   0,2,
                      15,1,  17,1,  18,2,  18,2,
                      17,1,  15,1,  17,2,  13,2,
                      13,1,  17,1,  15,2,   8,2,
                      12,1,  15,1,  13,2,   0,2,
                      0xff};
				  //0,   1,   #1,   2,   #2,   3,   4,   #4,   5,   #5,   6,   #6,   7,
uint ToneTable[37]={ZERO,DO_L,DOA_L,RE_L,REA_L,MI_L,FA_L,FAA_L,SO_L,SOA_L,LA_L,LAA_L,TI_L,
                         DO  ,DOA  ,RE  ,REA  ,MI  ,FA  ,FAA  ,SO  ,SOA  ,LA  ,LAA  ,TI  ,
                         DO_H,DOA_H,RE_H,REA_H,MI_H,FA_H,FAA_H,SO_H,SOA_H,LA_H,LAA_H,TI_H};
uint tone;						

/*******************************************
函数名称: Timer1_Ov
功    能: 定时器1溢出中断服务函数(完成单个音的产生)
参    数: 无
返回值  : 无
/********************************************/
void Timer1_Ov(void)
{
 if(tone)//若不是休止符,则发声
  {
     TCNT1=tone; 	  //计数值装入寄存器
     PORTC^=BIT(BEEP);//蜂鸣器接口电平翻转
  }
}
/*******************************************
函数名称: Timer1_init
功    能: Timer1的初始化
参    数: 无
返回值  : 无
/********************************************/
void Timer1_init(void)
{
 TCCR1C=0x00;   //普通端口操作
 TCCR1B=0x02;	//8分频  
 SREG|=0x80; 	//开放全局中断
}
/*******************************************
函数名称: Music
功    能: 完成整曲的音乐演奏
参    数: pmusic--曲谱数组指针
返回值  : 无
/********************************************/
void Music(const uchar *pMusic) 
{ 
  while(*pMusic!=0xFF) 			//0xFF为音乐结尾符 
    { 
      TIMSK=0x04;				//Timer1溢出中断使能      
      tone=ToneTable[*pMusic];  //取音调频率 
      TCNT1=tone;				//将频率值对应的计数值写入计时器,开始发声 
                
      pMusic++;					//乐谱音符指针+1 ,取拍数
      Delayms((*pMusic)*100);   //按拍数延时
      Delayms((*pMusic)*100);
      TIMSK=0x00;			   	//发声结束 ,屏蔽Timer1溢出中断
                
      pMusic++;					//乐谱音符指针+1 ,取下一音符
    } 
    Delayms(1000);    			//曲谱结束,等待                                            
}         
/*******************************************
函数名称: main
功    能: 演奏指定的音乐
参    数: 无
返回值  : 无
/********************************************/ 
void main(void) 
{    
	 Board_init( );	   //初始化开发板/    
	 Timer1_init();	   //Timer1初始化
     while(1) 
     { 
        Music(MusicTable2); //循环演奏歌曲(改变参数MusicTable1可以变换歌曲)
     } 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -