标题: 如何用这个单片机ADC转换结果来控制LED灯? [打印本页]

作者: 忆1709    时间: 2021-6-3 16:17
标题: 如何用这个单片机ADC转换结果来控制LED灯?
本帖最后由 忆1709 于 2021-6-3 16:37 编辑

程序要实现的是使用STC15L408AD的ADC输入来控制LED灯亮灭,根据ADC输入的不同值,来控制不同的LED灯亮。
目前使用串口工具测试过,ADC转换值没有问题,ADC的输入端是10K的摇杆电位器,接到STC15的一路ADC;
为什么我用if语句判断没有效果,这里程序该怎么写?谢谢。
如下是我的程序:
#include <STC15W.h>
#include <intrins.h>
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_SPEEDHH 0x00
#define ADC_START 0x08
typedef unsigned char uchar;
typedef unsigned int uint;
void GetADC_Result(uchar ch);
void ADC_INIT();
uint ADC_DATA;
void delay_1ms(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
//*****ADC初始化函数*****//
void ADC_INIT()
{
                P1ASF =0xff;   
                ADC_RES=0;ADC_RESL=0;   //清除ADC结果寄存器
                ADC_CONTR|=ADC_POWER;   //开启ADC电源
                delay_1ms(20);      //延时20ms
}
//*****ADC转换函数*****//
void GetADC_Result(uchar ch)
{
  ADC_DATA=0;
  ADC_CONTR = ADC_POWER| ADC_SPEEDHH| ADC_START|ch; //电源开/90个CLK转换频率/开转换/设定通道
  _nop_();_nop_();_nop_();_nop_();
  while(ADC_CONTR&ADC_FLAG==0); //等待转换完成
  ADC_CONTR &= ~ADC_FLAG;  //清FLAG
  ADC_DATA=ADC_RES;
  ADC_DATA=ADC_RES<<2;
  ADC_DATA|=ADC_RESL;
}
/*************************************************************************************
功能:采集ADC的变化来控制P1口输出控制8个LED灯的变化
实现过程:采样ADC值===>比较ADC值===>根据ADC值所处范围不同,点亮不同的LED灯
*************************************************************************************/
void main()
{
    ADC_INIT();
    P10=0;P26=0;P27=0;P32=0;P34=0;P35=0;P36=0;P20=0;
    while(1)
    {
       uchar i;
       GetADC_Result(1); //1通道的ADC转换 ,摇杆电位器在量程内摆动,ADC值的范围是0到850
      if(ADC_DATA<100)         {P10=1;P26=0;P27=0;P32=0;P34=0;P35=0;P36=0;P20=0;}
      if(120<ADC_DATA<220) {P10=1;P26=1;P27=0;P32=0;P34=0;P35=0;P36=0;P20=0;}
      if(240<ADC_DATA<340) {P10=1;P26=1;P27=1;P32=0;P34=0;P35=0;P36=0;P20=0;}
      if(360<ADC_DATA<460) {P10=1;P26=1;P27=1;P32=1;P34=0;P35=0;P36=0;P20=0;}
      if(480<ADC_DATA<580) {P10=1;P26=1;P27=1;P32=1;P34=1;P35=0;P36=0;P20=0;}
      if(600<ADC_DATA<700) {P10=1;P26=1;P27=1;P32=1;P34=1;P35=1;P36=0;P20=0;}
      if(720<ADC_DATA<820) {P10=1;P26=1;P27=1;P32=1;P34=1;P35=1;P36=1;P20=0;}
      if(800<ADC_DAT)            {P10=1;P26=1;P27=1;P32=1;P34=1;P35=1;P36=1;P20=1;}
     }
}



作者: 权威人物    时间: 2021-6-4 14:15
     if(120<ADC_DATA<220) 谁教你这么写的?if(120<ADC_DATA && ADC_DATA <220)

作者: cn_zhx    时间: 2021-6-4 16:09
楼上正解!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1