新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440驅動TFT屏(24bit顯示模式)

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

        作者: 時間:2016-11-20 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201611/318929.htm
        1. /********************************************************************
        2. *文件名:TFT.h
        3. *功能:定義TFT控制器參數,聲明驅動TFT屏的相關函數
        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屏的相關參數
        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芯片的屏幕控制器相關寄存器,定義TFT相關顯示函數
        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];//顯示數據緩存區
        49. /**********************************************
        50. *名稱:TFT_Contraller_Init
        51. *功能:初始化相關的S3C2440的TFT驅動寄存器
        52. *入口參數:無
        53. *出口參數:無
        54. **********************************************/
        55. voidTFT_Contraller_Init(void)
        56. {
        57. rGPDCON=0xaaaaaaaa;//使能VD[15:8]
        58. rGPDUP=0x00000000;//使能上拉電阻
        59. rGPCCON=0xaaaa02a9;//使能相關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);//緩存區起始地址30~22位
        67. rLCDSADDR2=((((U32)TFT_Buffer+(TFT_XSIZE*TFT_YSIZE)*4)>>1)&0x1fffff);//緩存區結束地址21~1位
        68. }
        69. /**********************************************
        70. *名稱:TFT_Video_ON
        71. *功能:是否開啟TFT屏
        72. *入口參數:1--開啟TFT;0--關閉TFT
        73. *出口參數:無
        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. *入口參數:1--使能;0--不使能
        86. *出口參數:無
        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. *入口參數:像素點X坐標x,Y坐標y,顯示顏色color
        105. *出口參數:無
        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. *入口參數:擦出顏色color
        118. *出口參數:無
        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. *入口參數:起始坐標(x1,y1),結束坐標(x2,y2),線條顏色color
        135. *出口參數:無
        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. *入口參數:起始坐標(x1,y1),結束坐標(x2,y2),矩形框顏色color
        288. *出口參數:無
        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. *入口參數:起始坐標(x1,y1),結束坐標(x2,y2),填充顏色color
        301. *出口參數:無
        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. *入口參數:起始坐標(x0,y0),顯示高度height,顯示寬度width,填充顏色color
        313. *出口參數:無
        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屏的驅動函數
        336. *作者:jianqi
        337. *版本:v1.0
        338. ********************************************************************/
        339. #include"2440addr.h"http://包含2440相關寄存器的設置
        340. #include"TFT.h"
        341. externunsignedcharq_480x272[];//圖片轉換后的數組
        342. /*******************************************
        343. *名稱:Delay
        344. *功能:延時
        345. *入口參數:無
        346. *出口參數:無
        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. *入口參數:無
        363. *出口參數:無
        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. }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 神池县| 绥阳县| 阳西县| 山阳县| 临武县| 滨海县| 会理县| 浠水县| 澄江县| 灵石县| 长寿区| 周至县| 宁河县| 东海县| 文安县| 元氏县| 南昌县| 崇明县| 来安县| 扬中市| 乳源| 疏勒县| 丁青县| 湖南省| 友谊县| 陆良县| 襄城县| 陈巴尔虎旗| 新晃| 定南县| 永登县| 赣榆县| 攀枝花市| 文水县| 临沂市| 正安县| 密云县| 天门市| 六枝特区| 伊通| 丰原市|