找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3497|回复: 3
打印 上一主题 下一主题
收起左侧

单片机驱动ILI9320画线,画点,画圆,画矩形,打印字母,打印汉字,输出图像

[复制链接]
跳转到指定楼层
楼主
ID:112317 发表于 2016-4-6 19:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

2.0寸彩屏驱动240*320分辨率,ILI9320控制器,含有基本驱动函数和基本图形显示函数例如:画线,画点,画圆,画矩形,打印字母,打印汉字,输出图像等

完整代码下载: 52465290V1.0_TFT_ILI9320.rar (88.1 KB, 下载次数: 60)

主要代码预览:
  1. /**********************************************************
  2. 文件名称:ILI9320_figure.c
  3. 功能说明:图形函数库,画点、画线、画圆、填充、画矩形
  4. 编写:阿呆游乐园
  5.   ADaiPlay.21ic.org
  6.   QQ:1325180192
  7. 时间:2011/8/10
  8. 其他说明:版权所有,盗版请注明出处
  9. **********************************************************/

  10. #include <reg51.h>
  11. #include "MyType.h"
  12. #include "ILI9320_base.h"
  13. #include "ILI9320_figure.h"








  14. /**********************************************************
  15. 函数名称:LCD_print_full()
  16. 入口参数:color为常用的需要显示的颜色(已经提前定义),color为
  17.                   NULL时,则可将不常用颜色放入dat中加以显示
  18. 出口参数:无
  19. 时间:2011/8/10
  20. 功能说明:全屏显示单色画面
  21. 其他说明:无
  22. **********************************************************/
  23. void LCD_print_full(uint16 color)
  24. {
  25.           unsigned int i,j;
  26.        
  27.         ILI9320_SetPos(0,0,SCREEN_X_MAX,SCREEN_Y_MAX);

  28.         for(i=0;i<SCREEN_Y_MAX;i++)
  29.         {
  30.              for(j=0;j<SCREEN_X_MAX;j++)
  31.         {
  32.                         LCD_WRITE_DATA(color);
  33.         }
  34.         }
  35. }



  36. /**********************************************************
  37. 函数名称:LCD_print_part()
  38. 入口参数:起始、终止横坐标(0-239),纵坐标(0-319),显示颜色uint16
  39. 出口参数:无
  40. 时间:2011/8/10
  41. 功能说明:填充矩形区域
  42. 其他说明:0<=xs<xe<=SCREEN_X_MAX-1
  43.                   0<=ys<ye<=SCREEN_Y_MAX-1
  44. **********************************************************/
  45. void LCD_print_part(uint16 xs,uint16 ys,uint16 xe,uint16 ye,uint16 color_dat)
  46. {
  47.         uint16 i,j;

  48.         ILI9320_SetPos(xs,ys,xe,ye);       
  49.         for(j=0;j<(ye-ys+1);j++)
  50.     {
  51.             for(i=0;i<(xe-xs+1);i++)
  52.                 {
  53.                         LCD_WRITE_DATA(color_dat);
  54.                 }
  55.         }   
  56. }

  57. /**********************************************************
  58. 函数名称:LCD_print_rectangle()
  59. 入口参数:起始、终止横坐标(0-239),纵坐标(0-319),显示颜色uint16
  60. 出口参数:无
  61. 时间:2011/8/10
  62. 功能说明:画矩形边框
  63. 其他说明:0<=xs<xe<=SCREEN_X_MAX-1
  64.                   0<=ys<ye<=SCREEN_Y_MAX-1
  65. **********************************************************/
  66. void LCD_print_rectangle(uint16 xs,uint16 ys,uint16 xe,uint16 ye,uint16 color_dat)
  67. {
  68.         LCD_print_line(xs,ys,xs,ye,color_dat);          //画矩形左边
  69.         LCD_print_line(xe,ys,xe,ye,color_dat);          //画矩形右边
  70.         LCD_print_line(xs,ys,xe,ys,color_dat);          //画矩形上边
  71.         LCD_print_line(xs,ye,xe,ye,color_dat);          //画矩形下边
  72. }


  73. /**********************************************************
  74. 函数名称:LCD_print_circle()
  75. 入口参数:圆心横坐标(0-239),纵坐标(0-319),半径(0-120),显示颜色uint16
  76. 出口参数:无
  77. 时间:2011/8/10
  78. 功能说明:画圆形边框(仅支持屏幕内画圆)
  79. 其他说明:0<=x<=SCREEN_X_MAX-1
  80.                   0<=y<=SCREEN_Y_MAX-1
  81. **********************************************************/
  82. void LCD_print_circle(uint16 x,uint16 y,uint16 r,uint16 color_dat)
  83. {
  84.         uint16 dx, dy = r;

  85.         if((x>=r) &&((SCREEN_X_MAX-x)>=r) && (y>=r) && ((SCREEN_Y_MAX-y)>=r))                //确定所画圆在屏幕范围内,没有超出最外边,(暂不支持与屏幕边相交)
  86.         {
  87.                 for(dx = 0; dx <= r; dx++)
  88.                 {
  89.                         while((r * r + 1 - dx * dx) < (dy * dy)) dy--;
  90.                         LCD_print_dot(x + dx, y - dy, color_dat);
  91.                         LCD_print_dot(x - dx, y - dy, color_dat);
  92.                         LCD_print_dot(x - dx, y + dy, color_dat);
  93.                         LCD_print_dot(x + dx, y + dy, color_dat);

  94.                         LCD_print_dot(x + dy, y - dx, color_dat);
  95.                         LCD_print_dot(x - dy, y - dx, color_dat);
  96.                         LCD_print_dot(x - dy, y + dx, color_dat);
  97.                         LCD_print_dot(x + dy, y + dx, color_dat);
  98.                 }
  99.         }
  100. }


  101. /**********************************************************
  102. 函数名称:LCD_print_line()
  103. 入口参数:起始、终止横坐标(0-239),纵坐标(0-319),显示颜色uint16
  104. 出口参数:无
  105. 时间:2011/8/10
  106. 功能说明:画直线
  107. 其他说明:0<=xs<xe<=SCREEN_X_MAX-1
  108.                   0<=ys<ye<=SCREEN_Y_MAX-1
  109. **********************************************************/
  110. void LCD_print_line(uint16 xs,uint16 ys,uint16 xe,uint16 ye,uint16 color_dat)
  111. {
  112.         uint16 i,ds;
  113.         int dx,dy,inc_x, inc_y;
  114.         int xerr = 0, yerr = 0;                                //初始化变量

  115.         if(xs==xe)                                                          //如果是画垂直线则只需对竖直坐标计数
  116.         {
  117.             ILI9320_SetPos(xs,ys,xe,ye);
  118.                 for(i=0;i<(ye-ys+1);i++)
  119.                 {
  120.                         LCD_WRITE_DATA(color_dat);
  121.                 }
  122.         }
  123.         else if(ys==ye)                                                //如果是水平线则只需要对水平坐标计数
  124.     {
  125.                 ILI9320_SetPos(xs,ys,xe,ye);
  126.                   for(i=0;i<(xe-xs+1);i++)
  127.                 {
  128.                         LCD_WRITE_DATA(color_dat);
  129.                 }
  130.         }
  131.         else                                                                                        //如果是斜线,则重新计算,使用画点函数画出直线
  132.         {
  133.             dx = xe - xs;                                                                //计算坐标增量
  134.             dy = ye - ys;

  135.                 if(dx > 0) inc_x = 1;                                                //设置单步方向
  136.                 else
  137.                 {
  138.                         inc_x = -1; dx = -dx;
  139.                 }
  140.                 if(dy > 0) inc_y = 1;                                                //设置单步方向
  141.                 else
  142.             {
  143.                         inc_y = -1; dy = -dy;
  144.                 }

  145.                 if(dx > dy) ds = dx;                                                //选取基本增量坐标轴
  146.                 else                ds = dy;

  147.                 for(i = 0; i <= ds+1; i++)                                        //画线输出
  148.                 {
  149.                         LCD_print_dot(xs, ys,color_dat);        //画点
  150.                         xerr += dx;
  151.                         yerr += dy;
  152.                         if(xerr > ds)
  153.                         {
  154.                                 xerr -= ds;
  155.                                 xs   += inc_x;
  156.                         }
  157.                         if(yerr > ds)
  158.                         {
  159.                                 yerr -= ds;
  160.                                 ys   += inc_y;
  161.                         }
  162.                 }
  163.         }  
  164. }

  165. /**********************************************************
  166. 函数名称:LCD_print_dot()
  167. 入口参数:起始横坐标(0-239),纵坐标(0-319),显示颜色uint16
  168. 出口参数:无
  169. 时间:2011/8/8
  170. 功能说明:画点
  171. 其他说明:0<=x<=SCREEN_X_MAX-1
  172.                   0<=y<=SCREEN_Y_MAX-1
  173. **********************************************************/
  174. void LCD_print_dot(uint16 x,uint16 y,uint16 color_dat)
  175. {
  176.         ILI9320_SetPos(x,y,x,y);
  177.         LCD_WRITE_DATA(color_dat);
  178. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:112642 发表于 2016-4-7 08:54 来自手机 | 只看该作者
想下载看看咋样
回复

使用道具 举报

板凳
ID:183105 发表于 2017-3-24 16:18 | 只看该作者
感谢楼主
回复

使用道具 举报

地板
ID:242746 发表于 2019-1-31 22:02 | 只看该作者
能用串口输出动态图吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表