功能概述
  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. 生出树状的文件夹结构
  2. python_day21面向对象的进阶(反射,内置方法,)
  3. 浅谈JavaScript错误
  4. 嵌入式研究杂记(1)-RISC-V开源CPU
  5. ZJOI2019赛季回顾
  6. 【网络安全工程师面试合集】—黑客常用的端口及攻击方法汇总
  7. Hadoop 2.7.1 使用minicluster进行单元测试
  8. 芯片烧录软件Android版,Stc单片机烧录软件
  9. LwIP协议栈之ARP(Address Resolution Protocal)协议详解
  10. Py 实现导线测量的内业计算
  11. raid check
  12. Mac安装win10出现的错误无法分区和Boot Camp分区不足
  13. 做学问的三种境界(王国维)和八种境界(梁漱溟)
  14. 限制百度地图拖动范围限制,当超如范围时自动返回
  15. 苏州大学2021年全日制博士学位研究生招生简章
  16. 【基础】《操作系统》学习笔记(B站王道考研)(1)
  17. python怎么循环终止_Python 循环终止语句的三种方法小结
  18. MLflow基于Windows通过Docker和Minio搭建mlflow server
  19. 滴答滴答(TickTick)定时器工具
  20. 读Excel数据,画条形图

热门文章

  1. 【日常学习】DAU和MAU
  2. c语言实验——第一个实验
  3. 王者农药新模式——智慧王者 树形递归
  4. Victoria的舞会2——图的连通性及连通分量
  5. 2020年9月大学英语六级作文
  6. 【玩转华为云】手把手教你利用ModelArts识别偶像的声音
  7. 百度站长俱乐部SEO提问收集-3
  8. 视频号的直播玩法,手把手教你直播带货:国仁楠哥
  9. 【DNS域名解析服务】
  10. 第七章 1什么是活动目录?活动目录有那些优点?