1 个不稳定版本
0.1.0 | 2019年3月29日 |
---|
#1534 在 硬件支持
每月 23 次下载
用于 nucleo-f401re
11KB
139 代码行
segment-display
这是一个简单七段显示屏的驱动库。
这个库是为了一个由 "Qifei" 标记的、序列号为 "3641BS" 的七段模块创建的。PCB上装有两个74HC595移位寄存器,然后将它们连接到4个七段显示屏。
这些PCB的优点是只需要3个引脚(时钟、数据、锁存)来控制。另一个优点是您可以使用SPI控制器进行此通信。缺点是数字都是复用的,因此您必须循环通过它们,快速地逐个更新每个数字,以欺骗眼睛。
目前这个库是为这个特定的PCB和设置定制的,但修改它以支持其他配置应该不会太难。
以下提供了一个如何使用此驱动程序的简单示例,还有两个其他示例在我的 nucleo-f401re 库中可用。基于RTFM的一个特别不错,因为它在RTFM计划的任务中执行刷新。
#![no_main]
#![no_std]
extern crate cortex_m;
extern crate cortex_m_rt;
extern crate nucleo_f401re as board;
extern crate panic_semihosting;
use cortex_m_rt::entry;
use board::hal::delay::Delay;
use board::hal::prelude::*;
use board::hal::stm32;
use board::spi::{self, Spi};
use cortex_m::peripheral::Peripherals;
use segment_display::SegmentDisplay;
#[entry]
fn main() -> ! {
let device = stm32::Peripherals::take().unwrap();
let core = Peripherals::take().unwrap();
let rcc = device.RCC.constrain();
let clocks = rcc.cfgr.sysclk(84.mhz()).freeze();
let gpiob = device.GPIOB.split();
let sck = gpiob.pb3.into_alternate_af5();
let miso = spi::NoMiso;
let mosi = gpiob.pb5.into_alternate_af5();
let latch = gpiob.pb4.into_push_pull_output();
let spi = Spi::spi1(
device.SPI1,
(sck, miso, mosi),
spi::Mode { polarity: spi::Polarity::IdleHigh, phase: spi::Phase::CaptureOnFirstTransition, },
4_000_000.hz(),
clocks,
);
let mut segment_display = SegmentDisplay::new(spi, latch);
let mut delay = Delay::new(core.SYST, clocks);
segment_display.write_str("HELO");
loop {
segment_display.refresh().unwrap();
delay.delay_us(1000_u16);
}
}
依赖关系
~71KB