AD-DA——51
#define ERR 1
#define SUCC 0bit ack = 0; //bit定義的變量僅有0和1void 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();
}
總結
- 上一篇: eeprom
- 下一篇: DS1302——51