In a wild affair in which the teams combined for 1,229 total yards, Morris finished 15 of 25 for 369 yards for the Hurricanes (7-5, 5-3) — who never trailed but could never really breathe easy, either.
Sean Renfree threw for a career-high 432 yards and a career-high-tying four touchdowns in his final home game for Duke (6-6, 3-5), which trailed by 21 late. Brandon Connette's second touchdown run of the day pulled the Blue Devils within seven points with 2:32 left.
After Ross Martin's onside kick went out of bounds, Miami ran out the clock to seal its first share of a division title since joining the ACC in 2004.
Johnson scored on runs of 18, 6 and 65 yards. He finished his freshman year with 947 yards rushing, easily surpassing Clinton Portis' 13-year-old school freshman rushing record of 838 yards.
Johnson nearly threw a touchdown pass, too, but replay officials determined that his late 1-yard jump pass to Walford on fourth-and-goal bounced off the end zone turf before he could pull it in.
On Duke's next snap, Renfree hit Jamison Crowder for a 99-yard touchdown pass — the longest play in school history — with 11:45 left. That pulled Duke within 45-31. Renfree, who was 36 of 59, added scoring passes of 23 yards to Crowder and 10 and 6 yards to Conner Vernon.
Connette had an early 4-yard touchdown run. Crowder finished with eight catches for 203 yards while Vernon added 11 receptions for 109 yards for the Blue Devils, who will enter their first bowl game since 1994 on a four-game losing streak.
The Hurricanes were playing their first game since announcing earlier in the week that they would stay home from the postseason for the second straight year because of an NCAA investigation that is expected to eventually lead to stiff sanctions against them.
With Georgia Tech — which Miami beat two months ago — headed to Charlotte for next weekend's title game, some fans in the Hurricanes' corner of Wallace Wade Stadium proudly held posters bearing anti-NCAA messages.
Miami scored on four of its first six first-half possessions and led 31-10 early in the second half. James' scoring dive with 8 seconds left in the half made it 28-10 at the break, and Jake Wieclaw made it a 21-point game on Miami's opening drive of the half.