Здравствуйте уважаемые коллеги. Давно я не писал статьей и вот решил Вас удивить. Вот решил сделать подарок моему другу компьютерщику, и по стал выбор что подарить, хотелось что-то и полезное и оригинальное. Долго думая, искал в инете какие-то интересные схемки, оригинальные реализации различных устройств. Натолкнулся я на схему бинарных часов. Идея интересная. Но такое уже есть. Немного подумав, я решил сделать бинарный комнатный термометр. Диапазон до 63*.
Главная идея заключается в следующем: в двоичном(бинарном) коде показывать температуру, а на другой панели светодиодов показывать количество опросов датчика от 0 до 15 раз.
Код программы:
#include <tiny2313.h> #include <delay.h>
// 1 Wire Bus functions #asm .equ __w1_port=0x12 ;PORTD .equ __w1_bit=6 #endasm #include <1wire.h>
// DS1820 Temperature Sensor functions #include <ds18b20.h>
// Declare your global variables here int temp; void main(void) { // Declare your local variables here
// Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif
// Input/Output Ports initialization // Port A initialization // Func2=In Func1=In Func0=In // State2=T State1=T State0=T PORTA=0x00; DDRA=0x00;
// Port B initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00; DDRB=0xFF;
// Port D initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=P State4=P State3=P State2=P State1=P State0=P //PORTD=0x3F; //DDRD=0x00; PORTD=0x00; DDRD=0xFF;
// 1 Wire Bus initialization w1_init();
while (1) { temp=ds18b20_temperature(0); //читаем температуру delay_ms(500);
if (temp<65) PORTB= temp;
if (PORTD<15) { PORTD++; } else PORTD=0; }; }
Несколько фото устройства:
|