色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

          本文引用地址:http://cafeforensic.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];//顯示數據緩存區(qū)
          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);//緩存區(qū)起始地址30~22位
          67. rLCDSADDR2=((((U32)TFT_Buffer+(TFT_XSIZE*TFT_YSIZE)*4)>>1)&0x1fffff);//緩存區(qū)結束地址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. }



          評論


          技術專區(qū)

          關閉