原创 市电检测(C51)

2011-8-5 00:36 927 4 4 分类: MCU/ 嵌入式

#include <reg52.h>    //包含头文件
#include <1602lcd.c>   //调用1602LCD函数库
#include <STC-ADC.c>   //调用ADC.C函数库
sbit beep=P2^0;
float k,k1,k2,k3,k0;
unsigned char n;
float ad1,Val_Av=0;
#define uchar unsigned char
#define uint unsigned int
//-------------------------------------------------
void delay_ms(unsigned int xms)  //1ms延时子程序

 unsigned int aa,bb;
 for(aa=xms;aa>0;aa--)
 for(bb=800;bb>0;bb--); 
}
//-------------------------------------------------
float Ad_Av(uchar channel)

 char num;
 for(num=100;num>0;num--)
 {  
  Val_Av=Val_Av*4.950/1022;    //单片机电源为5V,球其真实电压值
  Val_Av+=GetADCResult(channel=0);//100次采样集求和
 }
 

 Val_Av/=100.0;   //求平均值
 return(Val_Av);

void main()

  lcd_int();    //1602LCD初始化
  lcd_write_com(0x01);   //1602LCD清屏
  InitADC();             //Init ADC sfr
while(1)
 { 
    unsigned char channel;
    channel=0;
    Ad_Av();
       GetADCResult(channel); //进行某个通道的ADC采样
    lcd_locate(2,1);     //定位
       lcd_4_char(ADC_RES); //显示ADC采样获得的高8位的值

    lcd_locate(2,6);     //定位
    lcd_float(Val_Av); //显示ADC采样获得的低2位的值

       lcd_locate(2,13);     //定位
       lcd_4_char(ADC_RES*4+ADC_LOW2);//显示ADC采样获得的总值   

    k=(ADC_RES*4+ADC_LOW2)*4.950/1022;
       lcd_locate(1,1);     //定位
       lcd_float(k);  //将ADC的总值,根据电源电压,转化为ADC端口的输入电压值
     
    lcd_string(" V");
    lcd_locate(1,10);
   
    lcd_4_char(k*233/4.5);
    lcd_string(" V");
    if(k*233/4.5>230)
         beep=0;
      else if(k*233/4.5<160)
         beep=0;    
    else beep=1;      
    delay_ms(100); 
 }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /4 下一条