stm32f4在液晶上画圆及填充圆的几种方法

发布者:TechVoyager最新更新时间:2017-02-05 来源: eefocus关键字:stm32f4  液晶  画圆  填充圆 手机看文章 扫描二维码
随时随地手机看文章

先说下画圆,根据圆的对称性将圆8等分,求出其中一份,其他可以通过坐标变换得到。得到过程可以百度中点画圆法。

程序:

void LCD_Draw_Circle(uint16_t Xpos,uint16_t Ypos,uint16_t Radius)
{
int16_t mx=Xpos,my=Ypos,x=0,y=Radius;
int16_t d=1-Radius;
while(y>x)
{
putpixel(x+mx,y+my);
 putpixel(-x+mx,y+my);
putpixel(-x+mx,-y+my);
putpixel(x+mx,-y+my);
putpixel(y+mx,x+my);
putpixel(-y+mx,x+my);
putpixel(y+mx,-x+my);
putpixel(-y+mx,-x+my);
if(d<0)
{
d += 2*x+3;
}
else
{
d += 2*(x-y)+5;
y--;
}
x++;
}
}

下面说填充圆。

1、构建一个圆外切的正方形。对正方形中所有像素点进行扫描,符合x*x+y*y<=r*r的像素点进行描点。程序:

void LCD_DrawFullCircle1(uint16_t Xpos,uint16_t Ypos,uint16_t Radius)
{
uint16_t x,y,r=Radius;
for(y=Ypos - r;y{
for(x=Xpos - r;x{
if(((x-Xpos)*(x-Xpos)+(y-Ypos)*(y-Ypos)) <= r*r)
{
putpixel(x,y);
}
}
}
}

2、通过f4自带的DMA2D画竖线的效果,从圆心开始画长为2R的竖线,往一边递减每当x-1时或者y+1时,竖线长度减2,因为在R的范围内得变化2R,所以公差为2。

另一半通过坐标变换就可以得到。程序:

void LCD_DrawFullCircle2(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
{
  int32_t  D;    /* Decision Variable */ 
  uint32_t  CurX;/* Current X Value */
  uint32_t  CurY;/* Current Y Value */ 
  
  D = 3 - (Radius << 1);
//D = 1 - Radius;
  
  CurX = 0;
  CurY = Radius;
  
  while (CurX <= CurY)
  {
    if(CurY > 0) 
    {
      LCD_DrawLine(Xpos - CurX, Ypos - CurY, 2*CurY, LCD_DIR_VERTICAL);
      LCD_DrawLine(Xpos + CurX, Ypos - CurY, 2*CurY, LCD_DIR_VERTICAL);
    }
    
    if(CurX > 0) 
    {
      LCD_DrawLine(Xpos - CurY, Ypos - CurX, 2*CurX, LCD_DIR_VERTICAL);
      LCD_DrawLine(Xpos + CurY, Ypos - CurX, 2*CurX, LCD_DIR_VERTICAL);
    }
    if (D < 0)
    { 
      D += (CurX << 2) + 6;
//D += (CurX << 1) + 3;
    }
    else
    {
      D += ((CurX - CurY) << 2) + 10;
//D += ((CurX - CurY) << 1) + 5;
      CurY--;
    }
    CurX++;
  } 
  LCD_Draw_Circle(Xpos, Ypos, Radius);  
}

这里好像使用的是改进型的Bresenham画圆法,说是更精确,没有漏点,但是速度变慢。

3,、关于圆心对称坐标连线填充法。虽然跟第二种方法略像。但由于使用方法不同,所以成为第三种。说这种方法最好,可能是我连线的点出问题了。还希望知道的人告知。

程序:

void LCD_DrawFullCircle3(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
{
uint32_t x,y;
uint32_t s0,s1,s2;
x=Xpos +Radius;
y=Ypos;
putpixel(x,y);
putpixel(2*Xpos-x,y);
putpixel(2*Xpos-x,2*Ypos-y);
putpixel(x,2*Ypos-y);

LCD_DrawUniLine1(2*Xpos-x,2*Ypos-y,x,y);
LCD_DrawUniLine1(2*Xpos-x,y,x,2*Ypos-y);
do
{
s0=ABS((x-Xpos-1)*(x-Xpos-1)+(y-Ypos)*(y-Ypos)-Radius*Radius);     //(x-1,y)
s1=ABS((x-Xpos)*(x-Xpos)+(y-Ypos-1)*(y-Ypos-1)-Radius*Radius);//(x,y-1)
s2=ABS((x-Xpos-1)*(x-Xpos-1)+(y-Ypos-1)*(y-Ypos-1)-Radius*Radius);//(x-1,y-1)

s0<=s1?(s0<=s2?x=x-1:(x=x-1,y=y-1)):(s1<=s2?y=y-1:(x=x-1,y=y-1));
putpixel(x,y);
putpixel(2*Xpos-x,y);
putpixel(2*Xpos-x,2*Ypos-y);
putpixel(x,2*Ypos-y);


LCD_DrawUniLine1(2*Xpos-x,2*Ypos-y,x,y);
LCD_DrawUniLine1(2*Xpos-x,y,x,2*Ypos-y);

}while(x>=Xpos);

}

通过判断点到圆心的距离判断(x-1,y),(x,y-1),(x-1,y-1)三个点中哪个点符合要求。再通过坐标变换和连线填充圆。这种方法也可以画圆。


以上皆是个人观点,接触不深,认识片面。各位同仁见谅,有指导最好。

前面两种填充效果良好,只有第三种是下面这样,图略大,各位看官还多包涵。倒是也挺好看。


关键字:stm32f4  液晶  画圆  填充圆 引用地址:stm32f4在液晶上画圆及填充圆的几种方法

上一篇:STM32F4_TIM输入波形捕获(脉冲频率、占空比)
下一篇:stm32f429固件库之SPI读写FLASH

推荐阅读最新更新时间:2024-03-16 15:32

1602液晶万年历源程序-带温度、背光、灰度 数字
//1602液晶屏 万年历时钟源程序---加温度、背光、灰度 数字? /******************************************************************************************** 程序名:    1602液晶屏时钟程序      编写时间:  2012年6月8日 硬件支持:  LCD1602液晶屏 STC12C2052 外部12MHZ晶振 说明备注: 使用2402液晶屏程序,与1602液晶屏程序完全兼容 2011-11-18 23:36 实现NPN13001三极管控制背光,P3^7接10K限流电阻。 2011-11-19 10:10 添加调
[单片机]
16x2字符型带背光液晶显示模块
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。 这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。 标准型16X2带背光液晶显示字符模块,邮购价格26元一个 外形尺寸:PCB外形:36.4*80毫米 液晶屏金属黑框:34.2*72毫米 1602采用标准的16脚接口,其中: 第1脚:VSS为地电源 第2脚:VDD接5V正电源 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱
[单片机]
16x2字符型带背光<font color='red'>液晶</font>显示模块
液晶时代住友化学改造产线因应OLED需求
日液晶面板材料供应厂住友化学(Sumitomo Chemical)宣布,将对液晶面板的彩色滤光片产线进行改造,扩大OLED触控面板用料产能至目前3倍,以因应陆韩面板厂商年增3成的OLED需求。   住友化学社长十仓雅和在日前记者会上提及,预估2020年OLED相关材料将占该社面板材料总营业额的45%。而研调机构IHS Technology预测,OLED面板市场规模将在2021年突破300亿美元。两个数字都意味着后液晶时代、OLED时代的来临。   住友化学拟使用原本设置在韩国工厂的无尘室,可省去重新建造产线的时间,不仅将一般2年左右的工期缩短至10个月,投资额也将压低在150亿日圆(约1.3亿美元)。如此一来可望赶在2018年1
[家用电子]
STM32F407驱动MT9T001 CMOS图像传感器模块
一、MT9T001图像传感器介绍 MT9T001是MICRON公司生产的一款CMOS图像传感器,分辨率可以达到QXGA,有效像素阵列为2048H*1536V。可实现片上开窗,行列跳跃像素,以及快照功能,内部寄存器编程采用I2C总线。 MT9T001可以工作在其默认模式或者通过编程可以选择帧的大小,曝光时间,色彩增益,以及其他相关参数。默认的工作模式是以12fps的帧率输出一个QXGA的图像,片载的AD转换器可以提供每个像素10bit的分辨率。可提供行场同步信号,以及用于同步有效数据的像素时钟。 MT9T001的像素阵列为2112行*1568列,但是并不是所有的像素是有效像素。如图3所示,从第0列到27列以及从2085列到
[单片机]
<font color='red'>STM32F4</font>07驱动MT9T001 CMOS图像传感器模块
stm32f4中用SD卡存储DCMI的图像
因为自己本科做的创新性实验和飞思卡尔小车都是摄像头的,研究生也做的视频处理方向。后来,想做一个小视频监制,闲麻烦,没有用那TI的DM6446,就用的手头stm32f4开发板,由于没有LCD显示屏,我只能直接把DCMI图像保存在内部RAM中,再保存到SD里,在上位机读取SD卡转换成图片,我就用VC+OPENCV。 现在说说做的流程吧。摄像头是买的OV9665 。直接接的是DCMI接口。而SD卡不能接SDIO了,因为我这开发板是100引脚封装的,SDIO和DCMI复用引脚冲突。之后SD卡选用的是SPI接口。 1.关于SPI接口的SD卡读写操作,我在前几篇博客中写过,也附带了写好的FATFS文件系统程序,大家可以参考,我这里就不
[单片机]
2009年4月液晶显示器代工与品牌出货量趋缓
根据集邦科技(DRAMeXchange)旗下液晶产业研究机构WitsView的全球液晶显示器SI出货量调查显示,由于库存回补热度逐渐进入尾声,终端实际销售力道趋缓,全球分销与品牌商出货量成长幅度正逐渐趋缓。 WitsView指出,今年4月以来,液晶显示器面板的补货热度逐渐冷却,加上显示器面板价格逐步上扬,可看出2009年第一季下游超额下单的情况,并反映实际的市场需求。然而,面对终端实际销售力道趋缓,以及全球景气尚未全面复苏,整体供应链厂商仍担心去年下半年库存过高事件再次重演,故面对第二季仍持较为保守的态度来因应。 因此,4月份成长力道未如先前强劲,多数系统厂商出货量均较3月份小幅度下滑。从WitsView的全
[半导体设计/制造]
12864无字库液晶显示
这篇文章主要来写一下12864液晶显示的程序,至于一些寄存器的设置,和12864液晶的资料介绍,大家可以参看12864液晶的datesheet,上面一般都很全面,一些具体注意事项请大家参看:http://hi.baidu.com/echoas 他的空间里面介绍的比较清楚,我在这里也没必要浪费时间重复了。 我在这里直接贴出程序,程序注释比较清楚,相信大家对照dateshee可以看明白。 /************************************ 程序功能:无字库12864液晶的显示 编译环境:keil4 运行环境:proteus7.7 整理人:张家越 QQ:435835181 整理时间:2011-04-28
[单片机]
12864无字库<font color='red'>液晶</font>显示
明基否认将出售液晶显示器产品线 称非卖品
  新浪科技讯 4月13日早间,明基对外发表声明说,公司并没有出售液晶显示器生产线的计划。明基人士表示,这一业务为“非卖品”。以下为声明全文:   针对2006年4月11日部分媒体有关明基电通可能出售液晶显示器生产线的报道,明基电通特此发表声明如下:   第一、明基专注于策略经营事业,以求最佳化的经济规模,透过合并友达与广辉两大面板厂,间接对于视讯产品事业部上下游整合产生极大助益,也将使明基在显示器产业中的领导地位更加稳固。明基并无移转显示器产品线的计划,有关报道纯属误传。   第二、不论过去、现在或未来,明基电通秉持一贯精神,以制造最高品质的视讯产品,满足客户与消费者的需求。明基视讯产品2006年首季度业
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved