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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > S3C2440驅(qū)動4.3寸TFT屏程序

          S3C2440驅(qū)動4.3寸TFT屏程序

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          簡單的配色原理

          本文引用地址:http://www.ex-cimer.com/article/201611/319207.htm
          1. /**************************************************************
          2. Theinitialandcontrolfor16BppTFTLCD
          3. **************************************************************/
          4. #include"def.h"
          5. #include"option.h"
          6. #include"2440addr.h"
          7. #include"2440lib.h"
          8. #include"2440slib.h"
          9. #defineMVAL_USED(0)//0=eachframe1=ratebyMVAL
          10. #defineINVVDEN(1)//0=normal1=inverted
          11. #defineBSWP(0)//Byteswapcontrol
          12. #defineHWSWP(1)//Halfwordswapcontrol
          13. #definePNRMODE(3)//設(shè)置為TFT屏
          14. #defineBPPMODE(12)//設(shè)置為16bpp模式
          15. //TFT_SIZE
          16. #defineLCD_XSIZE_TFT(480)
          17. #defineLCD_YSIZE_TFT(272)
          18. #defineSCR_XSIZE_TFT(480)
          19. #defineSCR_YSIZE_TFT(272)
          20. #defineHOZVAL_TFT(LCD_XSIZE_TFT-1)
          21. #defineLINEVAL_TFT(LCD_YSIZE_TFT-1)
          22. //Timingparameterfor4.3LCD
          23. #defineVBPD(2)//垂直同步信號的后肩
          24. #defineVFPD(4)//垂直同步信號的前肩
          25. #defineVSPW(8)//垂直同步信號的脈寬
          26. #defineHBPD(10)//水平同步信號的后肩
          27. #defineHFPD(19)//水平同步信號的前肩
          28. #defineHSPW(30)//水平同步信號的脈寬
          29. #defineCLKVAL_TFT(4)//時鐘分頻因子,VCLK=HCLK/((CLKVAL_TFT+1)*2)
          30. #defineM5D(n)((n)&0x1fffff)//用于設(shè)置顯示緩存區(qū)時,取低21位地址
          31. volatileunsignedshortLCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];//定義顯示緩存區(qū)
          32. /**************************************************************
          33. TFTLCD功能模塊初始化
          34. **************************************************************/
          35. voidLcd_Init(void)
          36. {
          37. rGPCUP=0x00000000;
          38. rGPCCON=0xaaaa02a9;
          39. rGPDUP=0x00000000;
          40. rGPDCON=0xaaaaaaaa;//InitializeVD[15:8]
          41. rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;//TFTLCDpanel,16bppTFT,ENVID=off
          42. rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
          43. rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
          44. rLCDCON4=HSPW;
          45. rLCDCON5=(1<<11)|(0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(1<<3)|(BSWP<<1)|(HWSWP);
          46. //16位輸出格式565,VCLK下降沿取數(shù)據(jù)等(看數(shù)據(jù)手冊)
          47. rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);//單掃描
          48. rLCDSADDR2=M5D(((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1);
          49. //LCD_WIDTH×16/16;由于是選擇的16位模式,
          50. //如果是24位模式,每個像素4字節(jié)則為LCD_WIDTH×32/16
          51. //(LCD_WIDTH在此為LCD_XSIZE_TFT)
          52. rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);
          53. rLCDINTMSK|=(3);//MASKLCDSubInterrupt
          54. rTCONSEL&=(~7);//DisableLPC3600
          55. rTPAL=0;//禁止臨時調(diào)色板寄存器
          56. }
          57. /**************************************************************
          58. *LCD視頻和控制信號輸出或者停止,1開啟視頻輸出
          59. **************************************************************/
          60. voidLcd_EnvidOnOff(intonoff)
          61. {
          62. if(onoff==1)
          63. rLCDCON1|=1;//ENVID=ON
          64. else
          65. rLCDCON1=rLCDCON1&0x3fffe;//ENVIDOff
          66. }
          67. /**************************************************************
          68. *TFTLCD電源控制引腳使能
          69. *pwren=1時,允許PWREN信號
          70. *pwren=0時,禁止PWREN信號
          71. *invpwre=1,PWREN信號極性反轉(zhuǎn)
          72. *invpwre=0,PWREN信號極性正常
          73. **************************************************************/
          74. voidLcd_PowerEnable(intinvpwren,intpwren)
          75. {
          76. //GPG4issettedasLCD_PWREN
          77. rGPGUP=rGPGUP&(~(1<<4))|(1<<4);//GPG4上拉電阻無效
          78. rGPGCON=rGPGCON&(~(3<<8))|(3<<8);//GPG4=LCD_PWREN
          79. rGPGDAT=rGPGDAT|(1<<4);//GPG4置1
          80. //invpwren=pwren;
          81. //EnableLCDPOWERENABLEFunction
          82. rLCDCON5=rLCDCON5&(~(1<<3))|(pwren<<3);//PWREN
          83. rLCDCON5=rLCDCON5&(~(1<<5))|(invpwren<<5);//INVPWREN
          84. }
          85. /**************************************************************
          86. TFTLCD單個象素的顯示數(shù)據(jù)輸出
          87. **************************************************************/
          88. voidPutPixel(U32x,U32y,U32c)
          89. {
          90. if((x
          91. LCD_BUFFER[(y)][(x)]=c;
          92. }
          93. /**************************************************************
          94. TFTLCD全屏填充特定顏色單元或清屏
          95. **************************************************************/
          96. voidLcd_ClearScr(U32c)
          97. {
          98. unsignedintx,y;
          99. for(y=0;y
          100. {
          101. for(x=0;x
          102. {
          103. LCD_BUFFER[y][x]=c;
          104. }
          105. }
          106. }
          107. /**************************************************************
          108. //實(shí)現(xiàn)功能:在屏幕中畫直線
          109. //參數(shù):
          110. //x1-起始點(diǎn)的x坐標(biāo)
          111. //y1-起始點(diǎn)的y坐標(biāo)
          112. //x2-結(jié)束點(diǎn)的x坐標(biāo)
          113. //y2-結(jié)束點(diǎn)的y坐標(biāo)
          114. //color-直線顏色
          115. //返回值:無
          116. **************************************************************/
          117. voidGlib_Line(intx1,inty1,intx2,inty2,intcolor)
          118. {
          119. intdx,dy,e;
          120. dx=x2-x1;
          121. dy=y2-y1;
          122. if(dx>=0)
          123. {
          124. if(dy>=0)//dy>=0
          125. {
          126. if(dx>=dy)//1/8octant
          127. {
          128. e=dy-dx/2;
          129. while(x1<=x2)
          130. {
          131. PutPixel(x1,y1,color);
          132. if(e>0){y1+=1;e-=dx;}
          133. x1+=1;
          134. e+=dy;
          135. }
          136. }
          137. else//2/8octant
          138. {
          139. e=dx-dy/2;
          140. while(y1<=y2)
          141. {
          142. PutPixel(x1,y1,color);
          143. if(e>0){x1+=1;e-=dy;}
          144. y1+=1;
          145. e+=dx;
          146. }
          147. }
          148. }
          149. else//dy<0
          150. {
          151. dy=-dy;//dy=abs(dy)
          152. if(dx>=dy)//8/8octant
          153. {
          154. e=dy-dx/2;
          155. while(x1<=x2)
          156. {
          157. PutPixel(x1,y1,color);
          158. if(e>0){y1-=1;e-=dx;}
          159. x1+=1;
          160. e+=dy;
          161. }
          162. }
          163. else//7/8octant
          164. {
          165. e=dx-dy/2;
          166. while(y1>=y2)
          167. {
          168. PutPixel(x1,y1,color);
          169. if(e>0){x1+=1;e-=dy;}
          170. y1-=1;
          171. e+=dx;
          172. }
          173. }
          174. }
          175. }
          176. else//dx<0
          177. {
          178. dx=-dx;//dx=abs(dx)
          179. if(dy>=0)//dy>=0
          180. {
          181. if(dx>=dy)//4/8octant
          182. {
          183. e=dy-dx/2;
          184. while(x1>=x2)
          185. {
          186. PutPixel(x1,y1,color);
          187. if(e>0){y1+=1;e-=dx;}
          188. x1-=1;
          189. e+=dy;
          190. }
          191. }
          192. else//3/8octant
          193. {
          194. e=dx-dy/2;
          195. while(y1<=y2)
          196. {
          197. PutPixel(x1,y1,color);
          198. if(e>0){x1-=1;e-=dy;}
          199. y1+=1;
          200. e+=dx;
          201. }
          202. }
          203. }
          204. else//dy<0
          205. {
          206. dy=-dy;//dy=abs(dy)
          207. if(dx>=dy)//5/8octant
          208. {
          209. e=dy-dx/2;
          210. while(x1>=x2)
          211. {
          212. PutPixel(x1,y1,color);
          213. if(e>0){y1-=1;e-=dx;}
          214. x1-=1;
          215. e+=dy;
          216. }
          217. }
          218. else//6/8octant
          219. {
          220. e=dx-dy/2;
          221. while(y1>=y2)
          222. {
          223. PutPixel(x1,y1,color);
          224. if(e>0){x1-=1;e-=dy;}
          225. y1-=1;
          226. e+=dx;
          227. }
          228. }
          229. }
          230. }
          231. }
          232. /**************************************************************
          233. 在LCD屏幕上畫一個矩形
          234. **************************************************************/
          235. voidGlib_Rectangle(intx1,inty1,intx2,inty2,intcolor)
          236. {
          237. Glib_Line(x1,y1,x2,y1,color);
          238. Glib_Line(x2,y1,x2,y2,color);
          239. Glib_Line(x1,y2,x2,y2,color);
          240. Glib_Line(x1,y1,x1,y2,color);
          241. }
          242. /**************************************************************
          243. 在LCD屏幕上用顏色填充一個矩形
          244. **************************************************************/
          245. voidGlib_FilledRectangle(intx1,inty1,intx2,inty2,intcolor)
          246. {
          247. inti;
          248. for(i=y1;i<=y2;i++)
          249. Glib_Line(x1,i,x2,i,color);
          250. }
          251. /**************************************************************
          252. 在LCD屏幕上指定坐標(biāo)點(diǎn)畫一個指定大小的圖片
          253. **************************************************************/
          254. voidPaint_Bmp(intx0,inty0,inth,intl,unsignedcharbmp[])
          255. {
          256. intx,y;
          257. U32c;
          258. intp=0;
          259. for(y=y0;y
          260. {
          261. for(x=x0;x
          262. {
          263. c=bmp[p+1]|(bmp[p]<<8);
          264. if(((x0+x)
          265. LCD_BUFFER[y0+y][x0+x]=c;
          266. p=p+2;
          267. }
          268. }
          269. }
          270. //=============================================================
          271. //語法格式:voidTFT_Circle(intx,inty,intr,intcolor,unsignedcharMode);
          272. //實(shí)現(xiàn)功能:在屏幕中畫圓
          273. //參數(shù):
          274. //x-圓心的x坐標(biāo)
          275. //y-圓心的y坐標(biāo)
          276. //r-圓的半徑
          277. //color-圓的顏色
          278. //Mode-0空心圓
          279. //1實(shí)心圓
          280. //返回值:無
          281. //=============================================================
          282. voidTFT_Circle(intx,inty,intr,intcolor,unsignedcharMode)
          283. {
          284. intdx,dy,ref;
          285. intTemp;
          286. if(r==0)
          287. return;
          288. dx=r;
          289. dy=1;
          290. ref=707*r/1000;//參考值為0.707r
          291. if(Mode==1)//實(shí)心圓
          292. {
          293. while(dy<=dx)
          294. {
          295. if(dx>ref)
          296. Glib_Line(x+ref+1,y+dy,x+dx,y+dy,color);
          297. if(x>=ref+1&&dx>ref)
          298. {
          299. if(x
          300. Temp=0;
          301. else
          302. Temp=x-dx;
          303. Glib_Line(Temp,y+dy,x-ref-1,y+dy,color);
          304. }
          305. if(y>=dy&&dx>ref)
          306. Glib_Line(x+ref+1,y-dy,x+dx,y-dy,color);
          307. if(x>=ref+1&&y>=dy&&dx>ref)
          308. {
          309. if(x
          310. Temp=0;
          311. else
          312. Temp=x-dx;
          313. Glib_Line(Temp,y-dy,x-ref-1,y-dy,color);
          314. }
          315. if(dy!=dx||dx==ref)
          316. {
          317. if(y
          318. Temp=0;
          319. else
          320. Temp=y-dx;
          321. Glib_Line(x+dy,Temp,x+dy,y+dx,color);
          322. }
          323. if(x>=dy&&(dy!=dx||dy==ref))
          324. {
          325. if(y
          326. Temp=0;
          327. else
          328. Temp=y-dx;
          329. Glib_Line(x-dy,Temp,x-dy,y+dx,color);
          330. }
          331. dy++;
          332. if((r*r-dy*dy)<=(dx-1)*dx)
          333. dx--;
          334. }
          335. Glib_Line(x+ref+1,y,x+r,y,color);
          336. if(x>=ref+1)
          337. {
          338. if(x
          339. Temp=0;
          340. else
          341. Temp=x-r;
          342. Glib_Line(Temp,y,x-ref-1,y,color);
          343. }
          344. if(y
          345. Temp=0;
          346. else
          347. Temp=y-r;
          348. Glib_Line(x,Temp,x,y+r,color);
          349. }
          350. else//空心圓
          351. {
          352. while(dy<=dx)
          353. {
          354. PutPixel(x+dx,y+dy,color);
          355. PutPixel(x-dx,y+dy,color);
          356. PutPixel(x+dx,y-dy,color);
          357. PutPixel(x-dx,y-dy,color);
          358. if(dx!=dy)
          359. {
          360. PutPixel(x+dy,y+dx,color);
          361. PutPixel(x+dy,y-dx,color);
          362. PutPixel(x-dy,y+dx,color);
          363. PutPixel(x-dy,y-dx,color);
          364. }
          365. dy++;
          366. if((r*r-dy*dy)<=(dx-1)*dx)
          367. dx--;
          368. }
          369. PutPixel(x+r,y,color);
          370. PutPixel(x-r,y,color);
          371. PutPixel(x,y+r,color);
          372. PutPixel(x,y-r,color);
          373. }
          374. }
          375. /**************************************************************
          376. *
          377. *LCD屏初始化
          378. *
          379. **************************************************************/
          380. voidLcd_TFT_Init(void)
          381. {
          382. Lcd_Init();
          383. Lcd_PowerEnable(0,1);
          384. Lcd_EnvidOnOff(1);//turnonvedio
          385. Lcd_ClearScr((0x00<<11)|(0x00<<5)|(0x00));//565格式純黑色
          386. }
          387. voidMain(void)
          388. {
          389. SelectFclk(2);//設(shè)置系統(tǒng)時鐘400M
          390. ChangeClockDivider(2,1);//設(shè)置分頻1:4:8
          391. CalcBusClk();//計算總線頻率
          392. Lcd_TFT_Init();
          393. Lcd_ClearScr((0x00<<11)|(0x00<<5)|(0x0e));//背景整屏藍(lán)屏
          394. Glib_Rectangle(10,10,150,150,(0x1f<<11)|(0x00<<5)|(0x00));//空心正方形邊為純紅
          395. Glib_FilledRectangle(20,20,100,100,(0x1f<<11)|(0x00<<5)|(0x1f));//品紅正方形
          396. Glib_Line(155,5,280,160,(0x00<<11)|(0x00<<5)|(0x00));//黑色直線
          397. Glib_FilledRectangle(5,180,150,240,(0x1f<<11)|(0x3f<<5)|(0x00));//黃色矩形
          398. TFT_Circle(360,180,80,(0x1f<<11)|(0x3f<<5)|(0x1f),0);//空心圓
          399. TFT_Circle(360,170,60,(0x1f<<11)|(0x00<<5)|(0x00),1);//純紅實(shí)心圓
          400. //Lcd_ClearScr((0x00<<11)|(0x00<<5)|(0x1f));//clearscreen
          401. //Delay(1000);
          402. }



          關(guān)鍵詞: S3C24404.3寸TFT屏程

          評論


          技術(shù)專區(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); })();