• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

用摇杆模块通过pcf8591采值

易峰情书 2018-10-06 浏览量:971
用摇杆模块通过pcf8591采值!求方法
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • PCF8591就是一个ADC\DAC模块,有四路模数转换和一路数模转换,通过IIC操作的,需要想写一个IIC的程序,用两个引脚模拟,之后读取就行了,找找手册看看,网上有很多,这个芯片使用起来还是很简单的。

    下面是我以前写的51单片机的程序,仅供参考:

    #include <reg51.h>    
    #define uchar unsigned char   
    #define uint unsigned int   
    #define  PCF8591 0x90    //PCF8591 地址   
    sbit SCL=P2^0;  //串行时钟输入端   
    sbit SDA=P2^1;  //串行数据输入端   
      
    void delay()    //延时4-5个微秒   
    {;;}  
    void delay_1ms(uint z)  
    {  
        uint xy;  
        for(x=z;x>0;x--)  
            for(y=110;y>0;y--);  
    }  
    void start()//开始信号   
    {  
        SDA=1;  
        delay();  
        SCL=1;  
       delay();  
        SDA=0;  
       delay();  
    }  
      
    void stop() //停止信号   
    {  
        SDA=0;  
        delay();  
        SCL=1;  
        delay();  
        SDA=1;  
        delay();  
    }  
       
    void respons()//应答    相当于一个智能的延时函数   
    {  
       uchar i;  
       SCL=1;  
       delay();  
       while((SDA==1)&&(i<250))  
          i++;  
       SCL=0;  
       delay();  
    }    
    void init() //初始化   
    {  
        SDA=1;  
        delay();  
        SCL=1;  
        delay();      
    }  
      
    void write_byte(uchar date) //写一字节数据   
    {  
        uchar itemp;  
        temp=date;  
        for(i=0;i<8;i++)  
       {  
           temp=temp<<1; //左移一位 移出的一位在CY中   
           SCL=0;          //只有在scl=0时sda能变化值   
           delay();  
           SDA=CY;  
           delay();  
           SCL=1;  
           delay();          
       }     
        SCL=0;  
        delay();  
        SDA=1;  
        delay();  
    }  
        
    void write_add(uchar controluchar date)  
    {  
        start();  
        write_byte(PCF8591);    //10010000  前四位固定 接下来三位全部被接地了 所以都是0 最后一位是写 所以为低电平   
        respons();  
        write_byte(control);  
        respons();  
        write_byte(date);  
        respons();  
        stop();    
    }    
    void main()  
    {        
        uchar a;  
        init();  
        while(1)   
        {  
            write_add(0x80a);  
            delay_1ms(5);  
            a++;  
            if(a>250)  
                a=0;          
        }  


    • 发布于 2018-10-08
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 用单片机读取8591的ad值,然后用无线模块发送,摇杆就可以接收了
    • 发布于2018-10-07
    • 举报
    • 评论 0
    • 0
    • 0

  • pcf8591就是个AD转换器,可以用pcf8591来采集摇杆模块的电压转成数字信号,通过IIC和单片机连接并采集控制
    • 发布于2018-10-08
    • 举报
    • 评论 0
    • 0
    • 0

  • PCF8591是一个AD转换器,在51上面,可以用模拟I2C读取它的值,每检测到一个摇杆动作就触发一次采集
    • 发布于2018-10-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个传感器是通过IIC协议去通信控制,找到对应通信寄存器进行通信获取就可以
    • 发布于2018-10-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个一般都是用ADC来进行采样,获取对应的位置值
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • pef8591的两路adc连接摇杆的xy两个轴,同时采集两个轴返回的adc数据即可。
    • 发布于2018-10-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 在51单片机上使用的话,先模拟IIC,然后读取它的XY轴值,没遥感一次就采样读取一次。
    • 发布于2018-11-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 通你的IO模拟IIC进行通信,读取XY数据
    • 发布于2018-11-14
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

用摇杆模块通过pcf8591采值