用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();
}
}