The visitors stormed into the lead with seven minutes on the clock when Barnes rose highest in the box to head Michael Kightly's cross into the top corner.
Burnley created the better chances in the first period, coming close through top goalscorer Danny Ings before Barnes blew an opportunity to put his side further in front in the 25th minute.
David Jones also failed to find the target with a half-volley 10 minutes before the break, but Burnley controlled the game throughout the first period and thoroughly deserved their lead.
Burnley remained on top after the break, with Kightly almost getting his name on the scoresheet in the 69th minute when he let fly from outside the box, only to be denied by the outstretching Jason Steele.
Sean Dyche's side had numerous chances to put the game to bed, but in the end 1-0 proved enough as Burnley take a step closer to Premier League football.