不知道是什么问题,本人对蜂鸣器引脚不太确定,是引脚规定错误?蜂鸣器跳线帽没插?还是什么问题,请解决
#include <REGX52.H>
#include "Nixie.h"
#include "Key.h"
#include "Buzzer.h"
unsigned char KeyNum;
void main()
{
Nixie(1,0);
while(1)
{
KeyNum=Key();
if(KeyNum)
{
Buzzer_Timer(100);
Nixie(1,KeyNum);
}
}
}
Delay1ms
void Delay1ms(unsigned char xms) //@12.000MHz
{
unsigned char data i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
Key
#include <REGX52.H>
#include "Delay1ms.h"
unsigned char Key() //独立按键控制函数
{
unsigned char KeyNum;
if(P1_4==0) {Delay1ms(20);while(P1_4==0);Delay1ms(20);KeyNum=1;}
if(P1_5==0) {Delay1ms(20);while(P1_5==0);Delay1ms(20);KeyNum=2;}
if(P1_6==0) {Delay1ms(20);while(P1_6==0);Delay1ms(20);KeyNum=3;}
if(P1_7==0) {Delay1ms(20);while(P1_7==0);Delay1ms(20);KeyNum=4;}
if(P3_5==0) {Delay1ms(20);while(P3_5==0);Delay1ms(20);KeyNum=5;}
return KeyNum;
}
Nixie
#include <REGX52.H>
#include "Delay1ms.h"
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0~9对应段选端,A~F为0x77,0x7C,0x39,0x5E,0x79,0x71;0x00为空
void Nixie(unsigned char Location,Number) //晶体管显示函数
{
switch(Location)
{
case 1:P1_0=0;P1_1=0;P1_2=0;P1_3=1;break;
case 2:P1_0=0;P1_1=0;P1_2=1;P1_3=0;break;
case 3:P1_0=0;P1_1=1;P1_2=0;P1_3=0;break;
case 4:P1_0=1;P1_1=0;P1_2=0;P1_3=0;break;
}
P0=NixieTable[Number]; //只显示一个数,静态化显示无需清零
}
Buzzer
#include <REGX52.H>
#include <INTRINS.H> //_nop_需要
sbit Buzzer=P2^1;
void Buzzer_Delay500us() //@12.000MHz,蜂鸣器私有延时函数,延时500us
{
unsigned char data i;
_nop_();
i = 247;
while (--i);
}
void Buzzer_Timer(unsigned int ms) //蜂鸣器发声时长函数
{
unsigned int i;
for(i=0;i<=ms*2;i++)
{
Buzzer=!Buzzer; //无源蜂鸣器
Buzzer_Delay500us(); //每500us引脚电平取反,一周期为1ms,故频率为1000Hz(蜂鸣器频率为1000Hz)
}
}