标题:
PCF8591 DAC输出
[打印本页]
作者:
apin123
时间:
2015-7-26 11:37
标题:
PCF8591 DAC输出
<div class="blockcode"><blockquote> 文件名: IIC_drv.c
描述: IIC通信驱动c文件
作者:
=========================================================
-----------------------------------------------------------------------------------------------------------*/
#include "IIC_drv.h"
/**********************************************
功能:
起始信号
输入参数:
无
输出参数:
无
返回值:
**********************************************/
static void Start(void)
{
Sda = 1;
Scl = 1;
Sda = 0;
}
/**********************************************
功能:
停止信号
输入参数:
无
输出参数:
无
返回值:
**********************************************/
static void Stop(void)
{
Sda = 0;
Scl = 1;
Sda = 1;
}
/**********************************************
功能:
应答位
输入参数:
无
输出参数:
无
返回值:
设备是否应答
1:应答;0:应答
**********************************************/
static unsigned char Respons(void)
{
unsigned char OverTime = 0; //超时
unsigned char TempFlag = 0;
OverTime = 0;
Sda = 1; //释放数据线
Scl = 1;
while(1)
{
if(Sda) //应答信号没来
{
if(OverTime++ > 200)
{
TempFlag = 0; //应答信号长时间没有来,认为无应答
break;
}
}
else
{
TempFlag = 1; ///检测到应答信号
break;
}
}
Scl = 0;
return 1;
}
/**********************************************
功能:
非应答位
输入参数:
无
输出参数:
无
返回值:
**********************************************/
static void NoRespons(void) //非应答
{
Sda = 1; //释放数据线
Scl = 1;
Scl = 0;
}
/**********************************************
功能:
写字节
输入参数:
temp: 要写的字节参数
输出参数:
无
返回值:
**********************************************/
static void WriteByte(unsigned char temp)
{
unsigned char i;
Scl = 0;
for(i = 0;i < 8;i++)
{
Sda = temp & 0x80;
temp <<= 1;
Scl = 1; //scl拉高,准备写数据
Scl = 0; //scl拉低,写数据完成
}
}
/**********************************************
功能:
读字节
输入参数:
无
输出参数:
无
返回值:
读取的字节
**********************************************/
static unsigned char ReadByte(void)
{
unsigned char i;
unsigned char x = 0;
for(i = 0;i < 8;i++)
{
Scl = 1;
x <<= 1;
x |= (unsigned char)Sda;
Scl = 0;
}
return x;
}
/**********************************************
功能:
写数据到对应设备
输入参数:
device: 设备地址
parameter:参数
temp: 写入的内容
输出参数:
无
返回值:
**********************************************/
void WriteIIC(unsigned char device,unsigned char parameter,unsigned char temp)
{
Start();
WriteByte(device);
if(Respons())
{
WriteByte(parameter);
if(Respons())
{
WriteByte(temp);
if(Respons())
{
Stop();
}
else
{
Stop();
}
}
else
{
Stop();
}
}
else
{
Stop();
}
}
/**********************************************
功能:
从对应设备读取数据
输入参数:
device: 设备地址
parameter:参数
输出参数:
无
返回值:
读取的内容
**********************************************/
unsigned char ReadIIC(unsigned char device,unsigned char parameter)
{
unsigned char x;
Start();
WriteByte(device);
if(Respons())
{
WriteByte(parameter);
if(Respons())
{
Start();
WriteByte(device | 0x01);
if(Respons())
{
x = ReadByte();
NoRespons();
Stop();
}
else
{
Stop();
}
}
else
{
Stop();
}
}
else
{
Stop();
}
return x;
}
复制代码
---------------------------------------------------------
文件名: PCF8591_DA.c
描述: 通过DA输出电压
作者:
=========================================================
-----------------------------------------------------------------------------------------------------------*/
#include <reg52.h>
#include "IIC_drv.h"
#define uchar unsigned char
/**********************************************
功能:
延时
输入参数:
num: 延时时长
输出参数:
无
返回值:
**********************************************/
void Delay(uchar num)
{
uchar i,j;
for(i = 0;i < 200;i++)
{
for(j = 0;j < num;j++);
}
}
/*---------------------------------------------------------------------------------------------------------*/
/**********************************************
主函数
**********************************************/
void main()
{
uchar Input = 0x00;
uchar ChangeState;
while(1)
{
if(Input == 0) //电压最小,开始增大电压
{
ChangeState = 0;
}
else if(Input == 255) //电压最大,开始降低电压
{
ChangeState = 1;
}
if(ChangeState == 0)
{
WriteIIC(0x90,0x40,Input++);
}
else
{
WriteIIC(0x90,0x40,Input--);
}
Delay(3);
}
}
PCF8591 DAC输出.pdf
2015-7-26 11:35 上传
点击文件名下载附件
下载积分: 黑币 -5
2.48 MB, 下载次数: 11, 下载积分: 黑币 -5
作者:
18932900560
时间:
2016-5-15 21:24
您好!您能代编一下pcf8591 D/A转换程序吗?如果可以的话请加下我的QQ1143772598,我会给您相应的报酬,
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1