Leweellll 2022-04-21 13:46 采纳率: 0%
浏览 46
已结题

51单片机接两个adc0832,另一个无法工作。

img


#include<reg51.h>                 //头文件
#include<intrins.h>
sbit led=P2^0;
sbit CS =P1^0;              //片选使能端
sbit CLK =P1^1;           //时钟脉冲
sbit DI =P1^2;               //数据信号输入端
sbit DO =P1^2;             //数据输出端
sbit CS1 =P1^3;              //片选使能端
sbit CLK1 =P1^4;           //时钟脉冲
sbit DI1 =P1^5;               //数据信号输入端
sbit DO1 =P1^5;             //数据输出端
unsigned int k1;
unsigned int k2;
unsigned int Adc0832()  //测环境光照值
{
    unsigned int i;   
    unsigned int re1=0x00;            //由高到低
    unsigned int re2=0x00;       //由低到高
    CS=0;    //片选使能 
      DI=1;     
    CLK=1;   
    CLK=0;    //产生的第一个脉冲,启动转换
    CLK=1;    
    DI=1;     
    CLK=0;    
    CLK=1;    //第二个脉冲选通道0  DI输入1 0选择单通道
    DI=0;     
    CLK=0;    //第三个脉冲输入0表明通道0
    DO=1;        //控制命令结束,数据线拉高准备接受数据
    for(i=0;i<8;i++)   //每一个CLK下降沿输出一位数,先输出高位
    {
       re1|=DO;    //收数据,“|”位或,如果2位中有一位为1,则结果为1,否则为0
       CLK=1;
       CLK=0;      //形成一次时钟脉冲
       re1<<=1;////0000 0001最高位先出,并左移
       if(DO==1)
             re1|=0x01;
    }                   
   for(i=0;i<8;i++)  //每一个CLK下降沿输出一位数,先输出低位
   { re2=re2|DO;
     if(DO==1)
         re2 = re2 | 0x80; 
     CLK=1;
     CLK=0;    //形成一次时钟脉冲
  }
   CS=1;     //拉低CS端
   CLK=1;   //拉低CLK端
   DI=1;     //拉高数据端,回到初始状态
   re1<<=8;
   re1|=re2;
   return(re1);            //返回数据
}
unsigned int adc()  //测路灯照度
{
    unsigned int j;   
    unsigned int re3=0x00;            //由高到低
    unsigned int re4=0x00;       //由低到高
    CS1=0;    //片选使能 
      DI1=1;     
    CLK1=1;   
    CLK1=0;    //产生的第一个脉冲,启动转换
    CLK1=1;    
    DI1=1;     
    CLK1=0;    
    CLK1=1;    //第二个脉冲选通道0  DI输入1 0选择单通道
    DI1=0;     
    CLK1=0;    //第三个脉冲输入0表明通道0
    DO1=1;        //控制命令结束,数据线拉高准备接受数据
    for(j=0;j<8;j++)   //每一个CLK下降沿输出一位数,先输出高位
    {
       re3|=DO;    //收数据,“|”位或,如果2位中有一位为1,则结果为1,否则为0
       CLK1=1;
       CLK1=0;      //形成一次时钟脉冲
       re3<<=1;////0000 0001最高位先出,并左移
       if(DO1==1)
             re3|=0x01;
    }                   
   for(j=0;j<8;j++)  //每一个CLK下降沿输出一位数,先输出低位
   { re4=re4|DO;
     if(DO1==1)
         re4 = re4 | 0x80; 
     CLK1=1;
     CLK1=0;    //形成一次时钟脉冲
  }
   CS1=1;     //拉低CS端
   CLK1=1;   //拉低CLK端
   DI1=1;     //拉高数据端,回到初始状态
   re3<<=8;
   re3|=re4;
   return(re3);            //返回数据
}

void main()//主函数
{    
    while(1)
    {    
    k1=(Adc0832()/255)*5;//读取电压值
        k2=(adc()/255)*5;//读取电压值
        if(k1<=125)//小于等于上限        
            led=0;
        else
            led=1;
    }
}

k1可以用,k2无法用。
将if语句中的k1换为k2,电路无法正常工作。
k1和k2都可以使用。
有偿。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月29日
    • 创建了问题 4月21日

    悬赏问题

    • ¥15 防火墙的混合模式配置
    • ¥15 Ubuntu不小心注销了要怎么恢复啊
    • ¥15 win10电脑安装完plcsim advanced4.0运行时为什么会提示找不到虚拟网卡
    • ¥15 安装powerbuilder10卡在安装程序正在运行这个页面 没有下一步任何指令
    • ¥15 关于mpi的问题:请问遇到这种情况需要怎么解决,出现这个问题后电脑不能进行mpi多核运行只能进行单核运行
    • ¥50 微信聊天记录备份到电脑提示成功了,但还是没同步到电脑微信
    • ¥15 python怎么在已有视频文件后添加新帧
    • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
    • ¥15 fluent里模拟降膜反应的UDF编写
    • ¥15 MYSQL 多表拼接link