新闻中心

EEPW首页>嵌入式系统>设计应用> S3C2440驱动TFT屏(24bit显示模式)

S3C2440驱动TFT屏(24bit显示模式)

作者: 时间:2016-11-20 来源:网络 收藏

本文引用地址://m.amcfsurvey.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];//显示数据缓存区
  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);//缓存区起始地址30~22位
  67. rLCDSADDR2=((((U32)TFT_Buffer+(TFT_XSIZE*TFT_YSIZE)*4)>>1)&0x1fffff);//缓存区结束地址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"//包含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. }



评论


技术专区

关闭