• Meeke
    了解作者
  • C/C++
    开发工具
  • 58KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 46
    下载次数
  • 2015-03-30 10:17
    上传日期
MQ7一氧化碳传感器,模拟输出的电压经过STC12C5A60S2单片机内部自带的AD转换输出一个数字电压
MQ7-COsensor.zip
  • MQ7 一氧化碳传感器 20150324 串口输出
  • 模拟信号输出
  • MQ7.lnp
    38B
  • MQ7.uvopt
    5.8KB
  • MQ7.OBJ
    5.4KB
  • MQ7.uvgui.lenovo
    136.3KB
  • MQ7.uvproj
    13.1KB
  • MQ7.hex
    8.1KB
  • MQ7.uvgui_lenovo.bak
    136.2KB
  • MQ7.c
    2.4KB
  • MQ7
    8KB
  • MQ7.plg
    881B
  • MQ7.LST
    4.2KB
  • MQ7.M51
    9.9KB
  • TTL输出
  • MQ7.lnp
    38B
  • MQ7.uvopt
    4.9KB
  • MQ7.OBJ
    1.6KB
  • MQ7.uvgui.lenovo
    69.9KB
  • MQ7.uvproj
    13.1KB
  • MQ7.hex
    183B
  • MQ7.c
    2KB
  • MQ7
    1.5KB
  • MQ7.plg
    1.3KB
  • MQ7.LST
    3.6KB
  • MQ7.M51
    3.2KB
内容介绍
//****************************************STC12C5A60S2 AD转换***********************************************// #include <STC12C5A60S2.H> //用单片机自带的AD转换 #include <stdio.h> #include <intrins.h> //------------------------------------------------------------------------------ void AD_init(); void serial_init(); void delay(unsigned int a); float AD_work(unsigned char channel); unsigned int AD_get(unsigned char channel); //------------------------------------------------------------------------------ void main() { AD_init(); //A/D转换初始化 serial_init(); //串口初始化 while(1) { unsigned char i=0; TI=1; //使用printf函数前须先将发送标志位TI置1 printf("The P1.%bd voltage is %f\n",i,AD_work(i)); //采集P1.0口电压 TI=0; delay(5000); //延时约5s } } //------------------------------------------------------------------------------ unsigned int AD_get(unsigned char channel) { ADC_CONTR=0x88|channel; //开启AD转换1000 1000 即POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 _nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器 while(!(ADC_CONTR&0x10)); //等待转换完成 ADC_CONTR&=0xe7; //关闭AD转换,ADC_FLAG位由软件清0 return(ADC_RES*4+ADC_RESL); //返回AD转换完成的10位数据(16进制) } //------------------------------------------------------------------------------ float AD_work(unsigned char channel) { float AD_val; //定义处理后的数值AD_val为浮点数 unsigned char i; for(i=0;i<100;i++) AD_val+=AD_get(channel); //转换100次求平均值(提高精度) AD_val/=100; AD_val=(AD_val*5)/1024; //AD的参考电压是单片机上的5v,所以乘5即为实际电压值 return AD_val; } //------------------------------------------------------------------------------ void delay(unsigned int a) //延时约1ms { unsigned int i; while (--a!=0) for(i=600;i>0;i--); //1T单片机i=600,若是12T单片机i=125 } //------------------------------------------------------------------------------ void serial_init() { TMOD=0x20; TH1=0xf3; TL1=0xf3; //设置2400波特率 SCON=0x50; //串口方式1,允许接收 TR1=1; } //------------------------------------------------------------------------------ void AD_init() { P1ASF=0xff; //P1口全部作为模拟功能AD使用 ADC_RES=0; //清零转换结果寄存器高8位 ADC_RESL=0; //清零转换结果寄存器低2位 ADC_CONTR=0x80;//开启AD电源 delay(2); //等待1ms,让AD电源稳定 }
评论
  • MD 2020-05-18 18:04:05
    就是输出了一个AD电压值而已,没啥用,没有做转换
相关推荐