在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

            本文引用地址:http://www.biyoush.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. //實現(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. //實現(xiàn)功能:在屏幕中畫圓
            273. //參數(shù):
            274. //x-圓心的x坐標(biāo)
            275. //y-圓心的y坐標(biāo)
            276. //r-圓的半徑
            277. //color-圓的顏色
            278. //Mode-0空心圓
            279. //1實心圓
            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)//實心圓
            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);//純紅實心圓
            400. //Lcd_ClearScr((0x00<<11)|(0x00<<5)|(0x1f));//clearscreen
            401. //Delay(1000);
            402. }



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

            評論


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

            關(guān)閉