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; } }