Форум восстановлен после взлома! Увы многие сообщения утеряны, остались только до 2013 года. Теперь форум копируется ежедневно, посему просьба вновь пользоваться! С уважением - админ ! (2015/08) |
Помогите пожалуйста. |
Post Reply |
Author | |
Gizmor
Newbie Joined: 25 Feb 2010 Location: Ukraine Status: Offline Points: 1 |
Post Options
Thanks(0)
Posted: 25 Feb 2010 at 21:26 |
Помогите пожалуйста прикрутить часы к этому проекту если вам не трудно.
Код: #include <mega8.h> #include <stdlib.h> #include <delay.h> #include <ctype.h> #include <string.h> #include <stdio.h> #asm .equ __w1_port=0x18 .equ __w1_bit=0 #endasm #asm .equ __lcd_port=0x12 #endasm #include <lcd.h> #include <ds18b20.h> char lcd_buffer[40],i,j,devices; /* maximum number of DS18B20 connected to the 1 Wire bus */ #define MAX_DEVICES 8 /* DS18B20 devices ROM code storage area */ unsigned char rom_code[MAX_DEVICES][9]; void system_init(void) { lcd_init(20); //LCD 4 строки по 20 lcd_putsf("CONTROL TEMPERATURE"); delay_ms(1000); lcd_clear(); //Заставим работать все прерывания #asm("sei") } main() { system_init(); /* detect how many DS18B20 devices are connected to the 1 Wire bus */ devices=w1_search(0xf0,rom_code); sprintf(lcd_buffer,"%u DS18B20\nDevice detected",devices); lcd_puts(lcd_buffer); delay_ms(2000); /* Покажем ROM коды на каждое из обнаруженных устройств */ if (devices) { for (i=0;i<devices;i++) { sprintf(lcd_buffer,"Device #%u ROM\nCode is:",i+1); lcd_clear(); lcd_puts(lcd_buffer); delay_ms(2000); lcd_clear(); for (j=0;j<8;j++) { sprintf(lcd_buffer,"%02X ",rom_code[j]); lcd_puts(lcd_buffer); if (j==3) lcd_gotoxy(0,1); }; delay_ms(500); }; } else { lcd_gotoxy(0,1); lcd_putsf("NO DS18b20 DEVICES!!!"); while (1); /* Залипнем навсегда если ничего не было подключено */ } /* Поставим каждый датчик в режим измерения с 12ти битной точностью */ for (i=0;i<devices;) if (!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_12BIT_RES)) { sprintf(lcd_buffer,"Init error for\ndevice #%u",i); lcd_clear(); lcd_puts(lcd_buffer); while (1); /* Залипаем при ошибках перевода в нужный режим точности*/ }; /* measure and display the temperature(s) */ while (1) { j=1; //lcd_clear(); если мы постоянно по циклу пишем одно на другое то и очищать экран не надо. миганий не будет!!! for (i=0;i<devices;i++) { //В данном варианте первые 4 датчика обзаываются как CPU GPU NB Case. Дополнительные датчики, //которые еще были налеплены на порт С обзываются как T1, T2, T3 и так далеее if (i>3) { sprintf(lcd_buffer,"T%u=%+.1f\xdfC ",j++,ds18b20_temperature(&rom_code[0])); lcd_gotoxy(0,i-4); } else lcd_gotoxy(0,i); if (!i) sprintf(lcd_buffer,"CPU=%+.1f\xdfC ",ds18b20_temperature(&rom_code[0])); if (i==1) sprintf(lcd_buffer,"GPU=%+.1f\xdfC ",ds18b20_temperature(&rom_code[0])); if (i==2) sprintf(lcd_buffer,"NB=%+.1f\xdfC ",ds18b20_temperature(&rom_code[0])); if (i==3) sprintf(lcd_buffer,"CASE=%+.1f\xdfC ",ds18b20_temperature(&rom_code[0])); lcd_puts(lcd_buffer); delay_ms(1000); }; }; } Заранее Всем спасибо. |
|
Post Reply | |
Tweet
|
Forum Jump | Forum Permissions You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |