【创新!】蜂鸣器,与感应电子琴[定时、中断、I/O高阻工作类型]

2015年10月2日


1、驱动有源/无源蜂鸣器,发出不同频率的声音

/*
工程创建MCU选取,Atmel 89C55
单片机:STC12C4052AD
晶振:12M
功能:驱动无源蜂鸣器
连接说明:BEEP正极接VCC,负极接到 MCU的P3^7
*/

#include <STC12C2052AD.H>
sbit BEEP = P3^7;
void DELAY_MS (unsigned int a) {
    unsigned int i;
    while ( --a != 0 )  {
        for (i=0;i<=600;i++);
    }
}

void main (void) {
	unsigned int i;
 	BEEP=1;

	while (1)	{
		for(i=0;i<100;i++){  //调整发音频率
			BEEP=1;
			DELAY_MS(2);
			BEEP=0;
			DELAY_MS(2);
		}
		for(i=0;i<100;i++){  //调整发音频率
			BEEP=1;
			DELAY_MS(3);
			BEEP=0;
			DELAY_MS(3);
		}
		for(i=0;i<100;i++){  //调整发音频率
			BEEP=1;
			DELAY_MS(4);
			BEEP=0;
			DELAY_MS(4);
		}
		for(i=0;i<100;i++){  //调整发音频率
			BEEP=1;
			DELAY_MS(5);
			BEEP=0;
			DELAY_MS(5);
		}
	}
}

2、用定时器与中断的方法制作8键电子琴C程序[VCC触发]

/*
工程创建MCU选取,Atmel 89C55
单片机:STC12C4052AD
晶振:12M
功能:用定时器与中断的方法制作8键电子琴C程序
连接说明:BEEP正极接VCC,负极接到 MCU的11脚P3 ^ 7,VCC触12脚到19脚BEEP响
*/
#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列单片机头文件 
sbit SPEAKER  = P3^7;
#define KEY  P1 
unsigned char MUSIC; 
unsigned char STH0;
unsigned char STL0;
unsigned int code tab[]={
64021,64103,64260,64400,//低音3开始 
64524,64580,64684,64777, 
64820,64898,64968,65030, 
65058,65110,65157,65178
}; 

void main(void){ 
	TMOD=0x01; //
	ET0=1;     //
	EA=1;      //开启总中断
	KEY = 0x00;
	while(1){ 
		if(KEY != 0x00){
		switch (KEY){//显示的列位置
				case 0x01://
					MUSIC = 7;
					break;//
				case 0x02://
					MUSIC = 6;
					break;//
				case 0x04://
					MUSIC = 5;
					break;//
				case 0x08://
					MUSIC = 4;
					break;//
				case 0x10://
					MUSIC = 3;
					break;//
				case 0x20://
					MUSIC = 2;
					break;//
				case 0x40://
					MUSIC = 1;
					break;//
				case 0x80://
					MUSIC = 0;
					break;//
				default:
					MUSIC = 0xff;
					break;//
		}
			if(MUSIC != 0xff){
    			STH0=tab[MUSIC]/256; 
    			STL0=tab[MUSIC]%256; 
    			TR0=1;
			}
		}else{ 
    		SPEAKER = 1;
			TR0=0;
		} 
    } 
} 

void t0(void) interrupt 1 using 0{ 
  TH0=STH0; 
  TL0=STL0; 
  SPEAKER=~SPEAKER; 
}





3、用定时器与中断的方法制作8键电子琴C程序[GND触发]

/*
工程创建MCU选取,Atmel 89C55
单片机:STC12C4052AD
晶振:12M
功能:用定时器与中断的方法制作8键电子琴C程序
连接说明:BEEP正极接VCC,负极接到 MCU的11脚P3 ^ 7,GND触12脚到19脚BEEP响
*/
#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列单片机头文件 
sbit SPEAKER  = P3^7;
#define KEY  P1 
unsigned char MUSIC; 
unsigned char STH0;
unsigned char STL0;
unsigned int code tab[]={
64021,64103,64260,64400,//低音3开始 
64524,64580,64684,64777, 
64820,64898,64968,65030, 
65058,65110,65157,65178
}; 

