Помогите пожалуйста прикрутить часы к этому проекту.
Хочется еще что бы были часы, но с "Си" и codevisin я не дружу, а очень хочется собрать этот проект.
Спасибо всем заранее. Код:
#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[140],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[i][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[i][0]));
lcd_gotoxy(0,i-4);
}
else lcd_gotoxy(0,i);
if (!i)
sprintf(lcd_buffer,"CPU=%+.1f\xdfC ",ds18b20_temperature(&rom_code[i][0]));
if (i==1)
sprintf(lcd_buffer,"GPU=%+.1f\xdfC ",ds18b20_temperature(&rom_code[i][0]));
if (i==2)
sprintf(lcd_buffer,"NB=%+.1f\xdfC ",ds18b20_temperature(&rom_code[i][0]));
if (i==3)
sprintf(lcd_buffer,"CASE=%+.1f\xdfC ",ds18b20_temperature(&rom_code[i][0]));
lcd_puts(lcd_buffer);
delay_ms(1000);
};
};
}