2020-02-01 16:28发布
wsy2012 发表于 2012-12-2 22:23 如果楼主用STC的话可以看看这个: http://www.doyoung.net/program/ADC/index.html 具体可以上STC的官网看看 ...
mjh630 发表于 2012-12-3 11:30 你这个代码让楼主刚学单片机的人,啃上一个月了,人家都被 你吓傻了!还IIC,人家说的是AD,DA,你说什么别的 ...
jhjh630 发表于 2012-12-3 11:37 把你的例句和你的的程序一起发给我,我帮你看下,看能不能帮你的忙!QQ:290412297 ...
最多设置5个标签!
http://www.doyoung.net/program/ADC/index.html
具体可以上STC的官网看看:
http://www.mcu-memory.com/
(千万不要在吃饭时看,这个官网的样子让人很无语)
"千万不要在吃饭时看,这个官网的样子让人很无语" ,顶楼上的这句话,哈!~
拜托,你先看别人用的什么东西再发言OK。。
你牛逼你教会楼主不要IIC来控制这个芯片啊。
教程上用的是ADC0804,我的开发板用的是PCF8591,程序编写方法都一样吧?我想原来的程序不用管了,芯片都不同。
PCF8591的例题是这样的:#ifndef __PCF8591_H__
#define __PCF8591_H__
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
//该ADC和DAC是串口输出,只要接两根线
sbit SCL=P3^6;//时钟脉冲
sbit SDA=P3^7;//双向输入输出数据端
#define SCL_SET SCL=1
#define SCL_CLR SCL=0
#define SDA_SET SDA=1
#define SDA_CLR SDA=0
#define AddWr 0x92 //写数据地址
#define AddRd 0x93 //读数据地址
#define adCon 0x40 //AD控制字节
//延时1US
void PDFDelay(uint cnt)
{
while(--cnt);
}
void start()
{
SDA_SET;
PDFDelay(1);
SCL_SET;
PDFDelay(5);
SDA_CLR;
}
void stop()
{
SDA_CLR;
PDFDelay(1);
SCL_SET;
PDFDelay(5);
SDA_SET;
}
void ack()
{
SDA_CLR;
SCL_SET;
PDFDelay(1);
SCL_CLR;
}
void noAck()
{
SDA_SET;
SCL_SET;
PDFDelay(1);
SCL_CLR;
}
void send(uchar Data)
{
uchar i=0;
uchar temp=0;
temp=Data;
for(i=0; i<8; i++)
{
SCL_CLR;
PDFDelay(1);
if(temp&0x80) SDA_SET;
else SDA_CLR;
PDFDelay(1);
SCL_SET;
PDFDelay(1);
temp<<=1;
}
SCL_CLR;
}
uchar recive()
{
uchar i=0;
uchar temp=0;
SDA_SET;//必须设置
for(i=0; i<8; i++)
{
SCL_CLR;//拉低允许数据改变
PDFDelay(1);
SCL_SET;//拉高保持数据,等待读走
PDFDelay(2);
if(SDA) temp|=0x01;
else temp&=0xfe;
if(i<7) temp<<=1;//最低位发送完成不能移位,否则出错
}
SCL_CLR;
return temp;
}
//ADC读函数。输入参数ch为通道数:0至3通道
uchar ADCGet(uchar ch)
{
uchar temp=0;
start();
send(AddWr);//确认芯片
ack();
send(adCon|ch);//确认通道
ack();
//读出数据,放进temp
start();
send(AddRd);
ack();
temp=recive();
noAck();
stop();
return temp;
}
//DAC设定参。输入参数value为设定的数字量
void DACSet(uchar value)
{
start();
send(AddWr);
ack();
send(0x40); //写入控制位,使能DAC输出
ack();
send(value);
ack();
stop();
}
//#include<reg52.h>
//#include"PCF8591.h"//自己封装的PCF8591芯片控制函数
void main()
{
while(1)
{
P1=ADCGet(2);//将2通道采样回来的值直接付给流水灯。二通道采样的是电位器的值,直接旋转电位器即可看到效果
}
}
一周热门 更多>