void main(void){ 
	TMOD=0x01; //
	ET0=1;     //
	EA=1;      //开启总中断
	while(1){ 
		if(KEY != 0xff){
		switch (~KEY){//显示的列位置
				case 0x01://
					MUSIC = 7;
					break;//
				case 0x02://
					MUSIC = 6;
					break;//
				case 0x04://
					MUSIC = 5;
					break;//
				case 0x08://
					MUSIC = 4;
					break;//
				case 0x10://
					MUSIC = 3;
					break;//
				case 0x20://
					MUSIC = 2;
					break;//
				case 0x40://
					MUSIC = 1;
					break;//
				case 0x80://
					MUSIC = 0;
					break;//
				default:
					MUSIC = 0xff;
					break;//
		}
			if(MUSIC != 0xff){
    			STH0=tab[MUSIC]/256; 
    			STL0=tab[MUSIC]%256; 
    			TR0=1;
			}
		}else{ 
    		SPEAKER = 1;
			TR0=0;
		} 
    } 
} 

void t0(void) interrupt 1 using 0{ 
  TH0=STH0; 
  TL0=STL0; 
  SPEAKER=~SPEAKER; 
}





4、用定时器与中断的方法制作[隔空感应]8键电子琴C程序

/*
工程创建MCU选取,Atmel 89C55
单片机:STC12C4052AD
晶振:12M
功能:用定时器与中断的方法制作8键电子琴C程序
连接说明:BEEP正极接VCC,负极接到 MCU的11脚P3 ^ 7,电脑USB供电隔空感应12脚到19脚,BEEP响
*/
#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列单片机头文件 
sbit SPEAKER  = P3^7;
#define KEY  P1 
unsigned char MUSIC; 
unsigned char STH0;
unsigned char STL0;
unsigned int code tab[]={
64021,64103,64260,64400,//低音3开始 
64524,64580,64684,64777, 
64820,64898,64968,65030, 
65058,65110,65157,65178
}; 

void main(void){ 
	TMOD=0x01; //
	ET0=1;     //
	EA=1;      //开启总中断
  P1M0 = 0xff; 
	P1M1 = 0x00;   //用电脑USB供电就是隔空感应12脚到19脚,BEEP响,前提是KEY = 0x00;如果KEY = 0xff;启用高阻,将全是噪音!
	KEY = 0x00;    //用移动电源供电就是触摸12脚到19脚BEEP响,前提是KEY = 0x00;如果KEY = 0xff;启用高阻,将全是噪音!
	while(1){ 
		if(KEY != 0x00){
		switch (KEY){//显示的列位置
				case 0x01://
					MUSIC = 7;
					break;//
				case 0x02://
					MUSIC = 6;
					break;//
				case 0x04://
					MUSIC = 5;
					break;//
				case 0x08://
					MUSIC = 4;
					break;//
				case 0x10://
					MUSIC = 3;
					break;//
				case 0x20://
					MUSIC = 2;
					break;//
				case 0x40://
					MUSIC = 1;
					break;//
				case 0x80://
					MUSIC = 0;
					break;//
				default:
					MUSIC = 0xff;
					break;//
		}
			if(MUSIC != 0xff){
    			STH0=tab[MUSIC]/256; 
    			STL0=tab[MUSIC]%256; 
    			TR0=1;
			}
		}else{ 
    		SPEAKER = 1;
			TR0=0;
		} 
    } 
} 

void t0(void) interrupt 1 using 0{ 
  TH0=STH0; 
  TL0=STL0; 
  SPEAKER=~SPEAKER; 
}

关于蜂鸣器,告一段落。



时间: 2024-11-21 01:33:53

【创新!】蜂鸣器,与感应电子琴[定时、中断、I/O高阻工作类型]的相关文章

Arduino的定时中断

