ドットマトリクス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