微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440驱动4.3寸TFT屏程序

S3C2440驱动4.3寸TFT屏程序

时间:11-21 来源:互联网 点击:
简单的配色原理

  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)//设置为TFT屏
  14. #defineBPPMODE(12)//设置为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)//用于设置显示缓存区时,取低21位地址
  31. volatileunsignedshortLCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];//定义显示缓存区
  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下降沿取数据等(看数据手册)
  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字节则为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;//禁止临时调色板寄存器
  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信号极性反转
  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单个象素的显示数据输出
  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. //实现功能:在屏幕中画直线
  109. //参数:
  110. //x1-起始点的x坐标
  111. //y1-起始点的y坐标
  112. //x2-结束点的x坐标
  113. //y2-结束点的y坐标
  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,y

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top