蓝桥杯单片机十二届第二场省赛(包含频率,周期,ad显示常见错误)

分析改次蓝桥杯的外设模块主要是,ad模块算出光伏和电位器,频率周期检测,周期采用频率的倒数计算即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于周期和频率的计算这样来算

首先频率的检测是来检测Rb3上的频率,必须将NAL和P34短接,根据频率的定义一秒钟产生周期次数,采用操作为用定时器0作计数器进行周期检测,每产生一个方波就加一,定时器1计时一秒钟拿出次数显示即是斌率。
代码实列
这里的配置就是对于TMOD寄存器的配置看图,将定时器0的CT位,置1进行对P3.4的脉冲计数,以下是对定时器的初始化配置。

void Timer_Init()
{ 
	//定时器0为计数模式
	TL0  = 0xff;
	TH0  = 0xff;

	//定时器1为定时10毫秒
	TL1  = 0x00;		
	TH1  = 0xDC;		

	TMOD = 0x8e;//配置
	TR0=1;
	TR1=1;
	IT0=1;

	ET0=1;
	ET1=1;
	EA=1;
}

定时器中断函数部分如下

void Timer0_intr() interrupt 1
{
	count++;
	/*t_h=TH1-0xDC;
	  t_l=TL1-0x00;
	  per=(t_h*256+t_l)*1;*/
}

void Timer1_intr() interrupt 3
{
	t_count++;
	if(t_count==100)
	{
		Fre=count;
		t_count=0;
		count=0;
	}	
}

关于ADC显示
首先ADC对应的芯片手册是PCF8591,通过看该芯片手册可以知道以下几点即可
该芯片支持的iic协议,将iic的文件加入即可。
1.每次开始iic后,需要将设备地址加入,0x91读地址,0x90写地址
2.关于地址间的设备,0x01光敏电阻,0x03电位器(这里代表的是数字量,若为0x41和0x43则代表的是模拟量需要进行转换)

常见错误:

 1. 首先0x90表示写,就是没有才能写,每次当写完后转换成读是iic需要采用停止才能继续,否则不行。
 2. float类型的变量进行赋值时必须保证等式右边含有小数点,否则不会保留小数,这也是上面为什么会有5.0/255这个说法。
 3. 记得拿到adc数据后一定需要接受一个应答信号`IIC_SendAck(1);`不然也会产生错误
 4. iic头文件出错再头文件上加上一个_即可

该公式为

其中ad_dis是从iic拿到的数据
ad_value=ad_dis*(5.0/255);
ad_dis=ad_value*100;

然后是adc的部分代码

void ADC_Trs_Lig()//光敏电阻
{
	IIC_Start();
	IIC_SendByte(0x90);//写数据0x90
	IIC_WaitAck();
	IIC_SendByte(0x01);
	IIC_WaitAck();
	IIC_Stop();

	IIC_Start();
	IIC_SendByte(0x91);//读数据0x91
	IIC_WaitAck();
	ad_l=IIC_RecByte();
	IIC_SendAck(1);   //接受数据之后需要应答信号
	IIC_Stop();

	Adl_smg();

}

void ADC_R()//电位器
{
	IIC_Start();
	IIC_SendByte(0x90);//写数据0x90
	IIC_WaitAck();
	IIC_SendByte(0x03);
	IIC_WaitAck();
	IIC_Stop();

	IIC_Start();
	IIC_SendByte(0x91);//读数据0x91
	IIC_WaitAck();
	ad_3=IIC_RecByte();
	IIC_SendAck(1);   //接受数据之后需要应答信号
	IIC_Stop();

	Ad3_smg();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值