功能概述
  1. PCF8591是具有IIC接口的8位A/D和D/A转换芯片
  2. 如果硬件地址引脚A0、A1、A2均接地,那么,PCF8591的设备的读操作地址为:0x91;而写操作地址则为:0x90。
  3. 蓝桥杯单片机设计与开发赛项使用的CT107D单片机开发平台中,PCF8591的三个硬件引脚地址均接地,两路模拟信号均为单端输入,分别是:
    • 光敏传感器接到AIN1,通道1;控制寄存器应写入:0x01。
    • 电位器Rb2接到AIN3,通道3;控制寄存器应写入:0x03。
A/D转换应用开发流程
  1. 一个A/D转换的周期的开始,总是在发送有效的读设备地址给PCF8591之后,A/D转换在应答时钟脉冲的后沿被触发。PCF8591的A/D转换程序设计流程,可以分为四个步骤:

    • 发送写设备地址,选择IIC总线上的PCF8591器件。
    • 发送控制字节,选择模拟量输入模式和通道。
    • 发送读设备地址,选择IIC总线上的PCF8591器件。
    • 读取PCF8591中目标通道的数据。

    采样可变电阻电压与光敏电阻电压

    1. 光敏电阻Rd1接到PCF8591的AIN1引脚,可调电阻Rb2接到PCF8591的AIN3引脚。
    2. 独立按键S4为通道切换选择,系统上电的时候,采样通道1光敏电阻的数据并显示在数码管上。按下S4松开后,切换到通道3采样可调电阻的数据并显示;再次按下S4松开后,又切换会通道1采样光敏电阻数据,如此循环往复。
      数码管的显示格式,前三位显示通道号,后三位显示相应通道读取的数据。
#include <STC15F2K60S2.H>
#include <IIC.H>
#include <SMG_SHOW.H>void DisplaySMG_ADC(unsigned char channel, unsigned char dat);
void read_AIN1();
void read_AIN3();
void key();
void delay_ms(int n);
void selectHC(unsigned char select);
void show(unsigned char w,unsigned char n);unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
sbit S4=P3^3;
unsigned char data1;//通道1光敏电阻电压
unsigned char data3;//通道3可调电阻电压
unsigned char flag=0; //选择对应通道标志位void main()
{selectHC(5);P0=0X00;P2&=0X1F;while(1){key();if(flag==0){read_AIN1();}if(flag==1){read_AIN3();}}
}void read_AIN1()
{//进行写操作,选择光敏传感器AIN1,通道1IIC_Start();IIC_SendByte(0x90);  //PCF8591的写设备地址IIC_WaitAck();      //等待从机应答IIC_SendByte(0x01);  //写入PCF8591的控制字节IIC_WaitAck();IIC_Stop();DisplaySMG_ADC(1,data1);//进行读操作,通道1IIC_Start();IIC_SendByte(0x91);  //PCF8591的读设备地址IIC_WaitAck();data1=IIC_RecByte(); //读取PCF8591通道1的数据 IIC_Ack(0);            //产生非应答信号IIC_Stop();DisplaySMG_ADC(1, data1);
}void read_AIN3()
{//进行写操作,选择电位器AIN3,通道3IIC_Start();IIC_SendByte(0x90);    //PCF8591的写设备地址IIC_WaitAck();      //等待从机应答IIC_SendByte(0x03);  //写入PCF8591的控制字节IIC_WaitAck();IIC_Stop();DisplaySMG_ADC(3,data3);//进行读操作,通道3IIC_Start();IIC_SendByte(0x91);  //PCF8591的读设备地址IIC_WaitAck();data3=IIC_RecByte(); //读取PCF8591通道1的数据 IIC_Ack(0);            //产生非应答信号IIC_Stop();DisplaySMG_ADC(3, data3);
}void key()
{if(S4 == 0){delay_ms(1);if(S4 == 0){if(flag == 0){flag = 1;while(S4 == 0){DisplaySMG_ADC(1,data1);}}else if(flag == 1){flag = 0;while(S4 == 0){DisplaySMG_ADC(3,data3);}}}}
}void DisplaySMG_ADC(unsigned char channel, unsigned char dat)
{show(0, table[10]);delay_ms(1);show(1, table[channel]);delay_ms(1);show(2, table[10]);delay_ms(1);show(3, 0xFF);show(4, 0xFF);show(5, table[dat / 100]);delay_ms(1);show(6, table[(dat % 100) / 10]);delay_ms(1);show(7, table[dat % 10]);delay_ms(1);
}void selectHC(unsigned char select)
{switch(select){case 4:P2=(P2&0X1F)|0X80; break; case 5:P2=(P2&0X1F)|0XA0; break;case 6:P2=(P2&0X1F)|0XC0; break;case 7:P2=(P2&0X1F)|0XE0; break; }}
void delay_ms(int n)
{int i,j;for(i=n;i>0;i--)for(j=110;j>0;j--);
}
void show(unsigned char w,unsigned char n)
{selectHC(6);P0=0X01<<w;selectHC(7);P0=n;delay_ms(5);P0=0xff;P2&=0x1f;
}

