找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1917|回复: 2
打印 上一主题 下一主题
收起左侧

如何用这个单片机ADC转换结果来控制LED灯?

[复制链接]
跳转到指定楼层
楼主
ID:847776 发表于 2021-6-3 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 忆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;}
     }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:311846 发表于 2021-6-4 14:15 | 只看该作者
     if(120<ADC_DATA<220) 谁教你这么写的?if(120<ADC_DATA && ADC_DATA <220)
回复

使用道具 举报

板凳
ID:883031 发表于 2021-6-4 16:09 | 只看该作者
楼上正解!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表