标题: 求助帖 关于单片机的简单程序问题,我死活想不通 [打印本页]

作者: SOPHHANA    时间: 2018-9-20 10:08
标题: 求助帖 关于单片机的简单程序问题,我死活想不通
这段程序,led bee 和wind heat reve 五个同样的定义 ,同样在P1口,程序也放在一起,led bee能够正确的输出0或1,wind heat reve也就是P1.5 P1.6 P1.7这三个端口的输出电压始终是0.17V

1.png (27.73 KB, 下载次数: 50)

1

1

2.png (31.11 KB, 下载次数: 57)

2

2

作者: 嘛绳    时间: 2018-9-20 11:20
看芯片规格书,结合硬件分析
作者: diy1997    时间: 2018-9-20 11:58
可能是被外部元件拉低了,断开连接试试看。
作者: SOPHHANA    时间: 2018-9-20 13:32
diy1997 发表于 2018-9-20 11:58
可能是被外部元件拉低了,断开连接试试看。

不是硬件的原因,硬件测试都ok,软件我在每个wind=1/0下面都加了heat=0/1就能够输出高电平了,但是新的问题出现了,这个判断只进行一次就没了,风扇转一下就停了,其他一切正常
作者: SOPHHANA    时间: 2018-9-20 13:34
while (1)                                                 //主循环
  {
  SS=ReadADC(0);
  SS=(float)SS*100/256;   //数据转换

        LCD_Write_String(0,0,"T1:");                        //显示实时孵化温度
        LCD_Write_String(9,0,"T2:");                        //显示设定温度参数
  LCD_Write_String(5,0,".");
        LCD_Write_String(6,0,"C");
        LCD_Write_String(14,0,".");
        LCD_Write_String(15,0,"C");
               
        TempData1[0]=SS/10;
  TempData1[1]=SS%10;

        sprintf(temp1,"%d",(int)TempData1[0]);
        LCD_Write_String(3,0,temp1);
        sprintf(temp1,"%d",(int)TempData1[1]);
        LCD_Write_String(4,0,temp1);
         
        TempData2[0]=CK/10;
        TempData2[1]=CK%10;
               
        sprintf(temp2,"%d",(int)TempData2[0]);
  LCD_Write_String(12,0,temp2);
        sprintf(temp2,"%d",(int)TempData2[1]);
  LCD_Write_String(13,0,temp2);
       
        /*------------------------------------------------
                    报警及温度控制
------------------------------------------------*/

  if( SS >= CK )  //检测的温度高于设定值
                                             
     {
                         if(SS>=40)
                         {
      wind=1;
                                 heat=0;
                                 led=0;
                        bee=0;                        //报警       
                                         //散热
     }      
      else
                        {  
                                wind=1;
                                heat=0;
                                led=1;
                           bee=1;
                               
                        }
                }
                 
        if( SS < CK )         
    {
                        if(SS<=35)
                        {
                         heat=1;
                                wind=0;
                                led=0;
                        bee=0;                        //报警
                                 //加热
                  }
                        else
                        {       
                                heat=1;
                                wind=0;
                                led=1;
                          bee=1;
                               
                        }
                }


        }
这是循环部分的代码
作者: 风158    时间: 2018-9-20 15:16
看负载电流是否超出单片机允许最大值
作者: jmkl128    时间: 2018-9-20 16:27
P1.5 P1.6 P1.7这三个端口,外围电路截图看看,看上去是三极管导通后的电压
作者: SOPHHANA    时间: 2018-9-20 20:04
jmkl128 发表于 2018-9-20 16:27
P1.5 P1.6 P1.7这三个端口,外围电路截图看看,看上去是三极管导通后的电压

这样,单片机的P1.5  P1.6   P1.7直接借这个ULN2003

3.png (62.58 KB, 下载次数: 56)

3.png

作者: cjm82    时间: 2018-9-20 21:34
原理图来看没问题,你试试配置下IO口成推挽输出看看.
作者: SOPHHANA    时间: 2018-9-21 14:24
破案了,软件上有一点小问题,主要还是我用的小马达,启动时电流太大,电压源会猛降,小马达驱动不起来,用个继电器就ok了
作者: wc86110    时间: 2018-9-22 01:25
ULN2003驱动能力有限,换大点的驱动模块,电源功率也要足够大才能稳
作者: 暗双魂    时间: 2018-9-22 06:18
在没有接任何负载的情况下测试一下,应该是虚焊
作者: ansy2001    时间: 2018-9-22 08:22
注意IO 要有个拉高电阻。
作者: 1276366627    时间: 2018-9-22 13:22
你好像没有写循环
作者: SOPHHANA    时间: 2018-9-24 00:01
1276366627 发表于 2018-9-22 13:22
你好像没有写循环

我没把程序放完整,我的错
作者: SOPHHANA    时间: 2018-9-24 00:01
风158 发表于 2018-9-20 15:16
看负载电流是否超出单片机允许最大值

谢谢老哥的建议




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