微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440驱动4.3寸TFT屏程序

S3C2440驱动4.3寸TFT屏程序

时间:11-21 来源:互联网 点击:

  1. 1,color);
  2. if(e>0){x1+=1;e-=dy;}
  3. y1+=1;
  4. e+=dx;
  5. }
  6. }
  7. }
  8. else//dy
  9. {
  10. dy=-dy;//dy=abs(dy)
  11. if(dx>=dy)//8/8octant
  12. {
  13. e=dy-dx/2;
  14. while(x1<=x2)
  15. {
  16. PutPixel(x1,y1,color);
  17. if(e>0){y1-=1;e-=dx;}
  18. x1+=1;
  19. e+=dy;
  20. }
  21. }
  22. else//7/8octant
  23. {
  24. e=dx-dy/2;
  25. while(y1>=y2)
  26. {
  27. PutPixel(x1,y1,color);
  28. if(e>0){x1+=1;e-=dy;}
  29. y1-=1;
  30. e+=dx;
  31. }
  32. }
  33. }
  34. }
  35. else//dx
  36. {
  37. dx=-dx;//dx=abs(dx)
  38. if(dy>=0)//dy>=0
  39. {
  40. if(dx>=dy)//4/8octant
  41. {
  42. e=dy-dx/2;
  43. while(x1>=x2)
  44. {
  45. PutPixel(x1,y1,color);
  46. if(e>0){y1+=1;e-=dx;}
  47. x1-=1;
  48. e+=dy;
  49. }
  50. }
  51. else//3/8octant
  52. {
  53. e=dx-dy/2;
  54. while(y1<=y2)
  55. {
  56. PutPixel(x1,y1,color);
  57. if(e>0){x1-=1;e-=dy;}
  58. y1+=1;
  59. e+=dx;
  60. }
  61. }
  62. }
  63. else//dy
  64. {
  65. dy=-dy;//dy=abs(dy)
  66. if(dx>=dy)//5/8octant
  67. {
  68. e=dy-dx/2;
  69. while(x1>=x2)
  70. {
  71. PutPixel(x1,y1,color);
  72. if(e>0){y1-=1;e-=dx;}
  73. x1-=1;
  74. e+=dy;
  75. }
  76. }
  77. else//6/8octant
  78. {
  79. e=dx-dy/2;
  80. while(y1>=y2)
  81. {
  82. PutPixel(x1,y1,color);
  83. if(e>0){x1-=1;e-=dy;}
  84. y1-=1;
  85. e+=dx;
  86. }
  87. }
  88. }
  89. }
  90. }
  91. /**************************************************************
  92. 在LCD屏幕上画一个矩形
  93. **************************************************************/
  94. voidGlib_Rectangle(intx1,inty1,intx2,inty2,intcolor)
  95. {
  96. Glib_Line(x1,y1,x2,y1,color);
  97. Glib_Line(x2,y1,x2,y2,color);
  98. Glib_Line(x1,y2,x2,y2,color);
  99. Glib_Line(x1,y1,x1,y2,color);
  100. }
  101. /**************************************************************
  102. 在LCD屏幕上用颜色填充一个矩形
  103. **************************************************************/
  104. voidGlib_FilledRectangle(intx1,inty1,intx2,inty2,intcolor)
  105. {
  106. inti;
  107. for(i=y1;i<=y2;i++)
  108. Glib_Line(x1,i,x2,i,color);
  109. }
  110. /**************************************************************
  111. 在LCD屏幕上指定坐标点画一个指定大小的图片
  112. **************************************************************/
  113. voidPaint_Bmp(intx0,inty0,inth,intl,unsignedcharbmp[])
  114. {
  115. intx,y;
  116. U32c;
  117. intp=0;
  118. for(y=y0;y
  119. {
  120. for(x=x0;x
  121. {
  122. c=bmp[p+1]|(bmp[p]<8);
  123. if(((x0+x)
  124. LCD_BUFFER[y0+y][x0+x]=c;
  125. p=p+2;
  126. }
  127. }
  128. }
  129. //=============================================================
  130. //语法格式:voidTFT_Circle(intx,inty,intr,intcolor,unsignedcharMode);
  131. //实现功能:在屏幕中画圆
  132. //参数:
  133. //x-圆心的x坐标
  134. //y-圆心的y坐标
  135. //r-圆的半径
  136. //color-圆的颜色
  137. //Mode-0空心圆
  138. //1实心圆
  139. //返回值:无
  140. //=============================================================
  141. voidTFT_Circle(intx,inty,intr,intcolor,unsignedcharMode)
  142. {
  143. intdx,dy,ref;
  144. intTemp;
  145. if(r==0)
  146. return;
  147. dx=r;
  148. dy=1;
  149. ref=707*r/1000;//参考值为0.707r
  150. if(Mode==1)//实心圆
  151. {
  152. while(dy<=dx)
  153. {
  154. if(dx>ref)
  155. Glib_Line(x+ref+1,y+dy,x+dx,y+dy,color);
  156. if(x>=ref+1&&dx>ref)
  157. {
  158. if(x
  159. Temp=0;
  160. else
  161. Temp=x-dx;
  162. Glib_Line(Temp,y+dy,x-ref-1,y+dy,color);
  163. }
  164. if(y>=dy&&dx>ref)
  165. Glib_Line(x+ref+1,y-dy,x+dx,y-dy,color);
  166. if(x>=ref+1&&y>=dy&&dx>ref)
  167. {
  168. if(x
  169. Temp=0;
  170. else
  171. Temp=x-dx;
  172. Glib_Line(Temp,y-dy,x-ref-1,y-dy,color);
  173. }
  174. if(dy!=dx||dx==ref)
  175. {
  176. if(y
  177. Temp=0;
  178. else
  179. Temp=y-dx;
  180. Glib_Line(x+dy,Temp,x+dy,y+dx,color);
  181. }
  182. if(x>=dy&&(dy!=dx||dy==ref))
  183. {
  184. if(y
  185. Temp=0;
  186. else
  187. Temp=y-dx;
  188. Glib_Line(x-dy,Temp,x-dy,y+dx,color);
  189. }
  190. dy++;
  191. if((r*r-dy*dy)<=(dx-1)*dx)
  192. dx--;
  193. }
  194. Glib_Line(x+ref+1,y,x+r,y,color);
  195. if(x>=ref+1)
  196. {
  197. if(x
  198. Temp=0;
  199. else
  200. Temp=x-r;
  201. Glib_Line(Temp,y,x-ref-1,y,color);
  202. }
  203. if(y
  204. Temp=0;
  205. else
  206. Temp=y-r;
  207. Glib_Line(x,Temp,x,y+r,color);
  208. }
  209. else//空心圆
  210. {
  211. while(dy<=dx)
  212. {
  213. PutPixel(x+dx,y+dy,color);
  214. PutPixel(x-dx,y+dy,color);
  215. PutPixel(x+dx,y-dy,color);
  216. PutPixel(x-dx,y-dy,color);
  217. if(dx!=dy)
  218. {
  219. PutPixel(x+dy,y+dx,color);
  220. PutPixel(x+dy,y-dx,color);
  221. PutPixel(x-dy,y+dx,color);
  222. PutPixel(x-dy,y-dx,color);
  223. }
  224. dy++;
  225. if((r*r-dy*dy)<=(dx-1)*dx)
  226. dx--;
  227. }
  228. PutPixel(x+r,y,color);
  229. PutPixel(x-r,y,color);
  230. PutPixel(x,y+r,color);
  231. PutPixel(x,y-r,color);
  232. }
  233. }
  234. /**************************************************************
  235. *
  236. *LCD屏初始化
  237. *
  238. **************************************************************/
  239. voidLcd_TFT_Init(void)
  240. {
  241. Lcd_Init();
  242. Lcd_PowerEnable(0,1);
  243. Lcd_EnvidOnOff(1);//turnonvedio
  244. Lcd_ClearScr((0x00<11)|(0x00<5)|(0x00));//565格式纯黑色
  245. }
  246. voidMain(void)
  247. {
  248. SelectFclk(2);//设置系统时钟400M
  249. ChangeClockDivider(2,1);//设置分频1:4:8
  250. CalcBusClk();//计算总线频率
  251. Lcd_TFT_Init();
  252. Lcd_ClearScr((0x00<11)|(0x00<5)|(0x0e));//背景整屏蓝屏
  253. Glib_Rectangle(10,10,150,150,(0x1f<11)|(0x00<5)|(0x00));//空心正方形边为纯红
  254. Glib_FilledRectangle(20,20,100,100,(0x1f<11)|(0x00<5)|(0x1f));//品红正方形
  255. Gli

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top