Если бы вы имели дело с ARM-ами, то могли бы настраивать частоту на лету. Какую захотел, такую и поставил прямо на месте через API CMSIS. Но тут у вас AVR, и частота задаётся через фьюзы. А ещё через фьюзы контроллер влёт превращается в кирпич, да так что без высоковольтного программатора (который та ещё редкость), МК обратно не оживить. И настройка частоты - это одна из тех вещей, неправильно значение которой может убить (почти) МК.
Поэтому первый момент - никогда не ставьте/снимайте галочки там, где не уверены!
Вот картинка настройки фьюзов в Atmel Studio
Когда попадёте на эту страницу, нажмите Read, чтобы удостовериться что на экране правильная инфа.
Самый нижний носит имя SUT_CKSEL, а через один над ним CKDIV8.
Для начала SUT_CKSEL - у вас должен стоять один из вариантов INTOSC_8MHZ. И нет значения, какой именно. Все эти KCK, CK и MS указывают на время задержки между подачей питания и стартом МК, нужны лишь для случая работы от полудохлых батареек без контроллера питания. "Ускорить загрузку" ими тоже не удасться, речь идёт о значениях, меньших 0.1 секунды.
Если у вас и так значение SUT_CKSEL начинается с INTSOC_8MHZ, то не трогайте там ничего. Убить МК вы сумеете, а лучше для вашей задачи вы всё равно не сделаете.
Теперь проверьте наличие галочки CKDIV8. И вот она вам и нужна. Её нужно установить. Если она стоит, то вот эти самые 8мгц с внутреннего генератора делятся на 8. Итого - 1Мгц, то что вам и нужно!
Хотя насколько я вспоминаю, эта галка прошивается на заводе, и во фьюзы вам лезть не нужно вообще.
Если после нажатия на Read вы увидели, что SUT_CKSEL уже показывает на INTOSC_8MHZ..., а галка CKDIV8 уже стоит, то никуда больше не жмите и просто уйдите с этой страницы. Повторять не устану - любые необдуманные манипуляции здесь убъют ваш МК. Особенно опасными являются галки:
RSTDISBL - поставьте её и без HVPP-программатора вы ничего с МК сделать не сумеете
SPIEN - а вот её никак нельзя снимать, а то результат будет не менее плачевен.
Ну и выбор любого EXTXOSC_... источника тактирования приведёт к тому, что ваш МК станет кирпичом до того, как вы подключите данный источник тактирования. Выбрали керамический резонатор - бегите в ЧипДип за таковым и парочкой конденсаторов, чтобы хотябы поставить фьюзы назад!
А теперь по поводу того, что вы уже сделали:
прописав:
#define F_CPU 1000000
или
#ifndef F_CPU 1000000UL
в реальности - совершенно равноправные строчки, вы тем самым указали всяким библиотекам (вроде того-же delay.h), что МК будет работать на частоте в 1Мгц. Дело в том, что метод delay(...) или любые другие методы, завязанные на реальное время или реальные временные интервалы без этой строчки ничего о этом самом времени не знают. Они могут лишь посчитать количество тактов МК. И когда вы указываете, что вам нужно пауза а 1сек, то на основании записи о частоте (на основании F_CPU) библиотека delay.h высчитывает количество тактов, которые нужно провисеть внутри функции, чтобы получить задержку в 1с (в вашем случае, разумеется идёт речь о миллионе тактов).
Если эта настройка (F_CPU) не выполнена, или если она не отражает реальную частоту МК, то все функции ожидания и прочие будут работать несколько странно - то есть ждать либо большее либо меньшее чем запрошенное время.
Ну и вдогонку - существует 1001 различных причин, почему на дисплей выводится 0. В том числе может быть нерабочим дисплей.
И ещё - датчик ds18b20 работает по протоколу single wire, аппаратной реализации на AVR этого протокола банально не существует, да и не нужна она то особо, при условии крайне низкой скорости самого протокола. А программным библиотекам должно быть не так уж и важно, какая там частота у МК. Поэтому мне кажется очень странным ваше желание получить частоту ровно в 1Мгц для взаимодействия с данным датчиком.