谷动谷力

 找回密码
 立即注册
查看: 1106|回复: 0
打印 上一主题 下一主题
收起左侧

适合在单片机上练手的小型图形库Tiny Graphics Library

[复制链接]
跳转到指定楼层
楼主
发表于 2023-12-8 23:42:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
适合在单片机上练手的小型图形库Tiny Graphics Library

这个小型图形库提供点、线和字符绘图命令,用于 ATtiny85 上的 I2C 128x64 OLED 显示器。

它通过避免显示缓冲器来支持RAM有限的处理器,并且可以与基于SH1106驱动芯片的I2C OLED显示器配合使用。
   

我用 Banggood [3] 提供的 Geekcreit 1.3 英寸 I2C OLED 显示器测试了这个库:

由于 I2C 只需要两条 I/O 线,因此图形显示可在 ATtiny85 上留出三行空闲线路供您自己的应用程序使用:

请注意,此库仅适用于具有四个引脚的 I2C 显示器。它不适用于SPI显示器或基于SSD1306或SSD1309驱动程序芯片的显示器,因为这些都不支持读回显示器内存。
显示器分为 8 个 8 像素高带(称为页面),一个字节对应于 8 个像素的垂直列,位的排序如下图所示:


这是一个基于ST7735和ST7789驱动芯片的小型彩色TFT显示器系列的图形库。      

此库允许您使用可选比例因子绘制点、绘制线条、绘制填充矩形和打印文本。项目中包括了一个演示直方图绘图程序,该程序可以调整自身以适应支持的每个显示器。
与大多数其他TFT显示库不同,该库不需要内存缓冲区,允许它在任何处理器上运行,直到ATtiny85。
这些显示器是SPI的,需要四个引脚来驱动显示器,在ATtiny85上留出一个引脚以连接到另一个器件,例如温度传感器。如果需要更多引脚,请选择更大的芯片,例如ATtiny84;
测试源码:
  1. const
  2. int
  3. Now =
  4. 1547
  5. ;                  
  6. // To set the time; eg 15:47
  7. unsigned
  8. long
  9. StartMins = (
  10. unsigned
  11. long
  12. )((Now/
  13. 100
  14. )*
  15. 60
  16. + (Now%
  17. 100
  18. ));

  19. void loop ()
  20. {
  21. unsigned
  22. int
  23. SampleNo = StartMins/
  24. 15
  25. ;
  26. // Plot temperature graph
  27. int
  28. x1 =
  29. 16
  30. , y1 =
  31. 11
  32. ;
  33. int
  34. yscale =
  35. 2
  36. ;                        
  37. // Points per degree
  38.   MoveTo(
  39. 26
  40. ,
  41. 56
  42. ); PlotText(PSTR(
  43. "Temperature ~C"
  44. ));
  45. // Horizontal axis
  46.   MoveTo(x1, y1); DrawTo(x1+
  47. 96
  48. , y1);
  49. for
  50. (
  51. int
  52. i=
  53. 0
  54. ; i<=
  55. 24
  56. ; i=i+
  57. 4
  58. ) {
  59. int
  60. mark = x1+i*
  61. 4
  62. ;
  63.     MoveTo(mark, y1); DrawTo(mark, y1
  64. -2
  65. );
  66. int
  67. tens = i/
  68. 10
  69. ;
  70. if
  71. (tens !=
  72. 0
  73. ) {
  74.       PlotChar(tens+
  75. '0'
  76. , mark
  77. -6
  78. , y1
  79. -12
  80. );
  81.       PlotChar(i%
  82. 10
  83. +
  84. '0'
  85. , mark, y1
  86. -12
  87. );
  88.     }
  89. else
  90. PlotChar(i%
  91. 10
  92. +
  93. '0'
  94. , mark
  95. -3
  96. , y1
  97. -12
  98. );
  99.   }
  100. // Vertical axis
  101.   MoveTo(x1, y1); DrawTo(x1, y1+
  102. 50
  103. );
  104. for
  105. (
  106. int
  107. i=
  108. 5
  109. ; i<=
  110. 25
  111. ; i=i+
  112. 5
  113. ) {
  114. int
  115. mark = y1+i*yscale
  116. -10
  117. ;
  118.     MoveTo(x1, mark); DrawTo(x1
  119. -2
  120. , mark);
  121. int
  122. tens = i/
  123. 10
  124. ;
  125. if
  126. (tens !=
  127. 0
  128. ) PlotChar(tens+
  129. '0'
  130. , x1
  131. -15
  132. , mark
  133. -3
  134. );
  135.     PlotChar(i%
  136. 10
  137. +
  138. '0'
  139. , x1
  140. -9
  141. , mark
  142. -3
  143. );
  144.   }
  145. for
  146. (;;) {
  147. // Now start plotting the temperature every 15 mins
  148. while
  149. ((
  150. unsigned
  151. long
  152. ) ((StartMins + millis()/
  153. 60000
  154. )/
  155. 15
  156. )%
  157. 96
  158. == SampleNo);
  159. // Time to take a new reading
  160.     SampleNo = (SampleNo+
  161. 1
  162. )%
  163. 96
  164. ;
  165. int
  166. Temperature = (analogRead(A2)*
  167. 25
  168. )/
  169. 233
  170. ;  
  171. // In half degrees
  172.     PlotPoint(SampleNo+x1, Temperature
  173. -10
  174. +y1);
  175.   }
  176. }
复制代码


项目源码都可以在以下两个链接中找到,这里就不过多介绍了,感兴趣的可以直接看看。
Tiny Graphics Library:http://www.technoblogy.com/show?23OS

Tiny TFT Graphics Library:http://www.technoblogy.com/show?L6I
+10
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-9 03:44 , Processed in 0.082953 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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