#![no_std]
#![no_main]
use ecos_ssc1::ecos_main;
use embedded_graphics::pixelcolor::Bgr565;
use embedded_graphics::prelude::*;
use ecos_ebui::adapter::st7735::{St7735Config, St7735Manager};
#[ecos_main(tick)]
fn main() -> ! {
loop {
if let Some(c) = ecos_ssc1::uart::Uart::read_byte_nonblock() {
if c as char == '\n' {
println!("开始初始化!");
break;
}
}
}
println!("ECOS ST7735 LCD 简单测试\n");
match init_display() {
Ok(manager) => {
println!("显示屏初始化成功!\n");
println!("开始颜色循环测试...\n");
color_loop_test(manager);
}
Err(e) => {
println!("显示屏初始化失败: {:?}", e);
println!("程序退出");
loop {}
}
}
}
fn init_display() -> Result<St7735Manager, &'static str> {
println!("初始化ST7735显示屏...");
let config = St7735Config {
dc_pin: 14, rst_pin: None, width: 128,
height: 128,
rgb: false, inverted: false,
};
println!("创建显示管理器...");
let mut manager = St7735Manager::new(config).map_err(|e| {
println!("创建显示管理器失败: {:?}", e);
"创建显示管理器失败"
})?;
println!("初始化显示驱动...");
manager.init().map_err(|e| {
println!("显示初始化失败: {:?}", e);
"显示初始化失败"
})?;
println!("显示屏初始化完成");
Ok(manager)
}
fn color_loop_test(mut manager: St7735Manager) -> ! {
let colors = [
("蓝色", Bgr565::new(0, 0, 31)), ("红色", Bgr565::new(31, 0, 0)), ("绿色", Bgr565::new(0, 63, 0)), ("白色", Bgr565::new(31, 63, 31)), ("黑色", Bgr565::new(0, 0, 0)), ("粉色", Bgr565::new(31, 0, 31)), ];
let mut cycle_count = 0;
loop {
println!("=== 第 {} 轮颜色循环 ===", cycle_count + 1);
for (name, color) in &colors {
println!("显示: {}", name);
if let Err(e) = manager.display.clear((*color).into()) {
println!("清屏失败: {:?}", e);
continue;
}
#[cfg(feature = "st7735-lcd-doublebuffering")]
{
if let Err(e) = manager.display.swap_buffers() {
println!("交换缓冲区失败: {:?}", e);
continue;
}
}
use embedded_hal::delay::DelayNs;
manager.delay.delay_ms(1000);
}
cycle_count += 1;
println!("\n");
}
}