教你如何写ADC代码,输出电压,读取光敏值。

注意事项

连续写

在连续写at24c02时记得在后面延时5ms
如果不是连续写的话,可以不用在写的后面加delay5ms

w_at24(0x55,v);Delay5ms();  w_at24(0x56,pinlv/100);Delay5ms(); w_at24(0x57,pinlv%100);Delay5ms(); w_at24(0x58,temp/100);Delay5ms(); w_at24(0x59,temp%100);Delay5ms(); //写的后面要delay5没事,才能写进去

连续读

无论是否是连续读,都在要在读取at24c02中数据前delay5ms

		flag_onece = 0;
		Delay5ms();   //刚刚没写这个,读出的数据re_v是255
	  re_v = r_at24(0x55);
		Delay5ms();   
	  re_pinlv = r_at24(0x56);	
    re_pinlv = re_pinlv*100;		
		Delay5ms();   
	  re_temp = r_at24(0x58)*100+r_at24(0x59);	

数据手册

第一个字节
在这里插入图片描述
在这里插入图片描述
第二个发送的字节
在这里插入图片描述
若为DA转化(数模转化):即写出电压值,由单片机输出,可以由万用表(红表笔接板子最右边的D/A管脚,黑表笔接GND)测的输出电压。
然后我们由下图来了解如何写DA转化代码:
在这里插入图片描述
s: 即start
ADDRESS: 即器件地址(0表示为写)
A:表示等待回应
CONTROL BYTE: 表示控制字(第二个发送的字节)
A:表示等待回应
DATE BYTE: 表示写入的电压值(注意如果写入255,其实结果是5v,以此来换算)
A:表示等待回应
s: stop

void WriteADC(unsigned char temp)
{
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(0x40);  //D/A的控制字节
	IIC_WaitAck();
	IIC_SendByte(temp);
	IIC_WaitAck();
	IIC_Stop();
}

AD转化则和上述方法一样,不过要注意一点,我们仍然要先写再读,这样才知道单片机控制字节(作用是输出电压or读取光敏值or读取电压值)
在这里插入图片描述
代码:

unsigned char ReadDAC(unsigned char channel )
{
	unsigned char dat;
  IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(channel);
	IIC_WaitAck();
  IIC_Stop();
	
	IIC_Start();
	IIC_SendByte(0x91);
	IIC_WaitAck();
	dat = IIC_RecByte();
  IIC_Stop();
	return dat;
}

在写第七套国赛题时,不知道为什么read_pcf时,放的位置不同,有的读不出来。
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值