发 帖  
原厂入驻New
[问答]

这个ADC控制流水灯的问题?

2567 ADC 单片机
分享
stc15L408单片机的一路ADC采集电位器电压,根据转换出的不同ADC值来点亮不同的LED灯,这样可以实现拨电位器时有流水灯的效果,请问程序上怎么控制,我用if判断ADC值再去操作LED灯,实际测试发现不能正常使用,如下,不知道是哪的问题,还请高手指点。
   while(1)
     {
       GetADC_Result(1);
       if((ADC_DATA>0)&&(ADC_DATA<50))    {P10=0;P26=0;P27=0;P32=0;P34=0;P35=0;P36=0;P20=0;continue;}            
       if((ADC_DATA>90)&&(ADC_DATA<180))  {P10=1;P26=0;P27=0;P32=0;P34=0;P35=0;P36=0;P20=0;continue;}
       if((ADC_DATA>220)&&(ADC_DATA<310)) {P10=1;P26=1;P27=0;P32=0;P34=0;P35=0;P36=0;P20=0;continue;}     
       if((ADC_DATA>350)&&(ADC_DATA<440)) {P10=1;P26=1;P27=1;P32=0;P34=0;P35=0;P36=0;P20=0;continue;}      
       if((ADC_DATA>490)&&(ADC_DATA<580)) {P10=1;P26=1;P27=1;P32=1;P34=0;P35=0;P36=0;P20=0;continue;}               
       if((ADC_DATA>620)&&(ADC_DATA<710)) {P10=1;P26=1;P27=1;P32=1;P34=1;P35=0;P36=0;P20=0;continue;}     
       if((ADC_DATA>750)&&(ADC_DATA<840)) {P10=1;P26=1;P27=1;P32=1;P34=1;P35=1;P36=0;P20=0;continue;}     
       if((ADC_DATA>860)&&(ADC_DATA<900)) {P10=1;P26=1;P27=1;P32=1;P34=1;P35=1;P36=1;P20=0;continue;}     
       if((ADC_DATA>900)&&(ADC_DATA<950)) {P10=1;P26=1;P27=1;P32=1;P34=1;P35=1;P36=1;P20=1;continue;}     
     }

0
2021-6-4 11:47:38   评论 分享淘帖 邀请回答
1个回答
几个问题,判断用if else就可以,没必要用那么多continue, 或者用switch case看上去比较简洁。
获取的ADC值是否检验过?能否达到你的判断要求?有数码管的话,显示下ADC_DATA 的值
2021-6-4 15:14:18 1 评论

举报

1 条评论
  • 2021-6-4 16:00

    好的,谢谢提醒,用if else 或者switch case都有试试,因为找不到问题原因,这些都尝试了一遍。
    先说一下程序理想状态应该实现的功能:
    电位器未拨动时的状态是回中状态,ADC处于如下这个区间,此时默认亮前面3颗灯。
      if((ADC_DATA&gt;350)&amp;&amp;(ADC_DATA&lt;440)) {P10=1;P26=1;P27=1;P32=0;P34=0;P35=0;P36=0;P20=0;continue;}   
    电位器往上拨,随着ADC增大,顺序点亮后面的灯,往中位回归时再依次熄灭
    电位器往下拨,随着ADC减小,往P10方向顺序熄灭,往中位回归时再依次点亮。

    目前问题是摇杆电位器往上扳/回中,指示灯能正常跟随亮灭,往下扳时/回中,指示灯异常,异常现象是指示灯亮度将为一半的样子,不能完全熄灭,很是奇怪,灯断开测量IO口电压还有1.4V(正常我赋值0应该输出0V),不知道这个电压哪里来的,为什么软件不能操作其输出0V。实际验证测试让ADC_DATA从0开始++,8颗灯是可以正常亮灭的。
    至于你说的ADC是否检验过,实际测试ADC的值有些偏差但不大,应该不影响吧?如下是我测量的跟用PC串口工具读到的差异:

    拨动到最高位:电压2.722V,参考电压3.305V ===&gt;计算出理论ADC为843  实际收到的为D3 + 03 ===&gt;即847,偏差4个ADC

    拨动到最低位:电压0.001V,参考电压3.305V ===&gt;计算理论ADC为0   实际收到的为0 ,无偏差

    回中位:电压1.376V,参考电压3.305V  ===&gt;计算出理论ADC为426    实际收到的为6B + 03 ===&gt;即431  偏差5个ADC

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /5 下一条

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