在零件包找到 20x4 的 lcd 顯示器,想要測試還能不能用
手上還有一片 arduino uno,就用它好了
用arduino IDE嗎,感覺沒什麼意思(沒有,我沒有看不起用arduino IDE的人的意思
聽說 rust 可以寫很多開發版的程式了,來玩玩看好了
接線表:
uno 板 |
LCD |
12 |
RS |
11 |
RW |
10 |
EN |
4 |
D7 |
5 |
D6 |
6 |
D5 |
7 |
D4 |
GND |
VSS, Vo, K |
5v |
VCC, A |
資料腳反順序接,這什麼反人類接法…
正來來說Vo用來控制對比度, 實際上要接一個可變電阻
但手邊沒有,直接接地
安裝avr工具
除了rust官方的編譯器外,你還需要 avr 相關的工具
下面是從 avr-hal 的 readme 節錄:
安裝scoop(windows 的包管理器):
開啟 powershell ,輸入以下指令:
1 2 3 4
| Set-ExecutionPolicy RemoteSigned -Scope CurrentUser irm get.scoop.sh | iex scoop install avr-gcc scoop install avrdude
|
接下來要用cargo安裝整合工具:
用可以跑 cargo 的終端就行:
1 2
| cargo +stable install ravedude cargo install cargo-generate
|
寫一個簡單程式
要先產生一個專案:
1
| cargo generate --git https://github.com/Rahix/avr-hal-template.git
|
過程讓你輸入專案名稱和目標開發版
完成後用你習慣的編輯器打開資料夾就行
接下來安裝lcd的library
1 2
| cargo add hd44780-driver
|
然後就可以愉快寫程式拉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #![no_std] #![no_main]
use hd44780_driver::{HD44780, Cursor, CursorBlink}; use panic_halt as _;
#[arduino_hal::entry] fn main() -> ! { let dp = arduino_hal::Peripherals::take().unwrap(); let pins = arduino_hal::pins!(dp); let mut delay = arduino_hal::Delay::new();
let mut led = pins.d13.into_output(); let rs = pins.d12.into_output(); let rw = pins.d11.into_output(); let en = pins.d10.into_output();
let d4 = pins.d5.into_output(); let d5 = pins.d4.into_output(); let d6 = pins.d3.into_output(); let d7 = pins.d2.into_output(); let mut lcd = HD44780::new_4bit(rs, en, d4, d5, d6, d7, &mut delay).unwrap();
lcd.reset(&mut delay); lcd.clear(&mut delay);
lcd.set_cursor_visibility(Cursor::Invisible, &mut delay); lcd.set_cursor_blink(CursorBlink::Off, &mut delay);
lcd.write_str("Hello World!", &mut delay); lcd.set_cursor_pos(40, &mut delay); lcd.write_str("greeting from rust", &mut delay);
loop { led.toggle(); arduino_hal::delay_ms(1000); } }
|
執行程式也很簡單:
1 2
| RAVEDUDE_PORT=COM3 cargo run
|
embedded-hal 十分強大,基於該抽象層的功能都能輕易移植到有實作的平台
下次來玩玩看一起被翻出來的8266好了…
參考: