You need to adjust your uv coordinates. You want the top left uv to correspond with the location on the sprite sheet. Say your sprite sheet is 256x256 pixels and the frame you want starts at (32, 32).
You can think of the uv's as a percentage of the image. The horizontal percentage is 32/256. (12.5% of the sheet) so the u for the left vertices should be 0.125.
The u for the right vertices depends on how large each frame is. Lets say 16x16. Then the two right vertices' u's would be (32+16)/256 or 0.1875 of the sheet.
now for the v's. 0 is at the bottom, and the frame position is defined from the top. 32/256 would give us a percentage from the bottom of the image. What we need is (256-32)/256 to get the percentage from the bottom of the sheet to the top of the image - 0.875 (yay!)
The bottom vertices are an additional distance from the top of frame size. So (256-32-16)/256 or 0.8125.
So to recap, the uv coords for each vertex is:
top left : (frame.x / sheet.w , (sheet.h - frame.y) / sheet.h)
bottom left:(frame.x / sheet.w , (sheet.h - frame.y - frame.h) / sheet.h)
top right: ((frame.x + frame.w) / sheet.w , (sheet.h - frame.y) / sheet.h)
bottom right: ((frame.x + frame.w) / sheet.w , (sheet.h - frame.y - frame.h) / sheet.h)
where x = x position, y = y position, w = width, h = height all in pixels
If you see a mistake anywhere, please point it out. I'm actually about to implement this for my engine and explaining it helped me figure it out.
With this information you should be able to create a render function that takes some of these parameters and draws a subsection of the image. Then, you can just change the frame positions every animation step to animate the image.