простите, если вопрос дурацкий, но сам за неделю ковыряний ответа так и не нашел (
датчик 18b20 выдает показания температуры в двухзначном виде, хотя вроде должен выдавать температуру *10, то есть три знака. ну, или больше, если температура выше ста...
вот, значимые части когда, на мой взгляд:
- Код: Выделить всё • Развернуть
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=0
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdio.h>
#include <1wire.h>
#include <ds18b20.h>
#include <math.h>
#include <stdlib.h>
#define MAX_DS18b20 8
unsigned char ds18b20_devices;
unsigned char ds18b20_rom_codes[MAX_DS18b20][9];
- Код: Выделить всё • Развернуть
void main(void)
{
//unsigned char temper;
int temper;
lcd_init(16);
w1_init() ;
ds18b20_init(&ds18b20_rom_codes[0][0],25,35,DS18B20_10BIT_RES);
{
#asm("cli")
ds18b20_devices=w1_search(0xf0,&ds18b20_rom_codes[0][0]);
#asm("sei")
};
- Код: Выделить всё • Развернуть
lcd_init(16);
// Global enable interrupts
#asm("sei")
lcd_clear();
while (1)
{
// Place your code here
#asm("cli")
temper=ds18b20_temperature (&ds18b20_rom_codes [0] [0]);
PORTA.6=0;
#asm("sei")
lcd_gotoxy(5,0);
sprintf(string_lcd, "%01d\n", ds18b20_temperature (&ds18b20_rom_codes [0] [0]));
lcd_puts(string_lcd);
lcd_gotoxy(3,1);
sprintf(string_lcd2,"%-03d" , temper);
lcd_puts(string_lcd2);
delay_ms (800);
PORTA.6=1;
спасибо! и не пинайте сильно, я в этом совсем новичок )
з.ы. инет изучал, поиск по форуму юзал...
Последний раз редактировалось
Vooon 28 апр 2010, 15:22, всего редактировалось 2 раз(а).
Причина: [code=cpp] !!!