Comments
Description
Transcript
ドットマトリクス LED 基板 C 言語電光掲示板プログラム 解説マニュアル
ドットマトリクス LED 基板 C 言語電光掲示板プログラム 解説マニュアル 第 1.02A 版 2015 年 4 月 20 日 株式会社日立ドキュメントソリューションズ 注 意 事 項 (rev.6.0H) 著作権 ・本マニュアルに関する著作権は株式会社日立ドキュメントソリューションズに帰属しま す。 ・本マニュアルは著作権法および、国際著作権条約により保護されています。 禁止事項 ユーザーは以下の内容を行うことはできません。 ・第三者に対して、本マニュアルを販売、販売を目的とした宣伝、使用、営業、複製などを 行うこと ・第三者に対して、本マニュアルの使用権を譲渡または再承諾すること ・本マニュアルの一部または全部を改変、除去すること ・本マニュアルを無許可で翻訳すること ・本マニュアルの内容を使用しての、人命や人体に危害を及ぼす恐れのある用途での使用 転載、複製 本マニュアルの転載、複製については、文書による株式会社日立ドキュメントソリューショ ンズの事前の承諾が必要です。 責任の制限 本マニュアルに記載した情報は、正確を期すため、慎重に制作したものですが万一本マニュ アルの記述誤りに起因する損害が生じた場合でも、株式会社日立ドキュメントソリューショ ンズはその責任を負いません。 その他 ・本マニュアルに記載の情報は本マニュアル発行時点のものであり、株式会社日立ドキュメ ントソリューションズは、予告なしに、本マニュアルに記載した情報または仕様を変更す ることがあります。製作に当たりましては、最新の内容を確認いただきますようお願いし ます。 ・すべての商標および登録商標は、それぞれの所有者に帰属します。 連絡先 株式会社 日立ドキュメントソリューションズ 〒135-0016 東京都江東区東陽六丁目 3 番 2 号 イースト 21 タワー E-mail:[email protected] ドットマトリクス LED 基板 目次 C 言語電光掲示板プログラム解説マニュアル 目次 1. 概要 ............................................................. 1 2. ワークスペースのインストール ..................................... 2 3. プログラム解説「mini_mcr.c」 ..................................... 3 3.1 プログラムリスト ........................................................... 3 3.2 メインプログラムを説明する前に ............................................ 15 3.3 R8C/35A の内蔵周辺機能の初期化:init 関数 ................................. 16 3.4 割り込みプログラム:intTRBIC 関数 ......................................... 16 3.5 ドットマトリクス LED 表示:dotmatrix 関数................................... 17 3.6 メインプログラム:main 関数 ............................................... 23 4. 仕様 ............................................................ 24 4.1 仕様 ...................................................................... 24 4.2 回路図 .................................................................... 25 4.3 ポート表 .................................................................. 27 4.4 ピン配置図 ................................................................ 27 A - 1 ドットマトリクス LED 基板 目次 C 言語電光掲示板プログラム解説マニュアル A - 2 ドットマトリクス LED 基板 1. 概要 C 言語電光掲示板プログラム解説マニュアル 1. 概要 本書では、ドットマトリクス LED 基板を使用した、C 言語電光掲示板プログラムの解説を行いま す。 開発環境の構築方法やプログラムのビルド、書き込みについては、 「ミニマイコンカーVer.2 C 言語走行プログラム解説マニュアル」の「3. インストール」 「4. ミニマイコンカーVer.2 の動 作確認」を参照してください。 1 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 2. ワークスペースのインストール 2. ワークスペースのインストール 株式会社日立ドキュメントソリューションズのマイコンカーラリー販売ページからワークスペ ースのインストーラー「mini_mcr2_dotmatrix_vxxx.exe」(xxx はバージョン)をダウンロード します。 ダウンロードした「mini_mcr2_dotmatrix_vxxx.exe」をダブルクリックし、インストーラーを実 行します。 表示されたデフォルトのインストール先のフォルダ「c:\WorkSpace」を確認して、 「Extract」を クリックします。 《補足》 別のフォルダを選択する場合は、「Browse」をクリックしてください。 インストールが開始されます。 ワークスペースのインストールが完了しました。 「OK」をクリックします。 以上でワークスペースのインストールは完了です。 2 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 3. プログラム解説「mini_mcr.c」 WorkSpace のファイルをそのままコンパイルすると、 「ミニマイコンカー製作キット Ver.2」と表 示されるだけです。プログラムを変更して、別の文字を表示したり、スクロールの方向を変えた り、工夫してみましょう。 3.1 プログラムリスト 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 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : //-----------------------------------------------------------------------------// 対象マイコン R8C/35A // ファイル内容 電光掲示板プログラム // バージョン Ver.1.00 // Date 2009.10.02 // Copyright ルネサスマイコンカーラリー事務局 // 日立インターメディックス株式会社 //-----------------------------------------------------------------------------//-----------------------------------------------------------------------------// インクルード //-----------------------------------------------------------------------------#include "sfr_r835a.h" //-----------------------------------------------------------------------------// シンボル定義 //-----------------------------------------------------------------------------#define TIMER_CYCLE 155 // 1ms:0.001/(1/(20000000/128))-1 #define PWM_CYCLE 39999 // 16ms:0.016/(1/(20000000/8))-1 #define Def_500Hz #define Def_1000Hz 4999 2499 // 500Hz:(1/500)/(1/(20000000/8))-1 // 1000Hz:(1/1000)/(1/(20000000/8))-1 #define #define #define #define #define #define #define #define 19083 17006 15151 14285 12754 11362 10120 9541 // // // // // // // // asm("FCLR I") asm("FSET I") // 割り込み禁止 // 割り込み許可 Def_C3 Def_D3 Def_E3 Def_F3 Def_G3 Def_A3 Def_B3 Def_C4 #define DI() #define EI() ド:(1/131)/(1/(20000000/8))-1 レ:(1/147)/(1/(20000000/8))-1 ミ:(1/165)/(1/(20000000/8))-1 ファ:(1/175)/(1/(20000000/8))-1 ソ:(1/196)/(1/(20000000/8))-1 ラ:(1/220)/(1/(20000000/8))-1 シ:(1/247)/(1/(20000000/8))-1 ド:(1/262)/(1/(20000000/8))-1 //-----------------------------------------------------------------------------// 関数プロトタイプの宣言 //-----------------------------------------------------------------------------void init( void ); unsigned char sensor( void ); void motor( int data1, int data2 ); void timer( unsigned long timer_set ); void beep( int data1 ); unsigned char dipsw( void ); unsigned char pushsw( void ); void dotmatrix( unsigned short *data1 ); //------------------------------------------------------------------------------ 3 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : // グローバル変数の宣言 //-----------------------------------------------------------------------------unsigned long cnt0 = 0; // timer 関数用 unsigned long cnt1 = 0; // main 内で使用 int pattern = 0; // パターン番号 int scroll; //22 文字 const unsigned short str0[16*22] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0844, 0x0844, 0x1088, 0x1088, 0x1088, 0x2110, 0x2000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○●○○○○●○○○●○○ //○○○○●○○○○●○○○●○○ //○○○●○○○○●○○○●○○○ //○○○●○○○○●○○○●○○○ //○○○●○○○○●○○○●○○○ //○○●○○○○●○○○●○○○○ //○○●○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x1000, //○○○●○○○○○○○○○○○○ 4 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0008, 0x0108, 0x0108, 0x0208, 0x0408, 0x0A08, 0x3108, 0x00C8, 0x0038, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○○○●○○○ //○○○○○○○●○○○○●○○○ //○○○○○○○●○○○○●○○○ //○○○○○○●○○○○○●○○○ //○○○○○●○○○○○○●○○○ //○○○○●○●○○○○○●○○○ //○○●●○○○●○○○○●○○○ //○○○○○○○○●●○○●○○○ //○○○○○○○○○○●●●○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0100, 0x0100, 0x0080, 0x0080, 0x0040, 0x3FE0, 0x0010, 0x0008, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○●○○○○○○○○ //○○○○○○○●○○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○○●○○○○○○ //○○●●●●●●●●●○○○○○ //○○○○○○○○○○○●○○○○ //○○○○○○○○○○○○●○○○ //○○○○○○○○○○○○○●○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x3FF8, 0x0000, 0x0000, 0x0000, 0x0000, //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○●●●●●●●●●●●○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 5 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 0x0000, //○○○○○○○○○○○○○○○○ 0x0000, //○○○○○○○○○○○○○○○○ 0x0000, //○○○○○○○○○○○○○○○○ 0x2008, 0x2008, 0x2010, 0x1020, 0x1000, 0x0800, 0x0400, 0x0300, 0x00E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○●○○○○○○○○○●○○○ //○○●○○○○○○○○○●○○○ //○○●○○○○○○○○●○○○○ //○○○●○○○○○○●○○○○○ //○○○●○○○○○○○○○○○○ //○○○○●○○○○○○○○○○○ //○○○○○●○○○○○○○○○○ //○○○○○○●●○○○○○○○○ //○○○○○○○○●●●○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x2010, 0x1810, 0x0610, 0x01FE, 0x0010, 0x2010, 0x2010, 0x2010, 0x1FF0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○●○○○○○○○○●○○○○ //○○○●●○○○○○○●○○○○ //○○○○○●●○○○○●○○○○ //○○○○○○○●●●●●●●●○ //○○○○○○○○○○○●○○○○ //○○●○○○○○○○○●○○○○ //○○●○○○○○○○○●○○○○ //○○●○○○○○○○○●○○○○ //○○○●●●●●●●●●○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0000, 0x0000, 0x0040, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○●○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0000, 0x1208, 0x12F6, 0x2A14, 0x3AFE, 0x2614, 0x1294, 0x13F4, //○○○○○○○○○○○○○○○○ //○○○●○○●○○○○○●○○○ //○○○●○○●○●●●●○●●○ //○○●○●○●○○○○●○●○○ //○○●●●○●○●●●●●●●○ //○○●○○●●○○○○●○●○○ //○○○●○○●○●○○●○●○○ //○○○●○○●●●●●●○●○○ 6 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 0x0600, 0x0A7C, 0x1A00, 0x1680, 0x22FE, 0x2200, 0x0000, 0x0000, //○○○○○●●○○○○○○○○○ //○○○○●○●○○●●●●●○○ //○○○●●○●○○○○○○○○○ //○○○●○●●○●○○○○○○○ //○○●○○○●○●●●●●●●○ //○○●○○○●○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0000, 0x0040, 0x0020, 0x3FF8, 0x0006, 0x0040, 0x0030, 0x000E, 0x0008, 0x3FF8, 0x0248, 0x0248, 0x0248, 0x0248, 0x0000, 0x0000, //○○○○○○○○○○○○○○○○ //○○○○○○○○○●○○○○○○ //○○○○○○○○○○●○○○○○ //○○●●●●●●●●●●●○○○ //○○○○○○○○○○○○○●●○ //○○○○○○○○○●○○○○○○ //○○○○○○○○○○●●○○○○ //○○○○○○○○○○○○●●●○ //○○○○○○○○○○○○●○○○ //○○●●●●●●●●●●●○○○ //○○○○○○●○○●○○●○○○ //○○○○○○●○○●○○●○○○ //○○○○○○●○○●○○●○○○ //○○○○○○●○○●○○●○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0220, 0x0220, 0x0220, 0x0116, 0x0178, 0x0790, 0x3910, 0x0108, 0x0088, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○●○○○●○○○○○ //○○○○○○●○○○●○○○○○ //○○○○○○●○○○●○○○○○ //○○○○○○○●○○○●○●●○ //○○○○○○○●○●●●●○○○ //○○○○○●●●●○○●○○○○ //○○●●●○○●○○○●○○○○ //○○○○○○○●○○○○●○○○ //○○○○○○○○●○○○●○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0040, 0x2180, 0x2020, 0x10C0, 0x0800, 0x0600, 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○●○○○○○○ //○○●○○○○●●○○○○○○○ //○○●○○○○○○○●○○○○○ //○○○●○○○○●●○○○○○○ //○○○○●○○○○○○○○○○○ //○○○○○●●○○○○○○○○○ //○○○○○○○●●●●○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0000, //○○○○○○○○○○○○○○○○ 0x3FFE, //○○●●●●●●●●●●●●●○ 0x0020, //○○○○○○○○○○●○○○○○ 7 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 0x0020, 0x0040, 0x0040, 0x0080, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○●○○○○○ //○○○○○○○○○●○○○○○○ //○○○○○○○○○●○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○●○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0008, 0x0070, 0x0180, 0x0E00, 0x1000, 0x0E00, 0x0180, 0x0070, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○○○●○○○ //○○○○○○○○○●●●○○○○ //○○○○○○○●●○○○○○○○ //○○○○●●●○○○○○○○○○ //○○○●○○○○○○○○○○○○ //○○○○●●●○○○○○○○○○ //○○○○○○○●●○○○○○○○ //○○○○○○○○○●●●○○○○ //○○○○○○○○○○○○●○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0F80, 0x1240, 0x1240, 0x1240, 0x1240, 0x0B80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○●●●●●○○○○○○○ //○○○●○○●○○●○○○○○○ //○○○●○○●○○●○○○○○○ //○○○●○○●○○●○○○○○○ //○○○●○○●○○●○○○○○○ //○○○○●○●●●○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0000, 0x1FC0, 0x0080, 0x0040, 0x0040, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○○○○○○○ //○○○●●●●●●●○○○○○○ //○○○○○○○○●○○○○○○○ //○○○○○○○○○●○○○○○○ //○○○○○○○○○●○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 8 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 0x0000, //○○○○○○○○○○○○○○○○ 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○●○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x1860, 0x1410, 0x1208, 0x1108, 0x1088, 0x1070, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○●●○○○○●●○○○○○ //○○○●○●○○○○○●○○○○ //○○○●○○●○○○○○●○○○ //○○○●○○○●○○○○●○○○ //○○○●○○○○●○○○●○○○ //○○○●○○○○○●●●○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 9 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ }; //-----------------------------------------------------------------------------// メインプログラム //-----------------------------------------------------------------------------void main(void) { // 初期化 init(); cnt1 = 0; scroll = 0; while(1){ // 25ms を超えたら if( cnt1 >= 25 ){ cnt1 = 0; scroll++; // タイマーカウンタをクリアする // スクロールさせるための変数を+1 する } // スクロールの終了位置まで来たら if( scroll >= 16 * ( 22 - 2 ) ){ scroll = 0; // 変数をクリアする } } } //-----------------------------------------------------------------------------// R8C/35A の内蔵周辺機能の初期化 //-----------------------------------------------------------------------------void init( void ) { unsigned char i = 0; // 割り込み禁止 DI(); // クロック発生回路の XIN クロック設定 prc0 = 1; cm13 = 1; cm05 = 0; while(i <= 50) i++; ocd2 = 0; prc0 = 0; // I/O ポートの入出力設定 prc2 = 1; pd0 = 0xe0; // // // // pd0 レジスタへの書き込み許可 P0_0~P0_3:センサー P0_4:マイクロスイッチ P0_5~P0_7:LED 10 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : prc2 = 0; pd1 = 0xdf; pd2 = 0xfe; // // pd3 = 0xfb; pd3 = 0x00; pd4 = 0x80; pd5 = 0x40; pd6 = 0xff; // // // // // // // // pd0 レジスタへの書き込み禁止 // P1_0~P1_3:LED // P1_4:TXD0 // P1_5:RXD0 // P2_0:スイッチ // P2_1:AIN1 // P2_2:PWMA // P2_3:BIN1 // P2_4:PWMB // P2_5:SERVO // P2_6:AIN2 // P2_7:BIN2 // P3_2:赤外線受信 // P3_4:ブザー // P3_0~P3_7:タクトスイッチ // P4_2:VREF // P4_3~P4_5:DIPSW // P4_6:XIN // P4_7:XOUT // P5_7:DIPSW // P6_7:\ENABLE\ // P6_6:LATCH // P6_5:\SCLR\ // P6_4:SCLK // P6_3:ROWA_SIN 行A // P6_2:ROWB_SIN 行B // P6_1:COL_SIN 列 // P6_0: mstcr = 0x00; // モジュールストップ解除 // タイマ RB の 1ms 割り込み設定 trbmr = 0x00; trbpre = 128 - 1; trbpr = TIMER_CYCLE; trbic = 0x01; trbcr = 0x01; // // // // // // タイマ RC の PWM モード trccr1 = 0xb0; trcgra = 0; trcgrc = 0; trccr2 = 0x02; trcoer = 0x0b; trcpsr1 = 0x02; trcmr = 0x8a; カウントソースは f1 プリスケーラ プライマリカウンタ タイマ RB の割り込みレベル設定 カウントを開始 // // // // // // // カウントソースは f8 圧電サウンダの周期 圧電サウンダのデューティ比 TRCIOC 端子はアクティブレベル H TRCIOC 端子の出力許可 TRCIOC 端子を P3_4 に割り当て カウントを開始 // タイマ RD のリセット同期 PWM モード trdpsr0 = 0x08; // TRDIOB0 端子を P2_2 に割り当て trdpsr1 = 0x05; // TRDIOB1 端子を P2_5 に割り当て // TRDIOA1 端子を P2_4 に割り当て trdmr = 0xf0; // レジスタをバッファ動作にする trdfcr = 0x01; // リセット同期 PWM モードに設定 trdoer1 = 0xcd; // TRDIOB1 の出力許可 // TRDIOA1 の出力許可 // TRDIOB0 端子の出力許可 trdcr0 = 0x23; // カウントソースは f8 trdgra0 = trdgrc0 = PWM_CYCLE; // 周期 trdgrb0 = trdgrd0 = 0; // TRDIOB0 端子(左モータ) 11 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : trdgra1 = trdgrc1 = 0; trdgrb1 = trdgrd1 = 0; trdstr = 0x0d; // TRDIOA1 端子(右モータ) // TRDIOB1 端子(サーボ) // カウントを開始 // 割り込み許可 EI(); } //-----------------------------------------------------------------------------// 割り込み //-----------------------------------------------------------------------------#pragma interrupt intTRBIC (vect=24) void intTRBIC( void ) { tundf_tracr = 0; p0_7 = ~p0_7; if( p0_7 == 0 ){ //p0_1、p0_3 のモニタが可能 p0_5 = ~p0_1; p0_6 = ~p0_3; }else{ //p0_0、p0_2 のモニタが可能 p0_5 = p0_0; p0_6 = p0_2; } cnt0++; cnt1++; // ドットマトリクス LED 表示処理 dotmatrix( &str0[scroll] ); } //-----------------------------------------------------------------------------// センサー状態検出 // 引数 なし // 戻り値 センサ値 //-----------------------------------------------------------------------------unsigned char sensor( void ) { volatile unsigned char data1; data1 = ~p0; data1 = data1 & 0x0f; // ラインの色は白 return( data1 ); } //-----------------------------------------------------------------------------// モーター速度制御 // 引数 左モータ:-100~100、右モータ:-100~100 // 0 で停止、100 で正転 100%、-100 で逆転 100% // 戻り値 なし //-----------------------------------------------------------------------------void motor( int data1, int data2 ) { volatile int motor_r; volatile int motor_l; volatile int sw_data; 12 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : sw_data = dipsw() + 5; motor_l = (long)data1 * sw_data / 20; motor_r = (long)data2 * sw_data / 20; if( motor_l >= 0 ) { p2_1 = 0; p2_6 = 1; trdgrd0 = (long)( PWM_CYCLE - 1 ) * motor_l / 100; } else { p2_1 = 1; p2_6 = 0; trdgrd0 = (long)( PWM_CYCLE - 1 ) * ( -motor_l ) / 100; } if( motor_r >= 0 ) { p2_3 = 0; p2_7 = 1; trdgrc1 = (long)( PWM_CYCLE - 1 ) * motor_r / 100; } else { p2_3 = 1; p2_7 = 0; trdgrc1 = (long)( PWM_CYCLE - 1 ) * ( -motor_r ) / 100; } } //-----------------------------------------------------------------------------// 時間稼ぎ // 引数 タイマ値 1=1ms // 戻り値 なし //-----------------------------------------------------------------------------void timer( unsigned long data1 ) { cnt0 = 0; while( cnt0 < data1 ); } //-----------------------------------------------------------------------------// 音を鳴らす // 引数 (1/音の周波数)/(1/(クロック周波数/8))-1 // 戻り値 なし //-----------------------------------------------------------------------------void beep( int data1 ) { trcgra = data1; // 周期の設定 trcgrc = data1 / 2; // デューティ 50%のため周期の半分の値 } //-----------------------------------------------------------------------------// DIP スイッチ状態検出 // 引数 なし // 戻り値 0~15、DIP スイッチが ON の場合、対応するビットが 0 になります。 //-----------------------------------------------------------------------------unsigned char dipsw( void ) { volatile unsigned char data1; data1 = ( ( p5 >> 4 ) & 0x08 ) | ( ( p4 >> 3 ) & 0x07 ); return( data1 ); } //-----------------------------------------------------------------------------// プッシュスイッチ状態検出 13 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : // 引数 なし // 戻り値 スイッチが押されていない場合:0、押された場合:1 //-----------------------------------------------------------------------------unsigned char pushsw( void ) { unsigned char data1; data1 = ~p2; data1 &= 0x01; return( data1 ); } //-----------------------------------------------------------------------------// ドットマトリクス LED 表示 // 引数 表示配列のポインタ // 戻り値 なし //-----------------------------------------------------------------------------void dotmatrix( unsigned short *data1 ) { // // // // // // // // P6_7:\ENABLE\ P6_6:LATCH P6_5:\SCLR\ P6_4:SCLK P6_3:ROWA_SIN P6_2:ROWB_SIN P6_1:COL_SIN P6_0: 行A 行B 列 unsigned short rowa_sin; unsigned short rowb_sin; unsigned short col_sin; static int x=0; int y; // シフトレジスタをクリアしない p6_5 = 1; // \SCLR\ // ドットマトリクス LED へ出力許可 p6_7 = 0; // \ENABLE\ rowa_sin = data1[x]; rowb_sin = data1[x+16]; col_sin = 1 << ( 15 - x ); // 行 A データ // 行 B データ // 列データ for( y = 0; y < 16; y++ ){ p6_3 = (rowa_sin >> 15) & 0x0001; rowa_sin = rowa_sin << 1; // ROWA_SIN p6_2 = (rowb_sin >> 15) & 0x0001; rowb_sin = rowb_sin << 1; // ROWB_SIN p6_1 = col_sin & 0x0001; col_sin = col_sin >> 1; // COL_SIN // クロックの立ち上りでシフトレジスタにロード p6_4 = 0; // SCLK p6_4 = 1; // SCLK } 14 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 741 742 743 744 745 746 747 748 749 750 : : : : : : : : : : } // シフトレジスタのデータをラッチ p6_6 = 0; p6_6 = 1; // LATCH // LATCH x++; if( x >= 16 ){ x = 0; } 3.2 メインプログラムを説明する前に main 関数は、main 関数の後に記載されている関数を組み合わせてプログラムしていますので、 先に main 関数以外の関数の解説を行います。 dotmatrix 以外の関数については「ミニマイコンカーVer.2 C 言語走行プログラム解説マニュア ル」の「5. プログラム解説「mini_mcr.c」 」を参照してください。 15 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 3.3 R8C/35A の内蔵周辺機能の初期化:init 関数 init 関数は「ミニマイコンカーVer.2 C 言語走行プログラム解説マニュアル」で解説されてい ます。ここでは、init 関数の変更部分のみを解説します。 501 : // 502 : // 503 : pd3 = 0xfb; pd3 = 0x00; // P3_2:赤外線受信 // P3_4:ブザー // P3_0~P3_7:タクトスイッチ ドットマトリクス LED 基板のタクトスイッチを使用するため、ポート 3 を入力ポートにする必要 がありますので、pd3 レジスタを“0x00”にします。 532 533 534 535 536 537 538 : : : : : : : // // // // // // // trccr1 = 0xb0; trcgra = 0; trcgrc = 0; trccr2 = 0x02; trcoer = 0x0b; trcpsr1 = 0x02; trcmr = 0x8a; // // // // // // // カウントソースは f8 圧電サウンダの周期 圧電サウンダのデューティ比 TRCIOC 端子はアクティブレベル H TRCIOC 端子の出力許可 TRCIOC 端子を P3_4 に割り当て カウントを開始 ドットマトリクス LED 基板のタクトスイッチを使用するため、ポート 3 を入力ポートにする必要 があります。タイマーRC の初期化部分を削除して、TRCIOC 端子の出力が p3_4 端子に割り当てら れないようにします。 3.4 割り込みプログラム:intTRBIC 関数 intTRBIC 関数は「ミニマイコンカーVer.2 C 言語走行プログラム解説マニュアル」で解説され ています。ここでは、intTRBIC 関数の変更部分のみを解説します。 584 : dotmatrix( &str0[scroll] ); dotmatrix 関数を呼び出す部分を追加しています。割り込みに追加しているのは、各ドットマト リクス LED で 1 列ごとに表示を行い、残像で全体が表示されているように見せるためです。割り 込みは 1[ms]ごとに行われるので、全体を表示するには 16[ms]の時間が必要です。 16 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 3.5 ドットマトリクス LED 表示:dotmatrix 関数 dotmatrix 関数は、 引数の 16×32 のデータを各ドットマトリクス LED で 1 列ごとに表示します。 表示する列は、左端の列からで、呼び出すごとに表示列はインクリメントされていきます。 プログラム 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 : void dotmatrix( unsigned short *data1 ) : { : : // P6_7:\ENABLE\ : // P6_6:LATCH : // P6_5:\SCLR\ : // P6_4:SCLK : // P6_3:ROWA_SIN 行A : // P6_2:ROWB_SIN 行B : // P6_1:COL_SIN 列 : // P6_0: : : unsigned short rowa_sin; : unsigned short rowb_sin; : unsigned short col_sin; : static int x=0; : int y; : : // シフトレジスタをクリアしない : p6_5 = 1; // \SCLR\ : : // ドットマトリクス LED へ出力許可 : p6_7 = 0; // \ENABLE\ : : rowa_sin = data1[x]; // 行 A データ : rowb_sin = data1[x+16]; // 行 B データ : col_sin = 1 << ( 15 - x ); // 列データ : : for( y = 0; y < 16; y++ ){ : : p6_3 = (rowa_sin >> 15) & 0x0001; // ROWA_SIN : rowa_sin = rowa_sin << 1; : : p6_2 = (rowb_sin >> 15) & 0x0001; // ROWB_SIN : rowb_sin = rowb_sin << 1; : : p6_1 = col_sin & 0x0001; // COL_SIN : col_sin = col_sin >> 1; : : // クロックの立ち上りでシフトレジスタにロード : p6_4 = 0; // SCLK : p6_4 = 1; // SCLK : : } : : // シフトレジスタのデータをラッチ : p6_6 = 0; // LATCH : p6_6 = 1; // LATCH : : x++; : if( x >= 16 ){ : x = 0; 17 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 748 : 749 : 750 : } } 回路図(簡略図) 18 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 715 : p6_5 = 1; // \SCLR\ p6_5 端子を“1”にすることにより、シフトレジスタをクリアしないようにします。クリアする ときは、p6_5 端子を“0”にします。 718 : p6_7 = 0; // \ENABLE\ p6_7 端子を“0”にすることにより、パラレルレジスタのドットマトリクス LED への出力を許可 します。禁止するときは、p6_7 端子を“1”にします。 720 : 721 : 722 : rowa_sin = data1[x]; rowb_sin = data1[x+16]; col_sin = 1 << ( 15 - x ); // 行 A データ // 行 B データ // 列データ x=0 のとき rowa_sin 変数、rowb_sin 変数に入るデータ 0x0844, 0x0844, 0x1088, 0x1088, 0x1088, 0x2110, 0x2000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○○●○○○○●○○○●○○ //○○○○●○○○○●○○○●○○ //○○○●○○○○●○○○●○○○ //○○○●○○○○●○○○●○○○ //○○○●○○○○●○○○●○○○ //○○●○○○○●○○○●○○○○ //○○●○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ 0x1000, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //○○○●○○○○○○○○○○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○●○○○ //○○○●○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ //○○○○○○○○○○○○○○○○ x=0 のとき、rowa_sin 変数 に、この部分の行データが入 る。 x=0 のとき、rowb_sin 変数 に、この部分の行データが入 る。 x=0 のとき col_sin 変数に入るデータ 0x8000 //1000 0000 0000 0000 19 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 : : : : : : : : : : : : : : : : for( y = 0; y < 16; y++ ){ p6_3 = (rowa_sin >> 15) & 0x0001; rowa_sin = rowa_sin << 1; // ROWA_SIN p6_2 = (rowb_sin >> 15) & 0x0001; rowb_sin = rowb_sin << 1; // ROWB_SIN p6_1 = col_sin & 0x0001; col_sin = col_sin >> 1; // COL_SIN // クロックの立ち上りでシフトレジスタにロード p6_4 = 0; // SCLK p6_4 = 1; // SCLK } p6_4 端子(SCLK)の立ち上り時の p6_3 端子(ROWA_SIN) 、 p6_2 端子(ROWB_SIN)、 p6_1 端子 (COL_SIN) の状態が、シフトレジスタにラッチされます。 20 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 rowa_sin 変数 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 rowa_sin 変数を右に 15 回シフトしたデータを p6_3 端子から出力しています。その後 rowa_sin 変数を左に 1 回シフトしていますので、p6_3 端子からは、rowa_sin 変数の 15、14…1、0 ビット の順番でデータが出力されます。 rowb_sin 変数 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 rowb_sin 変数を右に 15 回シフトしたデータを p6_2 端子から出力しています。その後 rowb_sin 変数を左に 1 回シフトしていますので、p6_2 端子からは、rowb_sin 変数の 15、14…1、0 ビット の順番でデータが出力されます。 21 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 col_sin 変数 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 col_sin 変数のデータを p6_1 端子から出力しています。その後 col_sin 変数を右に 1 回シフト していますので、p6_1 端子からは、col_sin 変数の 0、1…14、15 ビットの順番でデータが出力 されます。 742 : 743 : p6_6 = 0; p6_6 = 1; // LATCH // LATCH p6_6 端子(LATCH)の立ち上り時のシフトレジスタの状態が、パラレルレジスタにラッチされま す。 22 ドットマトリクス LED 基板 C 言語電光掲示板プログラム解説マニュアル 3. プログラム解説「mini_mcr.c」 3.6 メインプログラム:main 関数 main 関数は、スタートアップルーチンから呼び出され、最初に実行される C 言語のプログラム です。 プログラム 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 : void main(void) : { : // 初期化 : init(); : : cnt1 = 0; : scroll = 0; : : while(1){ : // 25ms を超えたら : if( cnt1 >= 25 ){ : : cnt1 = 0; // タイマーカウンタをクリアする : scroll++; // スクロールさせるための変数を+1 する : : } : : // スクロールの終了位置まで来たら : if( scroll >= 16 * ( 22 - 2 ) ){ : scroll = 0; // 変数をクリアする : } : } : : } main 関数では、25[ms]ごとに表示する文字を左スクロールさせるための処理をしています。 444 : 445 : cnt1 = 0; scroll = 0; [ms]ごとに時間をカウントする cnt1 変数と、表示する文字を左スクロールさせるための scroll 1 変数をクリアします。 449 450 451 452 453 454 : : : : : : if( cnt1 >= 25 ){ cnt1 = 0; scroll++; // タイマーカウンタをクリアする // スクロールさせるための変数を+1 する } 25[ms]経過したら、次の時間をカウントするため cnt1 変数をクリアし、表示する文字を左ス クロールさせるため、scroll 変数をインクリメントします。 23 ドットマトリクス LED 基板 4. 仕様 457 : 458 : 459 : C 言語電光掲示板プログラム解説マニュアル if( scroll >= 16 * ( 22 - 2 ) ){ scroll = 0; // 変数をクリアする } 表示する文字は、 「ミニマイコンカーVer.2」で 18 文字、前後にスペースが 2 文字ずつ入って 22 文字となっています。最後の 2 文字を表示したときに先頭に戻す必要があり、1 文字あたりの列 数は 16 列ですので、 16×(文字数-2) のときに scroll 変数をクリアします。 4. 仕様 4.1 仕様 内容 電源 詳細 DC+5V ※ドットマトリクス LED 制御信号入力用コネクタに供給 表示エリア 16×32 ドット ※基板を最大 4 枚まで連結し、16×128 まで拡張可能 I/O ・ドットマトリクス LED 制御信号入力用コネクタ×1 個 ・ドットマトリクス LED 制御信号出力用コネクタ×1 個 ・タクトスイッチ信号出力用コネクタ×1 個 ・タクトスイッチ×8 個 24 ドットマトリクス LED 基板 4. 仕様 C 言語電光掲示板プログラム解説マニュアル 4.2 回路図 25 ドットマトリクス LED 基板 4. 仕様 C 言語電光掲示板プログラム解説マニュアル 26 ドットマトリクス LED 基板 4. 仕様 C 言語電光掲示板プログラム解説マニュアル 4.3 ポート表 コネクタ J1 コネクタ J2 番号 1 2 3 4 5 端子名 VCC \ENABLE LATCH \SCLR SCLK 6 7 8 9 10 ROWA_SIN ROWB_SIN COL_SIN 番号 1 2 3 4 5 6 7 8 9 10 端子名 VCC \ENABLE LATCH \SCLR SCLK ROWA_SOUT ROWB_SOUT COL_SOUT 機能 L:パラレルレジスタを LED に出力 立ち上り時にシフトレジスタをパラレルレジスタへラッチ L:シフトレジスタをクリア 立上がり時に ROWA_SIN、ROWB_SIN、COL_SIN の入力をシフトレジスタへラッ チ 左側 LED の行データ 右側 LED の行データ 左右 LED の列データ 未接続 GND 機能 J1 と同じ J1 と同じ J1 と同じ J1 と同じ 左側 LED の行データ(拡張用) 右側 LED の行データ(拡張用) 左右 LED の列データ(拡張用) 未接続 GND 4.4 ピン配置図 コネクタ 9 7 5 3 1 10 8 6 4 2 27