23.03.2012, 09:25 | #1 (permalink) |
Member
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
|
ATmega16 и DS1820
Код:
//#define F_CPU 8000000 #include <mega16.h> #include <ds1820.h> #include <1wire.h> #asm .equ __w1_port=0x18;PORTB .equ __w1_bit=0 #endasm #include <stdio.h> #include <lcd.h> #asm .equ __lcd_port=0x1b;PORTA #endasm #include <delay.h> char lcd_buffer[33]; void main(void){ char sign; int temp; lcd_init(16); w1_init(); while(1){ temp=ds1820_temperature_10(0); sign='+'; //читаем температуру if (temp>1000){ //если датчик выдаёт больше 1000 temp=4096-temp; //отнимаем от данных 4096 temp=-temp; //и ставим знак "минус" } sprintf(lcd_buffer,"t=%i",temp/10,temp%10); //записываем масив для экрана температуру lcd_clear(); //чистим дисплей перед выводом lcd_puts(lcd_buffer); //выводим масив на LCD delay_ms(500); //ждём 500мс }; } |
23.03.2012, 10:43 | #2 (permalink) |
Member
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
|
Разобрался.
Может кому пригодится Код:
/******** По поводу портов описаны они в даташите к atmega16 укажу здесь список портов и их 16-ти ричный адрес PORTA = 0x1b; PORTA = 0x18; PORTA = 0x15; PORTA = 0x12; ********/ #include <mega16.h> //библиотека нашей atmega16 #include <ds1820.h> // библиотека температурного датчика ds1820 #include <1wire.h> //библиотека шины 1wire #asm .equ __w1_port=0x18;PORTB //Порт Б будем использовать для шины .equ __w1_bit=0 //пин 0 или PB0 #endasm #include <stdio.h> //библиотека ввода-вывода необходима в данном случае для функции sprintf #include <lcd.h> //библитека lcd #asm .equ __lcd_port=0x1b;PORTA #endasm #include <delay.h> unsigned char lcd_buffer[33]; void main(void){ char sign; int temp; lcd_init(16); w1_init(); #asm("sei"); while(1){ //char text; temp=ds1820_temperature_10(0)/10; sign='+'; //читаем температуру if (temp>1000){ //если датчик выдаёт больше 1000 //sign='-'; //temp=-temp; temp=4096-temp; //отнимаем от данных 4096 temp=-temp; //и ставим знак "минус" } sprintf(lcd_buffer,"Temp1: %d\n\r", temp) ;//записуемв масив для экрана температуру и всё такое lcd_clear(); //чистим дисплей перед выводом lcd_puts(lcd_buffer); //выводим масив на LCD delay_ms(500); //ждём 500мс }; } |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|