#![no_std]
#![no_main]
use ecos_ssc1::{Timer, ecos_main, gpio, qspi};
#[ecos_main(tick)]
fn main() -> ! {
println!("ST7735 QSPI 四色显示测试开始");
println!("初始化QSPI...");
qspi::init_qspi(0);
println!("获取QSPI实例...");
let qspi_instance = match qspi::get_qspi() {
Some(qspi) => {
println!("获取QSPI实例成功");
qspi
}
None => {
println!("获取QSPI失败: 未初始化");
loop {}
}
};
println!("配置DC引脚...");
let dc_pin_num = 14;
gpio::GpioPin::config_pins(
1 << (dc_pin_num - 1),
ecos_ssc1::bindings::gpio_mode_t_GPIO_MODE_OUTPUT,
);
println!("DC引脚配置为输出模式 (pin {})", dc_pin_num);
println!("ST7735初始化中...");
fn write_cmd(qspi: &mut qspi::Qspi, dc_pin: u32, cmd: u8) -> Result<(), qspi::QspiError> {
gpio::GpioPin::set_level(dc_pin, false);
qspi.write_u8(cmd)
}
fn write_data(qspi: &mut qspi::Qspi, dc_pin: u32, data: u8) -> Result<(), qspi::QspiError> {
gpio::GpioPin::set_level(dc_pin, true);
qspi.write_u8(data)
}
println!("初始延迟...");
Timer::delay_ms(120);
println!("发送睡眠退出命令...");
let _ = write_cmd(qspi_instance, dc_pin_num, 0x11);
Timer::delay_ms(120);
println!("设置颜色模式...");
let _ = write_cmd(qspi_instance, dc_pin_num, 0x3A);
let _ = write_data(qspi_instance, dc_pin_num, 0x05);
println!("设置显示方向...");
let _ = write_cmd(qspi_instance, dc_pin_num, 0x36);
let _ = write_data(qspi_instance, dc_pin_num, 0xC8);
println!("开启显示...");
let _ = write_cmd(qspi_instance, dc_pin_num, 0x29);
Timer::delay_ms(100);
println!("ST7735初始化完成");
fn set_window(
qspi: &mut qspi::Qspi,
dc_pin: u32,
x0: u16,
y0: u16,
x1: u16,
y1: u16,
) -> Result<(), qspi::QspiError> {
let x0 = x0 + 2;
let x1 = x1 + 2;
let y0 = y0 + 3;
let y1 = y1 + 3;
write_cmd(qspi, dc_pin, 0x2A)?;
write_data(qspi, dc_pin, (x0 >> 8) as u8)?;
write_data(qspi, dc_pin, (x0 & 0xFF) as u8)?;
write_data(qspi, dc_pin, (x1 >> 8) as u8)?;
write_data(qspi, dc_pin, (x1 & 0xFF) as u8)?;
write_cmd(qspi, dc_pin, 0x2B)?;
write_data(qspi, dc_pin, (y0 >> 8) as u8)?;
write_data(qspi, dc_pin, (y0 & 0xFF) as u8)?;
write_data(qspi, dc_pin, (y1 >> 8) as u8)?;
write_data(qspi, dc_pin, (y1 & 0xFF) as u8)?;
write_cmd(qspi, dc_pin, 0x2C)?;
Ok(())
}
const COLOR_BLACK: u16 = 0x0000; const COLOR_WHITE: u16 = 0xFFFF; const COLOR_RED: u16 = 0xF800; const COLOR_GREEN: u16 = 0x07E0;
println!("开始四色循环显示测试");
let mut color_index = 0;
let black_data = vec![COLOR_BLACK as u32; 64 * 64];
let white_data = vec![COLOR_WHITE as u32; 64 * 64];
let red_data = vec![COLOR_RED as u32; 64 * 64];
let green_data = vec![COLOR_GREEN as u32; 64 * 64];
loop {
match color_index % 4 {
0 => {
println!("当前颜色:黑白红绿");
set_window(qspi_instance, dc_pin_num, 0, 0, 63, 63).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&black_data).unwrap();
set_window(qspi_instance, dc_pin_num, 64, 0, 127, 63).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&white_data).unwrap();
set_window(qspi_instance, dc_pin_num, 0, 64, 63, 127).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&red_data).unwrap();
set_window(qspi_instance, dc_pin_num, 64, 64, 127, 127).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&green_data).unwrap();
}
1 => {
println!("当前颜色:绿黑白红");
set_window(qspi_instance, dc_pin_num, 0, 0, 63, 63).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&green_data).unwrap();
set_window(qspi_instance, dc_pin_num, 64, 0, 127, 63).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&black_data).unwrap();
set_window(qspi_instance, dc_pin_num, 0, 64, 63, 127).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&white_data).unwrap();
set_window(qspi_instance, dc_pin_num, 64, 64, 127, 127).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&red_data).unwrap();
}
2 => {
println!("当前颜色:红绿黑白");
set_window(qspi_instance, dc_pin_num, 0, 0, 63, 63).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&red_data).unwrap();
set_window(qspi_instance, dc_pin_num, 64, 0, 127, 63).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&green_data).unwrap();
set_window(qspi_instance, dc_pin_num, 0, 64, 63, 127).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&black_data).unwrap();
set_window(qspi_instance, dc_pin_num, 64, 64, 127, 127).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&white_data).unwrap();
}
3 => {
println!("当前颜色:白红绿黑");
set_window(qspi_instance, dc_pin_num, 0, 0, 63, 63).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&white_data).unwrap();
set_window(qspi_instance, dc_pin_num, 64, 0, 127, 63).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&red_data).unwrap();
set_window(qspi_instance, dc_pin_num, 0, 64, 63, 127).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&green_data).unwrap();
set_window(qspi_instance, dc_pin_num, 64, 64, 127, 127).unwrap();
gpio::GpioPin::set_level(dc_pin_num, true);
qspi_instance.write_words(&black_data).unwrap();
}
_ => {}
}
color_index += 1;
Timer::delay_ms(2000);
}
}