之前写了一篇关于Arduino定时的帖子,Arduino函数库里面有外部中断的函数,但是关于内部中断的函数没有提及,本文拟采用Arduino 的定时中断写一个Blink的程序. 代码如下. 1 /******************************************************************************* 2 *** 3 *PROJECT CODE: 定时中断 * 4 *CREATE DATE : 2014/11/27 * 5 *CREATED B

智能车学习(十九)&mdash;&mdash;K60单片机定时中断学习

一.头文件 #ifndef _PIT_H_ #define _PIT_H_ extern uint32_t zero; //定义定时器 typedef enum PITn { PIT0, PIT1, PIT2, PIT3 } PITn; void pit_init(PITn, u32 cnt); //初始化PITn,并设置定时时间(单位为bus时钟周期) #define pit_init_ms(PITn,ms) pit_init(PITn,ms * bus_clk_khz); //初始化PITn

单片机IO口标准双向,推挽,高阻,开漏模式 ,LED感应亮灭实验【原创!】

单片机IO口标准双向,推挽,高阻,开漏模式 ,LED感应亮灭实验  十一长假在家快烂了,没事儿做,DIY技术搞起来!  [关于12C增强型单片机I/O口的工作类型实验研究] 文中动画视频效果下载: STC单片机头文件[51CTO-->单片机-->LED感应亮灭实验] 下载链接 链接:http://pan.baidu.com/s/1pJKK4w7   密码:a0re  1.用强推模式,点亮一个LED  /* 工程创建MCU选取,Atmel 89C55 单片机:STC12C4052AD 晶振:无要

STM32定时中断

0.STM32F103上测试 1. 0)时钟分配图 1)定时器的时钟不是直接来自于APB1或APB2,而来自其上面的倍频器 2)APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟.设置这个倍频器可以在保证其它外设使用较低时钟频率时 3.代码:使PG14,每隔一秒闪烁1次 #include <stm32f10x.h> void GPIO_Config(void); void NVIC_Config(void); void TIMER_Config(void); int main(v

DSP EPWM学习笔记1 - EPWM定时中断

彭会锋 75 #include "DSP28x_Project.h" // Device Headerfile and Examples Include File 77 78 // Select the example to compile in. Only one example should be set as 1 79 // the rest should be set as 0. 80 81 #define EXAMPLE1 1 // Basic pinout configur

AVR单片机教程——蜂鸣器

引子 定时/计数器(简称定时器)是单片机编程中至关重要的一部分,再简单的单片机也会带有定时器. 也许你会觉得我们已经在delay函数中接触过定时器了,然而并不是,它只是软件地通过"浪费时间"来实现延时.我们接触定时器在数码管中,segment_auto函数可以自动完成动态扫描,好像在main函数背后又开了一个线程,两者并行执行一样.这就用到了定时器中断. 中断是一种必要的程序流程控制方法,但这两讲我们先聚焦于利用定时器来输出波形. 本讲中,我们用定时器来输出一定频率的方波,让蜂鸣器发出

SylixOS周期定时抖动分析

1.概述 自动化与控制行业中有很多场景需要循环周期控制,而运动控制领域对循环周期控制的时间确定性要求尤为严格,周期抖动的时间确定性和周期控制的极限范围直接影响运动控制产品的质量和性能.SylixOS作为一款嵌入式实时操作系统,针对不同循环周期和不同程度的时间确定性要求均有对应的周期控制方式,其中就有为周期性任务解决多任务调度冲突并且时间确定性良好的速率单调调度(Rate Monotonic Scheduling RMS),还有传统的以硬件平台定时器作为中断源,以中断服务程序作为实时任务运行载体的

Linux 内核中断内幕【转】

转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/ 本文对中断系统进行了全面的分析与探讨,主要包括中断控制器.中断分类.中断亲和力.中断线程化与 SMP 中的中断迁徙等.首先对中断工作原理进行了简要分析,接着详细探讨了中断亲和力的实现原理,最后对中断线程化与非线程化中断之间的实现机理进行了对比分析. 3 评论: 苏 春艳, 在读研究生 杨 小华 ([email protected]), 在读研究生 2007 年 5

智能车学习(二十三)&mdash;&mdash;K60单片机注册中断函数

一.头文件: #ifndef __ISR_H #define __ISR_H 1 #include "include.h" /* 重新定义中断向量表 * 先取消默认的中断向量元素宏定义 #undef VECTOR_xxx * 在重新定义到自己编写的中断函数 #define VECTOR_xxx xxx_IRQHandler * 例如: * #undef VECTOR_003 * #define VECTOR_003 HardFault_Handler 重新定义硬件上访中断服务函数 *