マイコンカーラリーではパラメータ設定と状態確認のためにキャラクタ表示LCDを使います。

公式キットでサポートされているのが上写真のようなパラレル接続のLCDで、このLCDを駆動するためにはD0~D3、RS,RW,Eの7本の信号線が必要です。
試作したマイコンカーラリー用ドライブボードVer1.0ではこのタイプで廉価版のSD1602HUOB(900円)(上の写真)を使う予定でしたがその後にI2C接続のLCD AE-AQM1602A(KIT)(550円)があることを教えて頂いたのでそちらを使うことにしました。
I2C接続ではSCL,SDAの2本の信号線だけでLCDに文字を表示することが出来るためパラレル接続のLCDではスイッチとLCD駆動信号をマルチプレクスして使うという面倒なことをやっているのが、LCDとスイッチを別々のポートに割り当てることが出来ます。
AE-AQM1602Aを表示するためのソフトはマイコンカーラリー販売のサイトからダウンロードできるi2c_lcd_38a.zipを解凍してlcd_st7032i_lib.cの一部を変更しlcd_lib.cと差し替えるだけで使えます。
変更する場所はlcd_st7032i_lib.cの35~38行目と47行目です。
/* I2C_SFR = 0 のときのポート設定 ※ポート0は設定できません */
/************** 次の4行を使うポートに合わせて変更 *********************/
#define i2c_sda p5_7 /* p3_7 */ /* 液晶のSDA端子 */
#define i2c_sdaddr pd5_7 /* pd3_7 */ /* 液晶のSDA端子の入出力設定レジスタ*/
#define i2c_scl p3_5 /* 液晶のSCL端子 */
#define i2c_sclddr pd3_5 /* 液晶のSCL端子の入出力設定レジスタ*/
/* I2C_SFR = 0 のときのSDA端子、SCL端子の設定 ※変更しないでください */
#define i2c_SDA_0(); i2c_sda = 0;i2c_sdaddr = 1; /* SDA = "0" */
#define i2c_SDA_1(); i2c_sdaddr = 0; /* SDA = "1" */
#define i2c_SCL_0(); i2c_scl = 0;i2c_sclddr = 1; /* SCL = "0" */
#define i2c_SCL_1(); i2c_sclddr = 0; /* SCL = "1" */
/* 表示文字数 */
/********* 表示文字数を 8 から 16に変更 ************/
#define LCD_MAX_X 16 /* 横文字数 8 or 16 or 20 */
#define LCD_MAX_Y 2 /* 縦文字数 1 or 2 or 4 */
下の写真は2本の信号線をジャンパ線でつないで上のプログラムで表示テストしたところです。
このLCDはバックライト無しですが、パラレル接続のバックライト付きLCDより視認性が良いように感じました。

I2C接続は少ない信号線でLCDを駆動できるというメリットの反面、表示処理にかかる時間が長くなるというデメリットがあります。
表示処理にどのくらいの時間がかかるのかを測定した結果は次の通りです。
LcdProcess() 400uS メイン制御ループから呼び出す。
LcdShowProcess() 50~150uS 1mS毎の割り込みから呼び出す。
制御ループ、割り込み関数内の処理のどちらもそれほど大きな負荷にはならない値ですが走行中はLCD表示を見る必要がないので、スタートしたらLCD表示関数を呼ばないようにするのが望ましいでしょう。