首页 > 学院 > 开发设计 > 正文

一路AD转换

2019-11-11 04:12:55
字体:
来源:转载
供稿:网友
/*----------------------------------------------- 名称:IIC协议 PCF8591 AD/DA转换 论坛:www.doflye.net 编写:shifang 修改:无 内容:使用4路AD中的1路检测外部模拟量输入------------------------------------------------*/ #include <reg52.h> #include "i2c.h"#include "delay.h"#include "display.h"#define AddWr 0x90 //写数据地址 #define AddRd 0x91 //读数据地址extern bit ack;unsigned char ReadADC(unsigned char Chl);bit WriteDAC(unsigned char dat);/*------------------------------------------------ 主程序------------------------------------------------*/main(){ unsigned char num=0; Init_Timer0();while (1) //主循环 { num=ReadADC(0); TempData[0]=dofly_DuanMa[num/51] + 0x80; //TempData[1]=0x80; TempData[1]=dofly_DuanMa[(num%51)/10]; TempData[2]=dofly_DuanMa[(num%51)%10]; //主循环中添加其他需要一直工作的程序 DelayMs(100); num=ReadADC(3); TempData[4]=dofly_DuanMa[num/51] + 0x80; //TempData[1]=0x80; TempData[5]=dofly_DuanMa[(num%51)/10]; TempData[6]=dofly_DuanMa[(num%51)%10]; //主循环中添加其他需要一直工作的程序 DelayMs(100); }}/*------------------------------------------------ 读AD转值程序输入参数 Chl 表示需要转换的通道,范围从0-3返回值范围0-255------------------------------------------------*/unsigned char ReadADC(unsigned char Chl) { unsigned char Val; Start_I2c(); //启动总线 SendByte(AddWr); //发送器件地址 if(ack==0)return(0); SendByte(0x40|Chl); //发送器件子地址 if(ack==0)return(0); Start_I2c(); SendByte(AddWr+1); if(ack==0)return(0); Val=RcvByte(); NoAck_I2c(); //发送非应位 Stop_I2c(); //结束总线 return(Val); }/*------------------------------------------------ 写入DA转换数值输入参数:dat 表示需要转换的DA数值,范围是0-255------------------------------------------------*//*bit WriteDAC(unsigned char dat){ Start_I2c(); //启动总线 SendByte(AddWr); //发送器件地址 if(ack==0)return(0); SendByte(0x40); //发送器件子地址 if(ack==0)return(0); SendByte(dat); //发送数据 if(ack==0)return(0); Stop_I2c(); }*/
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表