蓝桥杯省一之路04——第十届省赛真题

一,代码部分

 1.smgshow

#include "reg52.h"
void Delay(int t)
{
	while(t--);
}
void HC573(unsigned char channel, unsigned char dat)
{
	P0=dat;
	switch(channel)
	{
		case 4:
			P2=(P2 & 0x1f) | 0x80;//选通Y4C,LED
		  break;
		case 5:
			P2=(P2 & 0x1f) | 0xa0;//选通Y5C,蜂鸣器,继电器
		  break;
		case 6:
			P2=(P2 & 0x1f) | 0xc0;//选通Y6C,数码管位选
		  break;
		case 7:
			P2=(P2 & 0x1f) | 0xe0;//选通Y7C,数码管段码
		  break;
	}
	P2=(P2 & 0x1f) | 0x00;
}
void Display_SMG(unsigned char pos,unsigned char val)
{

	HC573(6,0x01<<pos);
	HC573(7,val);
	Delay(500);
//	HC573(6,0x01<<pos);
	HC573(7,0xff);//消隐
}	
void Display_ALL(unsigned char dat)
{
	HC573(6,0xff);
	HC573(7,dat);
}

2.pcf8591.c

#include "reg52.h"
#include "iic.h"

float Read_ADC()//RB2模拟量转数字量
{
	unsigned char temp;
  float v;
	//伪写操作
	IIC_Start();
  IIC_SendByte(0x90);//设备地址,最后一位置0为可写入
  IIC_WaitAck();   	
	IIC_SendByte(0x43);//RB2连接在8591的通道3
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0x91);
	IIC_WaitAck();
	temp=IIC_RecByte();//0~255 
	IIC_SendAck(1); 
	IIC_Stop(); 
	v=temp*5/255.0;
	return v;
}	
void DAC(float temp)
{
	unsigned char u;
	u=temp*51;
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck(); 
	IIC_SendByte(0x43);
	IIC_WaitAck();
	IIC_SendByte(u); //0~255
	IIC_SendAck(1);
	IIC_Stop(); 
}

相比以前的DAC函数做了优化,可以直接输出函数调用的值,如DAC(3.4),则直接输出3.4伏的电压。在使用函数的时候注意,形参是float型。这样做是为了方便题目的电压比较

<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值