哪位帮我解答下代码功能,谢谢

2019-07-15 10:45发布

#include<reg52.h>#include<intrins.h>#include<iic.h>
#define uchar unsigned char#define uint unsigned int



sbit K1 = P2^6;                     //声音检测sbit K3 = P3^2;                        //模式选择按键


sbit LED  = P3^4;          //LED管脚
char Set_Sel = 0;/*---------------------------------------------------                         延时函数-----------------------------------------------------*/void delaym(uint q){        uint i,j;        for(i=0;i<q;i++)                for(j=0;j<120;j++);}//adc0832驱动程序sbit ADC0832_CS =P2^2;       //将CS位定义为P3.4引脚sbit ADC0832_CLK=P2^3;       //将CLK位定义为P3.3引脚sbit ADC0832_DIO=P2^0;       //将DIO位定义为P3.5引脚
unsigned char Read_ADC0832(unsigned char Ch){        unsigned char i,dat; //定义变量        ADC0832_CS=1;   //一个转换周期开始        ADC0832_CLK=0;  //为第一个脉冲作准备        ADC0832_CS=0;  //CS置0,片选有效
        ADC0832_DIO=1;    //DIO置1,规定的起始信号          ADC0832_CLK=1;   //第一个脉冲        ADC0832_CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平        ADC0832_DIO=1;   //DIO置1, 通道选择信号          ADC0832_CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0         ADC0832_CLK=0;   //第二个脉冲下降沿         ADC0832_DIO=Ch;   //DI置0,选择通道0        ADC0832_CLK=1;    //第三个脉冲        ADC0832_CLK=0;    //第三个脉冲下降沿         ADC0832_DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1        ADC0832_CLK=1;    //第四个脉冲        for(i=0;i<8;i++)  //高位在前        {                ADC0832_CLK=1;         //第四个脉冲                ADC0832_CLK=0;                 dat<<=1;       //将下面储存的低位数据向右移                dat|=(unsigned char)ADC0832_DIO;          //将输出数据DIO通过或运算储存在dat最低位         }                                          ADC0832_CS=1;          //片选无效         return dat;         //将读书的数据返回     }//LED亮度调节初始化函数void PWM_Init(void){    TMOD|= 0x11;        TH1 = 0xfe; //11.0592        TL1 = 0x33;        TR1  = 1;     IE =0x8A;        }//LED亮度调节程序 char  timer1,         Duty_Cnt;void T1zd(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断{        TH1 = 0xfe; //11.0592        TL1 = 0x33;    if(timer1 == 10)           {                timer1 = 0;                  LED = 0;         }         if(Duty_Cnt == timer1)                  {                         LED = 1;         }        timer1++; }//光照检测         进行PWM占空比转换int adc_value = 0;uchar adc_cnt = 0;uint  adc_add_value = 0; void Caluc_Value(void){  uchar        ad_value_temp;
  ad_value_temp = Read_ADC0832(0);  adc_add_value += ad_value_temp;    adc_cnt ++;  if(adc_cnt >= 20)  {                adc_value = adc_add_value / 20;                adc_value = 255 - adc_value;                                           //获取到光照强度                adc_cnt = 0;                adc_add_value = 0;
                Duty_Cnt =         8 - (adc_value / 10) * 4 / 10;                  //LED亮度等级        }                        
}

//声音检测char Cnt_V = 0;char Open_Flag = 0;char Sel_Fll = 0;void Key_Scan(){  if(!K3)                                                //模式设置按键检测到  {        delaym(10);
           Sel_Fll = !Sel_Fll;
        while(!K3)  ;  }  if(Sel_Fll == 0)                                  //模式0  光照控制  {          if(K1)          {           while(K1)           {                    LED = 1;        EA = 0;                   Open_Flag = 0;           }          }          else          {                 if(!Open_Flag){LED = 0;        EA = 1;}                 Open_Flag = 1;          }  }  else                                                      //模式1  声音控制  {  if(!K1)                                                            //声音检测  {        delaym(20);
           Cnt_V++;           Cnt_V %= 6;        if(Cnt_V == 1)                                  //第一次检测到        {           Duty_Cnt = 2;           LED = 0;        EA = 1;                }        else if(Cnt_V == 2)                     //第二次检测到                 亮度等级1        {          Duty_Cnt = 4;
        }        else if(Cnt_V == 3)                      //第三次检测到                   亮度等级2        {          Duty_Cnt = 6;
        }         else if(Cnt_V == 4)                           //第四次检测到          亮度等级3        {         Duty_Cnt = 8;
        }          else if(Cnt_V == 5)                                 //第五次检测到                          关闭LED        {          LED = 1;        EA = 0;                }        while(!K1)  ;

  }   }
} //主程序void main(){        PWM_Init();         EA = 1;         //PWM初始化                 while(1)        {                  Key_Scan();                        //声音检测及模式设置函数                if(Open_Flag && !Sel_Fll)           //光照控制模式                {                        Caluc_Value();                                  //光照转换为LED亮度等级                }        }}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。