打印
[STC单片机]

求大神帮忙编一个 PCF8591 的 adda 转换程序

[复制链接]
1675|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jch793155|  楼主 | 2013-8-17 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是 HC6800 的开发板,板上的AD/DA转换芯片是 pcf8591,求一个大神帮忙编一个步进输出电压并且电压量在数码管上显示的程序!!!步进输出电压的程序我已经编出来能用两个按键来控制输出电压的加减,不过一直不会把输出的电压量用AD转换显示在数码管上,还请诸位指导迷津~~

下面是步进的DA转换程序,大家看看该怎么把AD写进去:

#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int
#define  PCF8591 0x90         //PCF8591 地址


sbit SCL=P2^1;        //串行时钟输入端
sbit SDA=P2^0;        //串行数据输入端
sbit K1=P2^5;
sbit K2=P2^4;


void delay()        //延时4-5个微秒
{;;}

void delay_1ms(uint z)
{
        uint x,y;
        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 i,temp;
        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 control,uchar date)
{
        start();
        write_byte(PCF8591);        //10010000        前四位固定 接下来三位全部被接地了 所以都是0 最后一位是写 所以为低电平
        respons();
        write_byte(control);
        respons();
        write_byte(date);
    respons();
        stop();

}

char Pressed1(void)
{
unsigned int i;
while(P0==0XFE);
for(i=0;i<8000;i++);
if (P0!=0XFE)
return 1;
else   
return 0;
}

char Pressed2(void)
{
unsigned int i;
while(P0==0XFD);
for(i=0;i<8000;i++);
if (P0!=0XFD)
return 1;
else   
return 0;
}  


void main()
{          
        uchar a=0;
        init();
        while(1)
        {
                write_add(0x40,a);
                delay_1ms(5);
                if(Pressed1()){a+=7;}
                if(Pressed2()){a-=7;}
                if(a>100)a=100;
                if(a<0) a=0;
         }
               
}

相关帖子

沙发
opal11| | 2013-8-17 22:13 | 只看该作者
现在带AD的片子便宜的很,直接选择还AD的单片机好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

0

粉丝