蓝桥杯单片机——电位器电压与光敏传感器电压同时采样显示

 用PCF8591采样电位器电压与光敏传感器电压并同时显示在数码管上(参考来源:小蜜蜂老师)

#include <reg52.h>
#include <iic.h>

unsigned char code smg_nodot[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code smg_dot[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned int dat_rd1=0;
unsigned int dat_rb2=0;
void delaysmg(unsigned int t)
{
	while(t--);
}
void displaysmg_byte(unsigned char pos,unsigned char value)
{
	P2=0XE0;P0=0XFF;
	P2=0XC0;P0=0X01<<pos;
	P2=0XE0;P0=value;
}
void display_RD1_Rb2()
{
	 displaysmg_byte(0,smg_dot[dat_rd1/100]);
	 delaysmg(100);
	 displaysmg_byte(1,smg_nodot[(dat_rd1/10)%10]);
	 delaysmg(100);
	 displaysmg_byte(2,smg_nodot[dat_rd1%10]);
	 delaysmg(100);

	 displaysmg_byte(5,smg_dot[dat_rb2/100]);
	 delaysmg(100);
	 displaysmg_byte(6,smg_nodot[(dat_rb2/10)%10]);
	 delaysmg(100);
	 displaysmg_byte(7,smg_nodot[dat_rb2%10]);
	 delaysmg(100);
	 P2=0Xc0;P0=0XFF;
	 P2=0XE0;P0=0XFF;
}
unsigned char read_rd1_rb2(unsigned char AIN)
{
   unsigned char dat_u;
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	if(AIN==1)
	{
	  	IIC_SendByte(0x01);
	}
	else if(AIN==3)
	{
		IIC_SendByte(0x03);
	}
	IIC_WaitAck();
	IIC_Stop();

	IIC_Start();
	IIC_SendByte(0x91);
	IIC_WaitAck();
	dat_u=IIC_RecByte();
	IIC_WaitAck();
	IIC_SendAck(1);
	IIC_Stop();
	return dat_u;
}
 void read_adc()
 {
	dat_rd1=read_rd1_rb2(1)*(5.0/255)*100;
	dat_rb2=read_rd1_rb2(3)*(5.0/255)*100;
 }
void main()
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
	while(1)
	{
	  read_adc();
	  display_RD1_Rb2();
	}
}

猜你喜欢

转载自blog.csdn.net/m0_57263863/article/details/123999032