Jak přepsat #define kdekoli v programu??

Vždyť v tom kódu DS18B20_DQ nemáš nikde použitý. Tady je Ti jeho definice k ničemu. #define NENÍ proměnná programu, ale musíš na ní koukat jako na proměnnou pro překladač. Překladač “čte” a překládá postupně kód. Když narazí na DS18B20_DQ, tak tam dosadí hodnotu, kterou DS18B20_DQ zrovna obsahuje (pokud není definovaná, vyhodí chybu). Takže přeloží rutinu pro obsluhu a víc už DS18B20_DQ nepotřebuje. To, že pak měníš obsah definice DS18B20_DQ a vkládáš volání obsluhy teploměru už nic neřeší, protože tam už s DS18B20_DQ překladač nepracuje. Jinak jsi správně pochopil, že pro 3 teploměry musíš mít 3 v podstatě identické rutiny (až na ten pin). Tady je pak už jenom jediná možnost - a to vzít rutiny pro teploměr a zkopírovat je jako :

ds18b20_reset_1();
ds18b20_reset_2();
ds18b20_reset_3();

V každém případě musíš mít obsluhu každého teploměru samostatně.

A pokud obsluha teploměru není Tvá vlastní, ale nějaká knihovna, pak budeš muset všechny teploměry pověsit na 1 pin a doufat, že knihovna umí komunikovat s více teploměrama na jednom pinu. Je tam trochu nevýhoda v tom, že si podle adres jednotlivých teploměrů musíš zjistit, který teploměr to fyzicky je.