找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4860|回复: 5
收起左侧

单片机+PCF8591的数字电压表Proteus仿真设计 源程序

  [复制链接]
ID:630107 发表于 2019-12-4 11:56 | 显示全部楼层 |阅读模式
基于PCF8591的数字电压表设计

proteus仿真原理图

proteus仿真原理图


单片机源程序如下:
  1. #include "config.h"
  2. #include "IIC.h"


  3. // 初始化PCF8591
  4. void Init_PCF(){
  5.         IIC_Start();                                                                // IIC起始信号
  6.         IIC_SendByte(PCF_Address + IIC_Write);                // 写入PCF8591器件地址和写方向位
  7.         IIC_WaitAck();                                                                // 等待从机应答
  8.         IIC_SendByte(0x00);                                                        // 写入控制字0000 0000,选择通道0
  9.         IIC_WaitAck();                                                                // 等待从机应答
  10.         IIC_Stop();                                                                        // IIC结束信号
  11. }

  12. //将模拟量转换为数字量
  13. uchar Read_PCF() {
  14.         uchar temp;
  15.         IIC_Start();                                                                // IIC起始信号
  16.         IIC_SendByte(PCF_Address + IIC_Read);                // 发送PCF8591地址和读方向位
  17.         IIC_WaitAck();                                                                // 等待从机应答
  18.         temp = IIC_ReadByte();                                                 // 读取数字量
  19.         IIC_SendAck(1);                                                                // 读取完毕,主机发送结束标志位
  20.         IIC_Stop();                                                                        // IIC结束信号
  21.         return temp;
  22. }

  23. // 数字量转换为模拟量
  24. void PCF_Output(uchar Digital) {
  25.     IIC_Start();
  26.     IIC_SendByte(PCF_Address + IIC_Write);     //器件地址+0,下一个字节为写入
  27.     IIC_WaitAck();
  28.     IIC_SendByte(0x40);                                          //设置控制字 0100 0000 允许模拟输出,不自增单端
  29.     IIC_WaitAck();
  30.     IIC_SendByte(Digital);                                       //将要转换的数字量写入
  31.     IIC_所有资料51hei提供下载:


  32. WaitAck();
  33.     IIC_Stop();            
  34. }
复制代码

所有资料51hei提供下载:
数字电压表设计.zip (1.04 MB, 下载次数: 149)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:318131 发表于 2019-12-4 23:45 | 显示全部楼层
voldata = iic_readvoldata();                                //接收iic总线输出数据
    vol =1000- voldata*5/25.5*20;                                //将iic总线输出数据转换成百分比形式的数值(精确到0.1%)
我也用了这个芯片,但AD的算法我不明白,,你能讲一讲吗
回复

使用道具 举报

ID:674202 发表于 2019-12-30 19:24 来自手机 | 显示全部楼层
感谢分享!!
回复

使用道具 举报

ID:345173 发表于 2020-2-8 13:31 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:110278 发表于 2020-2-26 13:03 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:848128 发表于 2020-12-28 12:16 来自手机 | 显示全部楼层
为什么单片机换成52的数码管就不亮了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表