/* LCD V-Meter 6bit 2011/02/06 AT90S2313 2/13 BY M.Kikuchi Used ROM (bytes): 1264 (62%) Free ROM (bytes): 784 (38%) */ // Lcd pinout settings sbit LCD_RS at PORTD0_bit; sbit LCD_EN at PORTD1_bit; sbit LCD_D4 at PORTD2_bit; // LCD_D4-D7 LCDPin sbit LCD_D5 at PORTD3_bit; sbit LCD_D6 at PORTD4_bit; sbit LCD_D7 at PORTD5_bit; // Pin direction sbit LCD_RS_Direction at DDD0_bit; sbit LCD_EN_Direction at DDD1_bit; sbit LCD_D4_Direction at DDD2_bit; sbit LCD_D5_Direction at DDD3_bit; sbit LCD_D6_Direction at DDD4_bit; sbit LCD_D7_Direction at DDD5_bit; char AD_Converter(){ // 6bit 0-63 char i,AD_TEMP; DDRB=0b11111100; // 1=out 0=in ACD_bit = 0; // 0=active PORTB = 0; // to ACO=1 for (i = 0;i < 64;i ++){ PORTB = (i<<2) & 0b11111100; //6bit if (ACO_bit==0){ AD_TEMP = i; i = 64; } } ACD_bit = 1; DDRB = 0; //0=in return (AD_TEMP); } void main() { char TEMP,ad10,ad1,Flag; // DDRB = 0; //1=out 0=in DDRD = 0b01111111; PORTD = 0xff; // Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off // while(1){ TEMP = AD_Converter(); if ((TEMP & 1)==1) Flag = 0x35; //0.5V check else Flag = 0x30; TEMP >>= 1; // 文字列に変更する ad10 =(TEMP/10)+0x30; // 10 V if (ad10==0x30) ad10=0x20; ad1 =(TEMP%10)+0x30; // 1 V Lcd_Chr(1, 2, ad10); Lcd_Chr_Cp(ad1); Lcd_Chr_Cp('.'); Lcd_Chr_Cp(Flag); Lcd_Chr_Cp(' '); Lcd_Chr_Cp('V'); Delay_ms(300); } }