简简单单蜂鸣器,让它发声没问题
我们在设置板子的时候要翻转
翻转IO口是因为使用了步进电机的多余的芯片管脚
我们翻转之后还想让它保持一段时间
就是先翻转500次 Delay(1)之后 就是最小的单位每隔1ms 周期就是2ms 频率就是500HZ文章来源地址https://www.toymoban.com/news/detail-594074.html
main.c
#include <REGX52.H>
#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 <REGX52.H>
#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 <REGX52.H>
#include<INTRINS.H>
//蜂鸣器端口
//蜂鸣器私有延时函数 延时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();
}
}
文章来源:https://www.toymoban.com/news/detail-594074.html
到了这里,关于【【51单片机的蜂鸣器发声】】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!