本帖最后由 忆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;}
}
}
|