你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在STM32F746DISC上显示分形

[复制链接]
shaoziyang 发布时间:2016-5-5 11:30
STM32F746DISC开发板上有一个很大的液晶屏,可以显示各种图像。下面展示了用开发板显示奇妙的分形图形。. d, e: C% T5 T4 b$ j" c! w8 V
/ M- R, f- v8 c3 @4 X5 X
这里不介绍分形的理论了,大家可以网上搜索看看,它的计算公式是 Z = Z*Z + C,反复迭代计算,根据发散速度标明各点的颜色。" B2 \# |8 Z. j8 E. h7 R
0 Q% s( K5 M8 O
先看看实际效果,手机拍出来有些条纹,实际是没有的,液晶屏上显示的效果其实还不错。4 J7 ^. y* R3 A/ }
剪贴板01.jpg
) o$ H# v$ D. e/ {! O! |- o4 c
4 V# q; Y8 A0 l7 h6 _1 ^6 @# R下面是的程序代码。目前只实现了基本的显示,下一步将增加放大、缩小、改变颜色等功能。
9 M+ ]& X7 G3 v0 {- ?  p  Q; G" ~* ^3 F7 n1 L0 ]/ x
  1. #include "mbed.h"% M$ \4 p- L/ A
  2. #include "LCD_DISCO_F746NG.h"; j4 b+ V: ?6 n0 \4 h; A  Y  D
  3. #include "TS_DISCO_F746NG.h"! R9 {* k0 n6 I6 G. z$ M+ K

  4. ' A( `' h" ^' ~/ r' b4 t6 R+ Y; @  r
  5. #define ITERATION  150
    3 J* I- n# h0 y- i0 t
  6. #define BAILOUT 4
    6 E& H6 d- q0 ~* h
  7. % ]* j0 l  L, D; z
  8. LCD_DISCO_F746NG lcd;
    0 [* s: i! ]  u
  9. TS_DISCO_F746NG ts;: Z' q& H1 |- m& g. K
  10.   @, Y; c, [5 B- r5 U
  11. 4 T0 |, o/ o7 g! M+ r5 N% t) y; q
  12. uint16_t screen_width, screen_height;
    4 U5 g# u: s( ^: ]; S# u

  13. ( t, R# Y- ^9 Z  U
  14. uint16_t calcMandelBrot(double x, double y)
    2 M( P! Y( q' R% i& H
  15. {
    2 V7 c3 j3 b6 `
  16.     uint16_t i;0 f7 J' L. P/ p% |+ T" {* L
  17.     double xx, yy, tx, ty;
    % N# B" ^& c# Y6 c( O
  18.     4 f2 U. i7 {4 D, B
  19.     xx = yy = 0;
    " K( k( Y) g0 f+ i% A
  20.     i = 0;! F6 F" d5 ]0 C$ f, H
  21.     while((i < ITERATION) && ((xx*xx + yy*yy) < BAILOUT))
    , o# W$ z) O4 I$ Z4 |% f
  22.     {. l9 S  h; G3 z, z+ t
  23.         tx = xx*xx - yy*yy + x;
    $ U. |  ^6 Q$ _6 b# b7 u
  24.         ty = 2*xx*yy + y;
    ! h3 M9 l' y3 K! q" w0 W( a5 y
  25.         xx = tx;& {6 ]4 H9 x" S0 M
  26.         yy = ty;. \9 h% ~5 `2 U# N% R
  27.         i++;5 `6 t7 K$ a" I* m+ k. a
  28.     }2 q& D) [; N. M3 Z: E, c+ `
  29.     return i;0 D5 a  k' ], B$ t& P; V
  30. }( p& C/ d/ U6 \! n4 K

  31. 4 z; K* V: F( i/ e
  32. void rectMandelBrot(double x1, double y1, double x2, double y2)! S; t7 \( E8 v! @- ~4 G! k
  33. {* O7 F1 q  e! E3 n% x
  34.     double dx, dy;3 k, W3 z% V, b: S; \. T
  35.     uint16_t i, j;- V0 p2 n7 P4 g
  36.     uint32_t color;
    * D8 H0 W& I4 V
  37.     % a% J( ?- P" ~4 B' ^3 x2 N; H
  38.     dx = (x2 - x1)/screen_width;4 G9 R0 R/ d3 D0 M  f- S. X) C9 K. b% I
  39.     dy = (y2 - y1)/screen_height;
    0 B9 M+ Z1 m/ T
  40.    
    8 S$ E- t7 L- I
  41.     for(i = 0; i < screen_width; i++)) b- ~2 M3 K3 p: ]7 _9 |$ g# E
  42.     {
    ( W8 G3 \5 [; Z9 J
  43.         for(j = 0; j < screen_height; j++)
    8 h6 G( c) R+ H
  44.         {
    : h4 X- R- ?6 h! A
  45.             color = calcMandelBrot(x1 + dx*i, y1 + dy*j);
    $ B3 ]% c- P, |: \& s+ g, {7 I
  46.             lcd.DrawPixel(i, j, 0xFF000000 | (color<<2) | (color <<4));
    ' E- g! a; `6 t# c/ s
  47.         }1 {) e8 N: ^4 \
  48.     }1 \) |/ c* B3 b: T
  49.    
    ' I! ~! {$ ~: J1 ~: W/ ?- w$ ?
  50. }
    . ?3 s" k5 s% k  c
  51. + q: p- w  W' D! K
  52. int main()4 G' D: X0 P, z6 x
  53. {9 S0 Y' d4 C- x) n, ~) A0 v
  54.     lcd.Clear(LCD_COLOR_BLACK);% C. T7 }+ v, R' X; Q& j6 Q- P
  55. 9 Y, R* j* `- b' \
  56.     screen_width = lcd.GetXSize() - 100;
    % N5 g; e  H  K# \  j" K
  57.     screen_height = lcd.GetYSize();7 ]( O9 |+ k1 r3 R& E/ x
  58. 0 ?1 y, o+ A6 p# n. j1 ~
  59.     rectMandelBrot(-2.5, -2, 2.5, 2);
    7 N0 _2 v' n- K
  60.    
    7 x8 g& M( d; h5 |5 h' o+ r
  61.     while(1)( x0 z* H" q: `) _! g2 E
  62.     {; d- B: z% S' A8 {
  63.     }2 S; I; Z: g# X$ e6 J& Y9 ?
  64. }
复制代码
# }, E# k: j6 s9 V; o$ v9 b9 d
fract.zip (1.33 MB, 下载次数: 42)
收藏 3 评论13 发布时间:2016-5-5 11:30

举报

13个回答
沐紫 回答时间:2016-5-5 13:40:52
谢谢楼主分享
jinglixixi 回答时间:2016-5-5 16:17:19
有意思
watershade 回答时间:2016-5-5 22:04:01
有趣呀,我这就去搜索一下。
suoma 回答时间:2016-5-5 22:46:51
谢谢分享学习一下
ychlucky 回答时间:2016-5-5 23:14:27
bu 不错  好东西
assssdz 回答时间:2016-11-5 01:47:53
andypanfan 回答时间:2016-11-8 09:25:32
anobodykey 回答时间:2016-11-8 10:13:07
感谢楼主分享
zengyi703-16313 回答时间:2016-11-17 07:14:15
谢楼主分享
wdshuang09 回答时间:2016-11-17 13:23:55
不错               
DLGG-308046 回答时间:2016-11-17 13:26:56
666666大牛都用mbed建工程了,佩服
shaoziyang 回答时间:2016-11-18 09:42:59
DLGG-308046 发表于 2016-11-17 13:26
1 a9 n! r+ o. l- U/ V% f. b666666大牛都用mbed建工程了,佩服

% H1 E2 s/ b( y6 p* _8 umbed好处是简单,缺点是占用空间较大。
zbber 回答时间:2016-11-18 10:11:53
不错,真是太棒了!; o" c- ^6 F) j  m

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版