#include // LCD #define CLK 0 #define DAT 1 #define WAIT 30 volatile uint16_t adin; float temp; char str[10]; ISR(ADC_vect) { adin = ADCL; adin |= ADCH << 8; } void setup() { DDRB = 0b00000011; PORTB = 0b00000011; // 省エネ設定 ACSR |= _BV(ACD); // アナログ比較器電力削減 DIDR0 |= _BV(ADC3D); // ADC3(PB3)デジタル入力禁止 // AD変換 ADMUX |= _BV(REFS1) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 内部1.1V基準電圧 温度感知器 ADCSRA |= _BV(ADEN) | _BV(ADIE) | _BV(ADPS1) | _BV(ADPS0); // 動作クロック1MHz 分周値1/8 125kHz // スリープ設定 set_sleep_mode(SLEEP_MODE_ADC); // A/D変換雑音低減動作 sleep_enable(); // スリープ許可 delay(200); // LCD準備待ち sei(); // 割り込み許可 } void loop() { ADCSRA |= _BV(ADSC); // A/D変換開始 sleep_mode(); temp = (adin - 289); dtostrf(temp, 4, 1, str); sendChar(0x80); // カーソル先頭へ(独自コマンド) sendStr(str); delay(500); } void sendChar(uint8_t chr) { for(int n = 0; n < 8; n++) { digitalWrite(DAT, (chr >> n) & 1); delayMicroseconds(WAIT); digitalWrite(CLK, LOW); delayMicroseconds(WAIT); digitalWrite(CLK, HIGH); } } void sendStr(char* str) { char* p; p = str; while(*p != 0) { sendChar(*(p++)); } }