Библиотеку для работы с этим дисплеем я нашёл. В той программе что я написал всё нормально работает, но когда включаешь эту строку "termometr=ds18b20_temperature(0); " то дисплей обновляется раз в 5 секунд. Почему так?
Вот сама программа
Code
#include <mega8.h>
#include <1wire.h>
#include <delay.h>
#include <ds18b20.h>
#include <3310lcd.C>
#include <stdio.h>
int BAT,RPM,RPM_t,T,termometr;
int MENU;
eeprom unsigned char contrast;
unsigned int adc_data;
#define ADC_VREF_TYPE 0x00
// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
// Read the AD conversion result
adc_data=ADCW;
// Start the AD conversion
ADCSRA|=0x40;
BAT=adc_data;
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
RPM_t++;
}
// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
T++;
if (T==1600)
{
RPM=RPM_t*200;
RPM_t=0;
T=0;
};
}
// Timer2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
}
void main(void)
{
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Toggle
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1B=0x1a;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0xbb;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x06;
TCNT2=0x00;
OCR2=0x09;
// External Interrupt(s) initialization
// INT0: Off
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0x80;
MCUCR=0x0C;
GIFR=0x80;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x90;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 62,500 kHz
// ADC Voltage Reference: AREF pin
ADMUX=0;
ADCSRA=0xCF;
// Global enable interrupts
#asm("sei")
w1_init();
LcdInit(); // LCD module initialization
while (1)
{
if(PIND.0==1&MENU==0){MENU=1; delay_ms(200);LcdClear ();}
if(PIND.0==1&MENU==1){MENU=0; delay_ms(200);LcdClear ();}
if (MENU==0)
{
//termometr=ds18b20_temperature(0);
sprintf(lcd_buf,"ВОЛЬТМЕТР"); //вывод
LcdString(3,1);
sprintf(lcd_buf,"V=%i,%i В ",BAT/100,BAT%100); //вывод
LcdString(4,2);
sprintf(lcd_buf,"ТЕРМОМЕТР"); //вывод
LcdString(3,3);
sprintf(lcd_buf,"%i\x80C ",termometr); //вывод
LcdString(5,4);
sprintf(lcd_buf,"ТАХОМЕТР"); //вывод
LcdString(4,5);
sprintf(lcd_buf,"%i об/мин ",RPM); //вывод
LcdString(2,6);
LcdUpdate(); // вывод на дисплей
};
if (MENU==1)
{
LcdContrast (contrast);
if (PIND.1==1) {contrast++; delay_ms(50);};
if (PIND.2==1) {contrast--; delay_ms(50);};
sprintf(lcd_buf,"**** МЕНЮ ****"); //вывод
LcdString(1,1);
sprintf(lcd_buf,"КОНТРАСТНОСТЬ"); //вывод
LcdString(1,3);
sprintf(lcd_buf,"<< >>",); //вывод
LcdString(3,4);
sprintf(lcd_buf,"%i",contrast); //вывод
LcdString(7,4);
LcdUpdate(); // вывод на дисплей
};
};
}
Весь проэкт здесь http://depositfiles.com/files/asmyrxdbw