The Turkey international's second-half strike proved enough to separate the sides at the BayArena, with Karim Bellarabi instrumental in the build up.
Leverkusen threatened in the opening half with Emir Spahic being denied on two occasions, but they were grateful to Bernd Leno for making two late saves to keep the score level.
Following a goalless first 45 minutes the game was finally brought to life just before the hour, Calhanoglu converting with a powerful angled finish.
Even the introduction of Fernando Torres could not inspire Atletico – who saw Tiago sent off late on – as they failed to score for a second successive Champions League game.
Roger Schmidt's side will take a narrow advantage to Spain for the second leg on March 17, knowing another clean sheet will see them through to the quarter-finals.
Leverkusen came out of the blocks quickly, dominating possession, but were unable to find a way through before half-time, Lars Bender wasting the first opening in the seventh minute.
Bellarabi led a swift counter-attack for the hosts, but, when the ball found Bender he dragged his effort wide from the edge of the area.
The visitors were grateful to Mario Mandzukic five minutes later as he cleared Spahic's effort off the line after the Bosnia defender had diverted Wendell's shot towards goal.
Spahic's attempts to score a first Champions League goal continued as the half hour approached, with his long-range strike cannoning back off Moya's crossbar.
Atleti had been quiet in the final third inside the opening 40 minutes, but Leno needed to be alert to make two saves before the break.
Having pushed away Arda Turan's lob before Antoine Griezmann could head home, the goalkeeper made a superb reaction save in stoppage time to keep Tiago's acrobatic volley out.
The deadlock was final broken in the 57th minute as Calhanoglu collected a sumptuous backheel from Bellarabi, before lashing the ball high into Moya's net.
Calhanoglu nearly had a second after 71 minutes, the forward's long-range free-kick taking a deflection, but Moya was able to adjust and make the save.
As the game opened up in the final 20 minutes both sides had chances to score, with Torres - on for Turan just past the hour - putting the ball into the net in the 75th minute, only for referee Pavel Kralovec to rule it out.
Atletico finished the game, which saw nine bookings in total, with 10 men when Tiago was shown a second yellow for a foul on Bellarabi.
His dismissal added to the Liga side's frustrations as they suffered their first Champions League defeat since the opening group game.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.