【蓝桥杯13】——PCF8591的应用(AD转换)相关推荐

  1. 蓝桥杯控制PCF8591

    目录 一.AD转换 (1)PCF8591初始化 (2)获取PCF8591ADC转换结果 (3)实例程序​编辑 二.DA转换 (1)PCF8591初始化 (2)写入数模转换的值 (3)实例程序 一.AD ...

  2. 蓝桥杯单片机——PCF8591 ADC/DAC模块

    本篇讲的单片机是第十一届蓝桥杯单片机实训的硬件设备. 蓝桥杯单片机硬件基础 PCF8591电路图: PCF8591是具有IIC总线接口的8位A/D及D/A转换器,有4路A/D转换输入,1路D/A模拟输 ...

  3. 【蓝桥杯】PCF8591 A/D D/A转换应用

    学习内容: 掌握ADC(光敏电阻.滑动变阻器). 会DAC输出电压值. PCF8591 A/D以及24C02存储芯片,底层驱动都是采取IIC协议 点击转送到小蜜蜂老师IIC基础理论讲解 IIC总线只有 ...

  4. 蓝桥杯13届单片机省赛超声波 手撸程序

    题目和完整程序  !!!! 13届.zip - 蓝奏云 一.函数声明 #include <STC15F2K60S2.H> #include <IIC.H> #include & ...

  5. 蓝桥杯_算法训练_大小写转换

    问题描述 编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出. 输入格式:输入一个字符串,而 ...

  6. [Java] 蓝桥杯ALGO-85 算法训练 进制转换

    问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来. 输入格式:输入为一个字符串,每个字符都是'0'或'1',字符串的长度不超过32. 输出格 ...

  7. 蓝桥杯 ALGO-85 算法训练 进制转换

    问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来. 输入格式:输入为一个字符串,每个字符都是'0'或'1',字符串的长度不超过32. 输出格 ...

  8. 蓝桥杯——13届第一批试题解析

    先看配置要求,按照以上方式配置. 在看硬件框图部分,可以看到一共有6个部分. 按照优先级来说,第一步肯定是按键,第二部是数码管,第三步DS1302或DS18B20,第四步才是LED和继电器. 既然第一 ...

  9. 蓝桥杯 ADV-117 算法提高 进制转换

    问题描述 程序提示用户输入三个字符,每个字符取值范围是0-9,A-F.然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出. 输入格式:输入只有一行,即三个字符. 输出 ...

最新文章

  1. 镁光ssd管理工具 linux,在 SSD 上使用 Btrfs 文件系统的相关优化
  2. python杂记-读取png图像文件头数据
  3. sqlite管理工具_Liquibase 数据库版本管理工具:1.安装
  4. java 计算26个字母在一段文本中出现的频率(保留小数点后4位)
  5. bpython_Python机器学习(入门)
  6. 微服务升级_SpringCloud Alibaba工作笔记0025---Nacos持久化切换配置
  7. vue-cli3.0使用及部分配置详解
  8. 字段 密码有效期_你知道Linux中用户们的密码藏在哪儿吗?
  9. 网建短信通 使用java调用API发送短信时总是返回-41,关键的关键,仅在于一个问号:(
  10. 二分类模型评价指标-Python实现
  11. java计算机毕业设计html5健身房信息管理系统MyBatis+系统+LW文档+源码+调试部署
  12. 阿里云全站加速 DCDN 升级
  13. qemu-kvm创建虚拟U盘
  14. QT翻金币小游戏实现(三)
  15. 主流自媒体推广平台有哪些 如何用自媒体引流
  16. i.MX - RT1052调教总结
  17. AU变声功能音频调节
  18. 风影导航网站源码v1.0 带后台
  19. NTP(网络时间协议)学习
  20. Spring Security介绍(4)

热门文章

  1. python 将PDF 转成 图片的几种方法
  2. 《Java语言程序设计与数据结构》编程练习答案(第四章)(一)
  3. Androidnbsp;滑动开关控件
  4. 第19组 Beta(2/3)
  5. 设计模式---适配器模式(springMvc中HandlerAdapter 的误区)
  6. 提升Facebook触及率和互动率攻略 | 智能客服帮您抓住用户的心
  7. 游戏推广免费的cps模式和游戏加盟平台选择的一个误区。
  8. C语言:关键字---struct(声明结构体类型)
  9. 路由器上的usb接口有什么用_解决USB接口不够用,毕亚兹Type-C扩展坞体验测评
  10. 五招祛痘法让熟女远离痘痘 - 健康程序员,至尚生活!