谷动谷力
标题: 适合在单片机上练手的小型图形库Tiny Graphics Library [打印本页]
作者: sunsili 时间: 2023-12-8 23:42
标题: 适合在单片机上练手的小型图形库Tiny Graphics Library
适合在单片机上练手的小型图形库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;
测试源码:- const
- int
- Now =
- 1547
- ;
- // To set the time; eg 15:47
- unsigned
- long
- StartMins = (
- unsigned
- long
- )((Now/
- 100
- )*
- 60
- + (Now%
- 100
- ));
- void loop ()
- {
- unsigned
- int
- SampleNo = StartMins/
- 15
- ;
- // Plot temperature graph
- int
- x1 =
- 16
- , y1 =
- 11
- ;
- int
- yscale =
- 2
- ;
- // Points per degree
- MoveTo(
- 26
- ,
- 56
- ); PlotText(PSTR(
- "Temperature ~C"
- ));
- // Horizontal axis
- MoveTo(x1, y1); DrawTo(x1+
- 96
- , y1);
- for
- (
- int
- i=
- 0
- ; i<=
- 24
- ; i=i+
- 4
- ) {
- int
- mark = x1+i*
- 4
- ;
- MoveTo(mark, y1); DrawTo(mark, y1
- -2
- );
- int
- tens = i/
- 10
- ;
- if
- (tens !=
- 0
- ) {
- PlotChar(tens+
- '0'
- , mark
- -6
- , y1
- -12
- );
- PlotChar(i%
- 10
- +
- '0'
- , mark, y1
- -12
- );
- }
- else
- PlotChar(i%
- 10
- +
- '0'
- , mark
- -3
- , y1
- -12
- );
- }
- // Vertical axis
- MoveTo(x1, y1); DrawTo(x1, y1+
- 50
- );
- for
- (
- int
- i=
- 5
- ; i<=
- 25
- ; i=i+
- 5
- ) {
- int
- mark = y1+i*yscale
- -10
- ;
- MoveTo(x1, mark); DrawTo(x1
- -2
- , mark);
- int
- tens = i/
- 10
- ;
- if
- (tens !=
- 0
- ) PlotChar(tens+
- '0'
- , x1
- -15
- , mark
- -3
- );
- PlotChar(i%
- 10
- +
- '0'
- , x1
- -9
- , mark
- -3
- );
- }
- for
- (;;) {
- // Now start plotting the temperature every 15 mins
- while
- ((
- unsigned
- long
- ) ((StartMins + millis()/
- 60000
- )/
- 15
- )%
- 96
- == SampleNo);
- // Time to take a new reading
- SampleNo = (SampleNo+
- 1
- )%
- 96
- ;
- int
- Temperature = (analogRead(A2)*
- 25
- )/
- 233
- ;
- // In half degrees
- PlotPoint(SampleNo+x1, Temperature
- -10
- +y1);
- }
- }
复制代码
项目源码都可以在以下两个链接中找到,这里就不过多介绍了,感兴趣的可以直接看看。
Tiny Graphics Library:http://www.technoblogy.com/show?23OS
Tiny TFT Graphics Library:http://www.technoblogy.com/show?L6I
欢迎光临 谷动谷力 (http://bbs.sunsili.com/) |
Powered by Discuz! X3.2 |