【【51单片机的蜂鸣器发声】】

简简单单蜂鸣器,让它发声没问题

我们在设置板子的时候要翻转
翻转IO口是因为使用了步进电机的多余的芯片管脚
我们翻转之后还想让它保持一段时间
就是先翻转500次 Delay(1)之后 就是最小的单位每隔1ms 周期就是2ms 频率就是500HZ

main.c

#include 
#include"Delay.h"
#include"key.h"
#include"Nixie.h"
#include"Buzzer.h"



unsigned char KeyNum;


void main()
{
	Nixie(1,0);
	while(1)
	{
		
		KeyNum=key();
		if(KeyNum)
		{
			
		
			Buzzer_Time(1000);
			Nixie(1,KeyNum);
			}	
					
			
		}

}

key.c

#include 
#include"Delay.h"
//获取独立按键键码
//无参数
//返回值为按下的那个按键
unsigned char key()
{
	unsigned char keynumber=0;
	if(P3_1==0) { Delay(20);while(P3_1==0);Delay(20);keynumber=1;}
		if(P3_0==0) { Delay(20);while(P3_0==0);Delay(20);keynumber=2;}
		if(P3_2==0) { Delay(20);while(P3_2==0);Delay(20);keynumber=3;}
		if(P3_3==0) { Delay(20);while(P3_3==0);Delay(20);keynumber=4;}
	
	return keynumber;
}

Delay.c

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

key.h

#ifndef __KEY_H_
#define __KEY_H_

unsigned char key();

#endif

Delay.h

#ifndef __DELAY_H__
#define __DELAY_H__

void Delay(unsigned int xms);

#endif

Nixie.c

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//数码管显示子函数
void Nixie(unsigned char Location,Number)
{
	switch(Location)		//位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];	//段码输出
	//Delay(1);				//显示一段时间
	//P0=0x00;				//段码清0,消影
}

Nixie.h

#ifndef __NIXIE_H__
#define __NIXIE_H__

void Nixie(unsigned char Location,Number);

#endif

Buzzer.h

#ifndef __BUZZER_H_
#define __BUZZER_H_

void Buzzer_Time(unsigned int ms);

#endif

Buzzer.c

#include 
#include


//蜂鸣器端口   
//蜂鸣器私有延时函数 延时500us



sbit Buzzer=P2^5;

void Buzzer_Delay500us()		//@12.000MHz
{
	unsigned char i;

	_nop_();
	i = 247;
	while (--i);
}

//蜂鸣器发声
//参数是ms 发声时长
//返回值 无 





void Buzzer_Time(unsigned int ms)
  {  
		unsigned int i;
		for(i=0;i<ms*2;i++)
			{
			Buzzer=!Buzzer;
		Buzzer_Delay500us();
			
			}	
			
			
		}

你可能感兴趣的:(51单片机学习,51单片机,算法,嵌入式硬件)