栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【蓝桥之路——无bug代码】PCF8591——AD转换部分代码解析

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【蓝桥之路——无bug代码】PCF8591——AD转换部分代码解析

读取Rb2的电压值并显示在数码管上,范围0.00~5.00V,通过改变滑动变阻器Rb2的阻值可以改变电压值

main.c

#include"stc15f2k60s2.h"
#include"iic.h"
#include"intrins.h"

typedef unsigned char uchar;
typedef unsigned int uint;

uchar dsp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar dsp_ADC[8]={0xff,0xff,0xff,0xff,0xff,0xff};

uint value;
uchar count_adc;

void Timer_Init()
{
	AUXR|= 0x80;
	TMOD&= 0xf0;
	TL0=0xcd;
	TH0=0xd4;
	TR0=1;
	ET0=1;
	EA=1;
}

void serviceTimer() interrupt 1
{
	static uchar dsp_com=0;

	P0=0;P2=0xc0;P2=0;

	P0=dsp_ADC[dsp_com];P2=0xe0;P2=0;

	P0=1<199)
		{
			count_adc=0;
			EA=0;
			value=read_adc(0x03)*1.96+0.5;
			EA=1;
		}
	dsp_ADC[5]=dsp_code[value/100]&0x7f;
	dsp_ADC[6]=dsp_code[value/10%10];
	dsp_ADC[7]=dsp_code[value%10];
	}
}

iic.c


#include "reg52.h"
#include "intrins.h"
#define DELAY_TIME 5  


#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1

//总线引脚定义
sbit SDA = P2^1;  
sbit SCL = P2^0;  

void IIC_Delay(unsigned char i)
{
	do
	{
		_nop_();
	}
	while(i--);
}

//总线启动条件
void IIC_Start(void)
{
	SDA = 1;
	SCL = 1;
	IIC_Delay(DELAY_TIME);
	SDA = 0;
	IIC_Delay(DELAY_TIME);
	SCL = 0;	
}

//总线停止条件
void IIC_Stop(void)
{
	SDA = 0;
	SCL = 1;
	IIC_Delay(DELAY_TIME);
	SDA = 1;
	IIC_Delay(DELAY_TIME);
}



//等待应答
bit IIC_WaitAck(void)
{
	bit ackbit;
	SCL=1;
	IIC_Delay(DELAY_TIME);
	ackbit=SDA;
	SCL=0;
	IIC_Delay(DELAY_TIME);

	return ackbit;
	
}

//通过I2C总线发送数据
void IIC_SendByte(unsigned char byt)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{   
		SCL=0;
		IIC_Delay(DELAY_TIME);
		if(byt&0x80) 
		{	
			SDA = 1;
		}
		else 
		{
			SDA = 0;
		}
		IIC_Delay(DELAY_TIME);
		SCL = 1;
		byt <<= 1;
		IIC_Delay(DELAY_TIME);	
	}
	SCL = 0;
	IIC_WaitAck();
}

//从I2C总线上接收数据
unsigned char IIC_RecByte(void)
{
	unsigned char da;
	unsigned char i;
	
	for(i=0;i<8;i++)
	{   
		SCL = 1;
		IIC_Delay(DELAY_TIME);
		da <<= 1;
		if(SDA) 
		da |= 0x01;
		SCL = 0;
		IIC_Delay(DELAY_TIME);
	}
	IIC_WaitAck();
	return da;
}

void IIC_SendAck(bit ackbit)
{
	SCL=0;
	SDA=ackbit;
	IIC_Delay(DELAY_TIME);
	SCL=1;
	IIC_Delay(DELAY_TIME);
	SCL=0;
	IIC_Delay(DELAY_TIME);
	SDA=1;
	IIC_Delay(DELAY_TIME);
}

unsigned char read_adc(unsigned char add)
{
	unsigned char val;

	IIC_Start();
	IIC_SendByte(0x90);
	IIC_SendByte(add);

	IIC_Start();
	IIC_SendByte(0x91);
	val=IIC_RecByte();
	IIC_Stop();

	return val;
}

iic.h

#ifndef _IIC_H
#define _IIC_H

//函数声明
void IIC_Start(void); 
void IIC_Stop(void);  
void IIC_SendAck(bit ackbit); 
void IIC_SendByte(unsigned char byt); 
bit IIC_WaitAck(void);  
unsigned char IIC_RecByte(void); 
unsigned char read_adc(unsigned char add);

#endif
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/738751.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号