void Init_LCD() {
IIC_WriteCommand(0xAE); // turn off display
IIC_WriteCommand(0xD5); // set display clock divide ratio/oscillator frequency
IIC_WriteCommand(0x80);
IIC_WriteCommand(0xA8); // set multiplex ratio
IIC_WriteCommand(0x3F);
IIC_WriteCommand(0xD3); // set display offset
IIC_WriteCommand(0x00);
IIC_WriteCommand(0x40); // set display start line
IIC_WriteCommand(0x8D); // set charge pump
IIC_WriteCommand(0x14);
IIC_WriteCommand(0x20); // set memory addressing mode
IIC_WriteCommand(0x00);
IIC_WriteCommand(0xA1); // set segment remap
IIC_WriteCommand(0xC8); // set COM output scan direction
IIC_WriteCommand(0xDA); // set COM pins hardware configuration
IIC_WriteCommand(0x12);
IIC_WriteCommand(0x81); // set contrast control
IIC_WriteCommand(0xCF);
IIC_WriteCommand(0xD9); // set pre-charge period
IIC_WriteCommand(0xF1);
IIC_WriteCommand(0xDB); // set VCOMH deselect level
IIC_WriteCommand(0x40);
IIC_WriteCommand(0xA4); // set entire display on/off
IIC_WriteCommand(0xA6); // set normal/inverse display
IIC_WriteCommand(0xAF); // turn on display
}
void Disp_Digit(unsigned char digit) {
unsigned char seg_data = 0;
switch (digit) {
case 0: seg_data = 0xC0; break;
case 1: seg_data = 0xF9; break;
case 2: seg_data = 0xA4; break;
case 3: seg_data = 0xB0; break;
case 4: seg_data = 0x99; break;
case 5: seg_data = 0x92; break;
case 6: seg_data = 0x82; break;
case 7: seg_data = 0xF8; break;
case 8: seg_data = 0x80; break;
case 9: seg_data = 0x90; break;
default: break;
}
IIC_WriteData(seg_data);
}
void Disp_Num(unsigned int num) {
unsigned char i, digit;
for (i = 0; i < 4; i++) {
digit = num % 10;
num /= 10;
Disp_Digit(digit);
DISP_CTRL = ~(1 << i);
delay(10);
}
}
int Measure_Capacitance() {
// 電容測試程式碼
}
int Measure_Resistor() {
// 電阻測試程式碼
}
int Measure_Voltage() {
// 電壓測試程式碼
}
int Measure_Current() {
// 電流測試程式碼
}
void main() {
unsigned char btn_state = 0;
unsigned int value;
Init_LCD();
while (1) {
value = 0;
if (BUTTON & 0x01) { // 電容測試
value = Measure_Capacitance();
}
else if (BUTTON & 0x02) { // 電阻測試
value = Measure_Resistor();
}
else if (BUTTON & 0x04) { // 電壓測試
value = Measure_Voltage();
}
else if (BUTTON & 0x08) { // 電流測試
value = Measure_Current();
}
Disp_Num(value);
delay(500);
}
}