新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > S3C2440驅(qū)動TFT屏(24bit顯示模式)

S3C2440驅(qū)動TFT屏(24bit顯示模式)

作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/201611/318929.htm
  1. /********************************************************************
  2. *文件名:TFT.h
  3. *功能:定義TFT控制器參數(shù),聲明驅(qū)動TFT屏的相關(guān)函數(shù)
  4. *作者:jianqi
  5. *版本:v1.0
  6. ********************************************************************/
  7. #ifndef__TFT_H__
  8. #define__TFT_H__
  9. #include"def.h"
  10. #defineTFT351
  11. #defineTFT432
  12. #defineLCD_TypeTFT43
  13. //4.3寸TFT屏的相關(guān)參數(shù)
  14. #if(LCD_Type==TFT43)
  15. #defineTFT_XSIZE480
  16. #defineTFT_YSIZE272
  17. #defineCLKVAL4
  18. #defineVBPD4
  19. #defineVFPD4
  20. #defineVSPW8
  21. #defineHBPD4
  22. #defineHFPD4
  23. #defineHSPW40
  24. #definePNRMODE3
  25. #defineBPPMODE13
  26. #endif
  27. #defineHOZVALTFT_XSIZE-1
  28. #defineLINEVALTFT_YSIZE-1
  29. voidTFT_Power_Enable(BOOLON_OFF);
  30. voidTFT_Video_ON(BOOLON_OFF);
  31. voidTFT_Contraller_Init(void);
  32. voidPaint_Pixel(U32x,U32y,U32color);
  33. voidTFT_CLearScreen(U32color);
  34. voidDraw_Line(U32x1,U32y1,U32x2,U32y2,U32color);
  35. voidGraw_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color);
  36. voidGraw_Full_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color);
  37. voidPaint_Picture(U32x0,U32y0,U32width,U32height,UCHARbmp[]);
  38. #endif
  39. /********************************************************************
  40. *文件名:TFT.c
  41. *功能:配置ARM芯片的屏幕控制器相關(guān)寄存器,定義TFT相關(guān)顯示函數(shù)
  42. *作者:jianqi
  43. *版本:v1.0
  44. ********************************************************************/
  45. #include"2440addr.h"
  46. #include"TFT.h"
  47. #include"def.h"
  48. volatileunsignedintTFT_Buffer[TFT_YSIZE][TFT_XSIZE];//顯示數(shù)據(jù)緩存區(qū)
  49. /**********************************************
  50. *名稱:TFT_Contraller_Init
  51. *功能:初始化相關(guān)的S3C2440的TFT驅(qū)動寄存器
  52. *入口參數(shù):無
  53. *出口參數(shù):無
  54. **********************************************/
  55. voidTFT_Contraller_Init(void)
  56. {
  57. rGPDCON=0xaaaaaaaa;//使能VD[15:8]
  58. rGPDUP=0x00000000;//使能上拉電阻
  59. rGPCCON=0xaaaa02a9;//使能相關(guān)GPC引腳的LCD控制功能
  60. rGPCUP=0x00000000;//使能上拉電阻
  61. rLCDCON1=(CLKVAL<<8)|(0<<7)|(PNRMODE<<5)|(BPPMODE<<1)|0;
  62. rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW<<0);
  63. rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD<<0);
  64. rLCDCON4=(13<<8)|(HSPW<<0);
  65. rLCDCON5=(1<<11)|(0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(1<<3)|(0<<1)|(1<<0);
  66. rLCDSADDR1=(((U32)TFT_Buffer>>22)<<21)|(((U32)TFT_Buffer>>1)&0x1fffff);//緩存區(qū)起始地址30~22位
  67. rLCDSADDR2=((((U32)TFT_Buffer+(TFT_XSIZE*TFT_YSIZE)*4)>>1)&0x1fffff);//緩存區(qū)結(jié)束地址21~1位
  68. }
  69. /**********************************************
  70. *名稱:TFT_Video_ON
  71. *功能:是否開啟TFT屏
  72. *入口參數(shù):1--開啟TFT;0--關(guān)閉TFT
  73. *出口參數(shù):無
  74. **********************************************/
  75. voidTFT_Video_ON(BOOLON_OFF)
  76. {
  77. if(ON_OFF==1)
  78. rLCDCON1|=1;//ENVID=ON
  79. else
  80. rLCDCON1=rLCDCON1&0xffffe;//ENVID=Off
  81. }
  82. /**********************************************
  83. *名稱:TFT_Power_Enable
  84. *功能:是否使能TFT控制器電源
  85. *入口參數(shù):1--使能;0--不使能
  86. *出口參數(shù):無
  87. **********************************************/
  88. voidTFT_Power_Enable(BOOLEnable_Disenable)
  89. {
  90. rGPGUP=rGPGUP&(~(1<<4))|(1<<4);
  91. rGPGCON=rGPGCON&(~(3<<8))|(3<<8);//GPG4=PWREN
  92. if(Enable_Disenable==1)
  93. {
  94. rGPGDAT=rGPGDAT|(1<<4);
  95. }
  96. else
  97. {
  98. rGPGDAT=rGPGDAT&(~(1<<4));
  99. }
  100. }
  101. /*************************************************************
  102. *名稱:Paint_Pixel
  103. *功能:點亮一個像素點
  104. *入口參數(shù):像素點X坐標(biāo)x,Y坐標(biāo)y,顯示顏色color
  105. *出口參數(shù):無
  106. **************************************************************/
  107. voidPaint_Pixel(U32x,U32y,U32color)
  108. {
  109. if((x
  110. {
  111. TFT_Buffer[y][x]=color;
  112. }
  113. }
  114. /*************************************************************
  115. *名稱:TFT_CLearScreen
  116. *功能:擦除屏幕為指定顏色
  117. *入口參數(shù):擦出顏色color
  118. *出口參數(shù):無
  119. **************************************************************/
  120. voidTFT_CLearScreen(U32color)
  121. {
  122. U32x,y;
  123. for(y=0;y
  124. {
  125. for(x=0;x
  126. {
  127. TFT_Buffer[y][x]=color;
  128. }
  129. }
  130. }
  131. /*************************************************************
  132. *名稱:Draw_Line
  133. *功能:顯示一條直線
  134. *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),線條顏色color
  135. *出口參數(shù):無
  136. **************************************************************/
  137. voidDraw_Line(U32x1,U32y1,U32x2,U32y2,U32color)
  138. {
  139. intdx,dy,e;
  140. dx=x2-x1;
  141. dy=y2-y1;
  142. if(dx>=0)
  143. {
  144. if(dy>=0)
  145. {
  146. if(dx>=dy)//1/8象限
  147. {
  148. e=dy-dx/2;
  149. while(x1<=x2)
  150. {
  151. Paint_Pixel(x1,y1,color);
  152. if(e>0)
  153. {
  154. y1+=1;
  155. e-=dx;
  156. }
  157. x1+=1;
  158. e+=dy;
  159. }
  160. }
  161. else//2/8象限
  162. {
  163. e=dx-dy/2;
  164. while(y1<=y2)
  165. {
  166. Paint_Pixel(x1,y1,color);
  167. if(e>0)
  168. {
  169. x1+=1;
  170. e-=dy;
  171. }
  172. y1+=1;
  173. e+=dx;
  174. }
  175. }
  176. }
  177. else
  178. {
  179. dy=-dy;
  180. if(dx>=dy)//8/8象限
  181. {
  182. e=dy-dx/2;
  183. while(x1<=x2)
  184. {
  185. Paint_Pixel(x1,y1,color);
  186. if(e>0)
  187. {
  188. y1-=1;
  189. e-=dx;
  190. }
  191. x1+=1;
  192. e+=dy;
  193. }
  194. }
  195. else//7/8象限
  196. {
  197. e=dx-dy/2;
  198. while(y1>=y2)
  199. {
  200. Paint_Pixel(x1,y1,color);
  201. if(e>0)
  202. {
  203. x1+=1;
  204. e-=dy;
  205. }
  206. y1-=1;
  207. e+=dx;
  208. }
  209. }
  210. }
  211. }
  212. else
  213. {
  214. dx=-dx;
  215. if(dy>=0)
  216. {
  217. if(dx>=dy)//4/8象限
  218. {
  219. e=dy-dx/2;
  220. while(x1>=x2)
  221. {
  222. Paint_Pixel(x1,y1,color);
  223. if(e>0)
  224. {
  225. y1+=1;
  226. e-=dx;
  227. }
  228. x1-=1;
  229. e+=dy;
  230. }
  231. }
  232. else//3/8象限
  233. {
  234. e=dx-dy/2;
  235. while(y1<=y2)
  236. {
  237. Paint_Pixel(x1,y1,color);
  238. if(e>0)
  239. {
  240. x1-=1;
  241. e-=dy;
  242. }
  243. y1+=1;
  244. e+=dx;
  245. }
  246. }
  247. }
  248. else
  249. {
  250. dy=-dy;
  251. if(dx>=dy)//5/8象限
  252. {
  253. e=dy-dx/2;
  254. while(x1>=x2)
  255. {
  256. Paint_Pixel(x1,y1,color);
  257. if(e>0)
  258. {
  259. y1-=1;
  260. e-=dx;
  261. }
  262. x1-=1;
  263. e+=dy;
  264. }
  265. }
  266. else//6/8象限
  267. {
  268. e=dx-dy/2;
  269. while(y1>=y2)
  270. {
  271. Paint_Pixel(x1,y1,color);
  272. if(e>0)
  273. {
  274. x1-=1;
  275. e-=dy;
  276. }
  277. y1-=1;
  278. e+=dx;
  279. }
  280. }
  281. }
  282. }
  283. }
  284. /*************************************************************
  285. *名稱:Graw_Rectangle
  286. *功能:顯示一條矩形框
  287. *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),矩形框顏色color
  288. *出口參數(shù):無
  289. **************************************************************/
  290. voidGraw_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color)
  291. {
  292. Draw_Line(x1,y1,x2,y1,color);
  293. Draw_Line(x2,y1,x2,y2,color);
  294. Draw_Line(x1,y2,x2,y2,color);
  295. Draw_Line(x1,y1,x1,y2,color);
  296. }
  297. /*************************************************************
  298. *名稱:Graw_Full_Rectangle
  299. *功能:顯示一條矩形框,并填充顏色
  300. *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),填充顏色color
  301. *出口參數(shù):無
  302. **************************************************************/
  303. voidGraw_Full_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color)
  304. {
  305. inti;
  306. for(i=y1;i<=y2;i++)
  307. Draw_Line(x1,i,x2,i,color);
  308. }
  309. /**********************************************************************************
  310. *名稱:Paint_Picture
  311. *功能:顯示一張圖片
  312. *入口參數(shù):起始坐標(biāo)(x0,y0),顯示高度height,顯示寬度width,填充顏色color
  313. *出口參數(shù):無
  314. ************************************************************************************/
  315. voidPaint_Picture(U32x0,U32y0,U32width,U32height,UCHARbmp[])
  316. {
  317. intx,y;
  318. U32c;
  319. intp=0;
  320. for(y=y0;y
  321. {
  322. for(x=x0;x
  323. {
  324. c=bmp[p+2]|(bmp[p+1]<<8)|(bmp[p]<<16);
  325. if(((x0+x)
  326. {
  327. TFT_Buffer[y0+y][x0+x]=c;
  328. }
  329. p=p+3;
  330. }
  331. }
  332. }
  333. /********************************************************************
  334. *文件名:main.c
  335. *功能:測試TFT屏的驅(qū)動函數(shù)
  336. *作者:jianqi
  337. *版本:v1.0
  338. ********************************************************************/
  339. #include"2440addr.h"http://包含2440相關(guān)寄存器的設(shè)置
  340. #include"TFT.h"
  341. externunsignedcharq_480x272[];//圖片轉(zhuǎn)換后的數(shù)組
  342. /*******************************************
  343. *名稱:Delay
  344. *功能:延時
  345. *入口參數(shù):無
  346. *出口參數(shù):無
  347. **********************************************/
  348. voidDelay()
  349. {
  350. inti,j,k;
  351. for(i=0;i<20;i++)
  352. {
  353. for(j=0;j<100;j++)
  354. {
  355. for(k=0;k<1000;k++);
  356. }
  357. }
  358. }
  359. /*******************************************
  360. *名稱:Main
  361. *功能:測試TFT屏幕
  362. *入口參數(shù):無
  363. *出口參數(shù):無
  364. **********************************************/
  365. voidMain(void)
  366. {
  367. TFT_Power_Enable(1);
  368. TFT_Contraller_Init();
  369. TFT_Video_ON(1);
  370. while(1)
  371. {
  372. TFT_CLearScreen((0x00<<11)|(0x3f<<5)|(0x00));//全屏顯示紅色
  373. Delay();
  374. Draw_Line(0,0,480,272,(0x1f<<11)|(0x00<<5)|(0x00));//對角線畫直線
  375. Delay();
  376. Graw_Rectangle(20,20,400,200,(0x00<<11)|(0x00<<5)|(0x1f));//矩形框
  377. Delay();
  378. Graw_Full_Rectangle(20,20,400,200,(0x00<<11)|(0x00<<5)|(0x1f));//填充矩形框位指定顏色
  379. Delay();
  380. Paint_Picture(0,0,480,272,q_480x272);//顯示圖片
  381. Delay();
  382. }
  383. }



評論


技術(shù)專區(qū)

關(guān)閉