AD转换/蜂鸣器

2019-07-15 13:49发布

以下代码是AD转换使光敏电阻阻值在数码管上显示,如果阻值大于100,则蜂鸣器响。。。。但是写完代码调试后发现蜂鸣器确实在响,但是响的声音非常微小,没有独立实现蜂鸣器时响的声音大,麻烦各位帮忙看看哪里出现了问题?

//光敏电阻报警设置
//AD转换,光敏电阻阻值在数码管上显示

#include<reg51.h>
#include<intrins.h>

//---重定义关键词---//

#define uchar unsigned char

#define uint  unsigned int

#define ulong  unsigned long

#define GPIO_DIG P0
//---定义使用的IO口---//
sbit CLK  = P3^0;          //时钟         
sbit CS   = P3^1;          //片选
sbit DIN  = P3^2;          //输入
sbit DOUT = P3^3;          //输出
sbit beep=P2^6;
uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);

//--定义全局变量--//
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char DisplayData[8];                //用来存放要显示的8位数的值
void DigDisplay(void);

void delay()
{
    char i,j;
            for(i; i > 0; i--)                 
        for(j = 200; j > 0; j--);
}

void SPI_Start(void)
{
        CLK = 0;
        CS  = 1;
        DIN = 1;
        CLK = 1;
        CS  = 0;               
}
/****************************************************************************
*函数名:SPI_Write
*输  入:dat:写入数据
*输  出:无
*功  能:使用SPI写入数据
****************************************************************************/

void SPI_Write(uchar dat)
{
        uchar i;
        CLK = 0;
        for(i=0; i<8; i++)
        {
                DIN = dat >> 7;          //放置最高位
                dat <<= 1;
                CLK = 0;                        //上升沿放置数据

                CLK = 1;

        }
}
/****************************************************************************
*函数名:SPI_Read
*输  入:无
*输  出:dat:读取 到的数据
*功  能:使用SPI读取数据
****************************************************************************/

uint SPI_Read(void)
{
        uint i, dat=0;
        CLK = 0;
        for(i=0; i<12; i++)                //接收12位数据
        {
                dat <<= 1;

                CLK = 1;
                CLK = 0;

                dat |= DOUT;

        }
        return dat;       
}

/****************************************************************************
*函数名:Read_AD_Data
*输  入:cmd:读取的X或者Y
*输  出:endValue:最终信号处理后返回的值
*功  能:读取触摸数据
****************************************************************************/
uint Read_AD_Data(uchar cmd)
{
        uchar i;
        uint AD_Value;
        CLK = 0;
        CS  = 0;
        SPI_Write(cmd);
        for(i=6; i>0; i--);         //延时等待转换结果
        CLK = 1;          //发送一个时钟周期,清除BUSY
        _nop_();
        _nop_();
        CLK = 0;
        _nop_();
        _nop_();
        AD_Value=SPI_Read();
        CS = 1;
        return AD_Value;       
}


void main(void)
{
        unsigned char altemp=100;
         
        uint temp,count;
        while(1)
        {
          if(count==50)
          {
                  count=0;
        //        temp = Read_AD_Data(0x94);                //   AIN0 电位器
        //        temp = Read_AD_Data(0xD4);                //   AIN1 热敏电阻
                temp = Read_AD_Data(0xA4);                //   AIN2 光敏电阻
        //        temp = Read_AD_Data(0xE4);                //   AIN3 外部输入
          }
          count++;
          
          DisplayData[0]=DIG_CODE[0];
          DisplayData[1]=DIG_CODE[0];
          DisplayData[2]=DIG_CODE[0];
          DisplayData[3]=DIG_CODE[0];

          DisplayData[4]=DIG_CODE[temp%10000/1000];
          DisplayData[5]=DIG_CODE[temp%1000/100];
          DisplayData[6]=DIG_CODE[temp%100/10];
          DisplayData[7]=DIG_CODE[temp%10/1];

          DigDisplay();
          if(temp>altemp)
          {
          beep=1;
          delay();
          beep=0;
          //delay();
          }
          else
          beep=0;
          
        }
}
void DigDisplay(void)
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<8;i++)
        {
                P1=table1[i];
                GPIO_DIG=DisplayData[i];//发送段码
                j=50;                                                 //扫描间隔时间设定
                while(j--);       
                GPIO_DIG=0x00;//消隐
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。