【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百九十九:蓝屏LCD12864液晶屏 带中文字库 带背光12864-5V 并口串口
项目之七:ESP32 LCD12864屏之随机绘制 10 条不同角度的直线
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百九十九:蓝屏LCD12864液晶屏 带中文字库 带背光12864-5V 并口串口
项目之七:ESP32 LCD12864屏之随机绘制 10 条不同角度的直线
*/
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
// 使用软件 SPI 适配 ESP32
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* Clock=*/ 18, /* Data=*/ 23, /* CS=*/ 16, /* Reset=*/ 17);
void setup() {
Serial.begin(115200);
u8g2.begin();
u8g2.setPowerSave(0); // **关闭省电模式**
u8g2.setContrast(200); // **调整对比度**
u8g2.setDisplayRotation(U8G2_R2); // **旋转 180 度**
}
void loop() {
u8g2.firstPage();
do {
for (int i = 0; i < 10; i++) {
int x1 = random(0, 128); // **随机起点 X**
int y1 = random(0, 64); // **随机起点 Y**
int angle = random(0, 360); // **随机角度(0~360°)**
// **计算终点坐标**
int length = 50; // 固定直线长度
int x2 = x1 + cos(radians(angle)) * length;
int y2 = y1 + sin(radians(angle)) * length;
// **绘制直线**
u8g2.drawLine(x1, y1, x2, y2);
}
} while (u8g2.nextPage());
delay(2000); // **每 2 秒刷新一次**
}
代码解读
这段代码在 ST7920 LCD 屏幕 上实现了 随机角度绘制 10 条直线,其核心逻辑如下:
1. 初始化
✅ u8g2.begin(); → 启动 ST7920 屏幕
✅ u8g2.setPowerSave(0); → 防止屏幕进入省电模式
✅ u8g2.setContrast(200); → 提高对比度,确保直线清晰可见
✅ u8g2.setDisplayRotation(U8G2_R2); → 让屏幕旋转 180 度
2. 生成随机直线
✅ random(0, 128) → 随机生成 X 坐标
✅ random(0, 64) → 随机生成 Y 坐标
✅ random(0, 360) → 生成随机角度(0~360°)
3. 计算终点
✅ cos(radians(angle)) * length → 计算终点 X 坐标
✅ sin(radians(angle)) * length → 计算终点 Y 坐标
✅ length = 50 → 设定直线长度
4. 画面刷新
✅ u8g2.drawLine(x1, y1, x2, y2); → 绘制随机角度的直线
✅ delay(2000); → 每 2 秒刷新一次
✅ firstPage(); do { ... } while (nextPage()); → 避免屏幕闪烁
这个代码让 ST7920 屏幕随机绘制 10 条不同角度的直线,并每两秒刷新。
实验场景图 动态图


评论