#define ERR 1
#define SUCC 0
bit ack = 0; //bit定义的变量仅有0和1
void iic_start()
{
SDA = 1;
SCL = 1;
delay_us(1);
SDA = 0;
delay_us(1);
SCL = 0; //钳住总线
}
void iic_stop()
{
SDA = 0;
SCL = 1;
delay_us(1);
SDA = 1;
delay_us(1);
SCL = 0;
}
bit iic_send_byte(unsigned char byte)
{
unsigned char i ;
for(i = 0; i < 8; i++)
{
SDA = byte & 0x80; //非0值,SDA = 1; 0,SDA = 0;
SCL = 1;
delay_us(1);
SCL = 0;
byte <<= 1;
}
SCL = 1;
SDA = 1;
delay_us(1);
if(0 == SDA)
{
ack = 1;
}
else
{
ack = 0;
}
SCL = 0;
return 0;
}
unsigned char iic_rec_byte()
{
unsigned char i;
unsigned char temp = 0;
unsigned char a;
SDA = 1;
for(i = 0; i < 8; i++)
{
SCL = 0;
delay_us(1);
SCL = 1;
if(SDA)
{
a = 0x01;
}
else
{
a = 0;
}
temp |= (a << (7 - i));
delay_us(1);
}
SCL = 0;
return temp;
}
void iic_ack()
{
SDA = 0;
SCL = 1;
delay_us(1);
SCL = 0;
}
void iic_noack()
{
SDA = 1;
SCL = 1;
delay_us(1);
SCL = 0;
}
unsigned char DA_write(unsigned char num)
{
iic_start();
iic_send_byte(0x90);
if(0 == ack) return ERR;
iic_send_byte(0x40);
if(0 == ack) return ERR;
iic_send_byte(num);
if(0 == ack) return ERR;
iic_stop();
return SUCC;
}
unsigned char AD_Read()
{
unsigned char temp;
iic_start();
iic_send_byte(0x90);
if(0 == ack) return ERR;
iic_send_byte(0x40);
if(0 == ack) return ERR;
iic_start();
iic_send_byte(0x90 + 1);
if(0 == ack) return ERR;
temp = iic_rec_byte();
iic_noack();
iic_stop();
return temp;
}
void DA_light()
{
unsigned char num = 0;
DA_write(num);
num++;
}
void AD_per_electric()
{
unsigned char temp = 0;
delay_ms(20);
temp = AD_Read();
lcd_write_byte(0,0,temp * 100 / 255 * 5 / 100 % 10 + 0x30);
lcd_write_byte(1,0,'.');
lcd_write_byte(2,0,temp * 100 / 255 * 5 / 10 % 10 + 0x30);
lcd_write_byte(3,0,temp * 100 / 255 * 5 / 1 % 10 + 0x30);
lcd_write_byte(4,0,'V');
if(255 == temp)
{
lcd_write_byte(1,1,temp * 100 / 255 / 100 % 10 + 0x30);
}
else
{
lcd_write(0x48,LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x80 + 1,LCD_WRITE_COM);
lcd_write(0x1,LCD_WRITE_DATA);
}
if((0 == temp * 100 / 255 / 100 % 10) && (0 == temp * 100 / 255 / 10 % 10))
{
lcd_write(0x50,LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x80 + 2,LCD_WRITE_COM);
lcd_write(0x2,LCD_WRITE_DATA);
}
else
{
lcd_write_byte(2,1,temp * 100 / 255 / 10 % 10 + 0x30);
}
lcd_write_byte(3,1,temp * 100 / 255 / 1 % 10 + 0x30);
lcd_write_byte(4,1,'%');
lcd_dis_electric();
}
AD-DA——51
最新推荐文章于 2019-03-23 18:07:58 发布