【蓝桥杯13】——PCF8591的应用(AD转换)
功能概述
- PCF8591是具有IIC接口的8位A/D和D/A转换芯片
- 如果硬件地址引脚A0、A1、A2均接地,那么,PCF8591的设备的读操作地址为:0x91;而写操作地址则为:0x90。
- 蓝桥杯单片机设计与开发赛项使用的CT107D单片机开发平台中,PCF8591的三个硬件引脚地址均接地,两路模拟信号均为单端输入,分别是:
- 光敏传感器接到AIN1,通道1;控制寄存器应写入:0x01。
- 电位器Rb2接到AIN3,通道3;控制寄存器应写入:0x03。
A/D转换应用开发流程
一个A/D转换的周期的开始,总是在发送有效的读设备地址给PCF8591之后,A/D转换在应答时钟脉冲的后沿被触发。PCF8591的A/D转换程序设计流程,可以分为四个步骤:
- 发送写设备地址,选择IIC总线上的PCF8591器件。
- 发送控制字节,选择模拟量输入模式和通道。
- 发送读设备地址,选择IIC总线上的PCF8591器件。
- 读取PCF8591中目标通道的数据。
采样可变电阻电压与光敏电阻电压
- 光敏电阻Rd1接到PCF8591的AIN1引脚,可调电阻Rb2接到PCF8591的AIN3引脚。
- 独立按键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转换)相关推荐
- 蓝桥杯控制PCF8591
目录 一.AD转换 (1)PCF8591初始化 (2)获取PCF8591ADC转换结果 (3)实例程序编辑 二.DA转换 (1)PCF8591初始化 (2)写入数模转换的值 (3)实例程序 一.AD ...
- 蓝桥杯单片机——PCF8591 ADC/DAC模块
本篇讲的单片机是第十一届蓝桥杯单片机实训的硬件设备. 蓝桥杯单片机硬件基础 PCF8591电路图: PCF8591是具有IIC总线接口的8位A/D及D/A转换器,有4路A/D转换输入,1路D/A模拟输 ...
- 【蓝桥杯】PCF8591 A/D D/A转换应用
学习内容: 掌握ADC(光敏电阻.滑动变阻器). 会DAC输出电压值. PCF8591 A/D以及24C02存储芯片,底层驱动都是采取IIC协议 点击转送到小蜜蜂老师IIC基础理论讲解 IIC总线只有 ...
- 蓝桥杯13届单片机省赛超声波 手撸程序
题目和完整程序 !!!! 13届.zip - 蓝奏云 一.函数声明 #include <STC15F2K60S2.H> #include <IIC.H> #include & ...
- 蓝桥杯_算法训练_大小写转换
问题描述 编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出. 输入格式:输入一个字符串,而 ...
- [Java] 蓝桥杯ALGO-85 算法训练 进制转换
问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来. 输入格式:输入为一个字符串,每个字符都是'0'或'1',字符串的长度不超过32. 输出格 ...
- 蓝桥杯 ALGO-85 算法训练 进制转换
问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来. 输入格式:输入为一个字符串,每个字符都是'0'或'1',字符串的长度不超过32. 输出格 ...
- 蓝桥杯——13届第一批试题解析
先看配置要求,按照以上方式配置. 在看硬件框图部分,可以看到一共有6个部分. 按照优先级来说,第一步肯定是按键,第二部是数码管,第三步DS1302或DS18B20,第四步才是LED和继电器. 既然第一 ...
- 蓝桥杯 ADV-117 算法提高 进制转换
问题描述 程序提示用户输入三个字符,每个字符取值范围是0-9,A-F.然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出. 输入格式:输入只有一行,即三个字符. 输出 ...
最新文章
- 生出树状的文件夹结构
- python_day21面向对象的进阶(反射,内置方法,)
- 浅谈JavaScript错误
- 嵌入式研究杂记(1)-RISC-V开源CPU
- ZJOI2019赛季回顾
- 【网络安全工程师面试合集】—黑客常用的端口及攻击方法汇总
- Hadoop 2.7.1 使用minicluster进行单元测试
- 芯片烧录软件Android版,Stc单片机烧录软件
- LwIP协议栈之ARP(Address Resolution Protocal)协议详解
- Py 实现导线测量的内业计算
- raid check
- Mac安装win10出现的错误无法分区和Boot Camp分区不足
- 做学问的三种境界(王国维)和八种境界(梁漱溟)
- 限制百度地图拖动范围限制,当超如范围时自动返回
- 苏州大学2021年全日制博士学位研究生招生简章
- 【基础】《操作系统》学习笔记(B站王道考研)(1)
- python怎么循环终止_Python 循环终止语句的三种方法小结
- MLflow基于Windows通过Docker和Minio搭建mlflow server
- 滴答滴答(TickTick)定时器工具
- 读Excel数据,画条形图