PCF8591的DA转换问题

2019-07-15 20:56发布

新手学单片机,没弄东PCF8591,照样子写了个程序。但是实现不了控制灯的亮度。而且只有几个值能发光
#include<reg52.h>
#include <intrins.h>
sbit SDA=P2^0;
sbit SCL=P2^1;
bit ack;
void start_IIC();
void stop_IIC();
void send_byte(unsigned char);
main()
{
        start_IIC();
        send_byte(0x90);
        if(ack==0)
                return(0);
        send_byte(0xf0);//这里是控制灯发光的数字量
        if(ack==0)
                return(0);
        stop_IIC();
}
void start_IIC()
{
        SCL=1;
        SDA=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SDA=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SCL=0;
        _nop_();
}
void stop_IIC()
{
        SCL=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SDA=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
}
void send_byte(unsigned char c)
{
        unsigned char count;
        for(count=0;count<8;count++)
                {
                         if((c<<count)&0x80)
                                SDA=1;
                        else
                                SDA=0;
                        _nop_();
                        SCL=1;
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        SCL=0;
                }
                SDA=1;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                SCL=1;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                if(SDA==1)
                        ack=0;
                else
                        ack=1;
                SCL=0;
                SDA=0;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。