<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/318929.htm
          1. /********************************************************************
          2. *文件名:TFT.h
          3. *功能:定義TFT控制器參數(shù),聲明驅(qū)動(dòng)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. *名稱(chēng):TFT_Contraller_Init
          51. *功能:初始化相關(guān)的S3C2440的TFT驅(qū)動(dòng)寄存器
          52. *入口參數(shù):無(wú)
          53. *出口參數(shù):無(wú)
          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. *名稱(chēng):TFT_Video_ON
          71. *功能:是否開(kāi)啟TFT屏
          72. *入口參數(shù):1--開(kāi)啟TFT;0--關(guān)閉TFT
          73. *出口參數(shù):無(wú)
          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. *名稱(chēng):TFT_Power_Enable
          84. *功能:是否使能TFT控制器電源
          85. *入口參數(shù):1--使能;0--不使能
          86. *出口參數(shù):無(wú)
          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. *名稱(chēng):Paint_Pixel
          103. *功能:點(diǎn)亮一個(gè)像素點(diǎn)
          104. *入口參數(shù):像素點(diǎn)X坐標(biāo)x,Y坐標(biāo)y,顯示顏色color
          105. *出口參數(shù):無(wú)
          106. **************************************************************/
          107. voidPaint_Pixel(U32x,U32y,U32color)
          108. {
          109. if((x
          110. {
          111. TFT_Buffer[y][x]=color;
          112. }
          113. }
          114. /*************************************************************
          115. *名稱(chēng):TFT_CLearScreen
          116. *功能:擦除屏幕為指定顏色
          117. *入口參數(shù):擦出顏色color
          118. *出口參數(shù):無(wú)
          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. *名稱(chēng):Draw_Line
          133. *功能:顯示一條直線(xiàn)
          134. *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),線(xiàn)條顏色color
          135. *出口參數(shù):無(wú)
          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. *名稱(chēng):Graw_Rectangle
          286. *功能:顯示一條矩形框
          287. *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),矩形框顏色color
          288. *出口參數(shù):無(wú)
          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. *名稱(chēng):Graw_Full_Rectangle
          299. *功能:顯示一條矩形框,并填充顏色
          300. *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),填充顏色color
          301. *出口參數(shù):無(wú)
          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. *名稱(chēng):Paint_Picture
          311. *功能:顯示一張圖片
          312. *入口參數(shù):起始坐標(biāo)(x0,y0),顯示高度height,顯示寬度width,填充顏色color
          313. *出口參數(shù):無(wú)
          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. *功能:測(cè)試TFT屏的驅(qū)動(dòng)函數(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. *名稱(chēng):Delay
          344. *功能:延時(shí)
          345. *入口參數(shù):無(wú)
          346. *出口參數(shù):無(wú)
          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. *名稱(chēng):Main
          361. *功能:測(cè)試TFT屏幕
          362. *入口參數(shù):無(wú)
          363. *出口參數(shù):無(wú)
          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));//對(duì)角線(xiàn)畫(huà)直線(xiàn)
          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. }



          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();