
Вообще желательно, чтобы силовая часть была разведена широкими дорожками. И как можно ближе к микросхемам чтобы стояли керамические кондеры. Но это уже в тему Вопросы по питанию.

Код: Выделить всё
#include <lcd.h>Код: Выделить всё
#ifndef _LCD_INCLUDED_
#define _LCD_INCLUDED_
#pragma used+
void _lcd_ready(void);
void _lcd_write_data(unsigned char data);
// write a byte to the LCD character generator or display RAM
void lcd_write_byte(unsigned char addr, unsigned char data);
// read a byte from the LCD character generator or display RAM
unsigned char lcd_read_byte(unsigned char addr);
// set the LCD display positiоn x=0..39 y=0..3
void lcd_gotoxy(unsigned char x, unsigned char y);
// clear the LCD
void lcd_clear(void);
void lcd_putchar(char c);
// write the string str located in SRAM to the LCD
void lcd_puts(char *str);
// write the string str located in FLASH to the LCD
void lcd_putsf(char flash *str);
// initialize the LCD controller
unsigned char lcd_init(unsigned char lcd_columns);
// writes a control byte to the LCD
void lcd_control (unsigned char control);
#pragma used-
#pragma library lcd.lib
#endifКод: Выделить всё
/*
.Проект: Простой термометр для дома с двумя датчиками ds18b20
.Автор:Гаркуша Антон
.E-mail:gam-raingers@mail.ru
.Дата:29.06.2008
.Проект: Простой термометр для дома с двумя датчиками ds18b20 на дисплее 16х1 и одновременным показанием двух датчиков V1.16.1
.Rebuild by Pelia
.E-mail:pelia@smtp.ru
.Дата:15.03.2013
.При программировании посредством PonyProg поставить SPIEN=1, SUT0=1. Остальные снять! Внешний кварц=10MHz
*/
#define F_CPU 1000000L // Pelia дописал внешний кварц 10МГц
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>
#include <stdbool.h>
#define RS PB0
#define E PB1
unsigned char i=0,j=0,z=0;
unsigned char was_conflict=0; //Признак наличия конфликта битов
unsigned char temperature=0; //Значение t в целых числах
int grand_temperature=0; //Значение t со знаком,полученное от датчика(16 бит)
unsigned char des_temperature=0; //Значение t в десятых долях
unsigned char cifra=0; //Вспомогательная переменная для индикации t
unsigned char znak=0; //Знак температуры: 0 - "+";1 - "-"
unsigned char precense_ds18b20=0; //Признак присутствия датчика
unsigned char buffer[16]={'P','e','l','i','a','@','s','m','t','p','.','r','u',' ',' ',' '}; //Pelia было 8 знаков
unsigned char ROM1[8]={0,0,0,0,0,0,0,0};
unsigned char ROM2[8]={0,0,0,0,0,0,0,0};
bool get_for_two=false;
//======================
void send_command(unsigned char command);
void send_data(unsigned char data);
void ini_LCD(void);
void nosig(void);
void LCD_pause(void);
unsigned char show_cifra(unsigned char i);
void reset_ds1820(void);
void send_ds1820_command(unsigned char command);
void receive_ds1820(void);
unsigned char create_des(void);
void search_ds1820_ROM(void);
void send_ROM_ds1820(unsigned char ROM);
void send_E1(void);
void send_E2(void);
void send_0(void);
void send_1(void);
void zapros_bita(void);
int main(void)
{
DDRB=0xFF;
DDRD=0x00; // Шина изначально свободна
PORTD=0x20;
TIMSK=0x80;
SREG=0x80;
TCNT1=0x48E5;
sei();
ini_LCD();
TCCR1B=0x04;
while(1)
{
if(z==0) ////Pelia дописал: для получения двух значений
{
z=1;
}
else
{
z=0;
}
//Получение от датчиков значений температуры
search_ds1820_ROM(); //получение кода для 1-го
search_ds1820_ROM(); //получение кода для 2-го
reset_ds1820();
send_ds1820_command(0x55); //Адресация ROM
send_ROM_ds1820(z);
send_ds1820_command(0x44); //Команда измерения t
for(j=0;j<80;j++) //Временная пауза 800 мс
{ _delay_loop_2(25000); }
reset_ds1820();
send_ds1820_command(0x55); //Адресация ROM
send_ROM_ds1820(z);
send_ds1820_command(0xBE);
receive_ds1820();
}
};
Dmitrich_163 писал(а):Спасибо, поробОвал, но все тоже самое. Я подозреваю что в энергонезависимую память дисплея записал фразу "Hello World". Пытаюсь вывести другие слова но ничего не получается, постоянно горит "Hello World".
Как очистить памят дисплея???
обязательно ли проверять Busy Flag в 4-х битном режиме после печати каждого символа?