|
プログラムは、「基本編5.ドットマトリクスLEDを使ってみる」のプログラムと「基本編8.シリアルポートsci0を使ってみる(受信)」のプログラムをドッキングして改変しました。私の場合、接続方法は前回のままです。個々人でどのように配線したかによってどのレジスタを使っているか変わってきます。大変ではありますが、一つ一つ図面と格闘してください。
/*シリアルポートsci0を使った通信*/
/*(ドットマトリクス受信)*/
#include <h8/reg3067.h> //レジスタの定義
#include <string.h>
#include <mes2.h>
int main() {
/*初期設定*/
PADDR = 0xFF; //ROW側(固定)
PADR = 0x00; //クリア
PBDDR = 0xCF; //COL側(固定)
PBDR |= 0x00; //クリア
P8DDR = 0xFD; //COL側(固定)
P8DR |= 0x00; //クリア
P9DDR = 0xD0; //COL側(固定)
P9DR |= 0x00; //クリア
int fd,i,len,r = 0;
unsigned char lcd[82];
char *a;
unsigned char Word[] = "ニュウリョクシテクダサイ:";
/*初期設定ここまで*/
// ポインタに配列lcdの先頭アドレスを入れる
a = lcd;
// LCD画面の消去
fd = open("lcd0", 0);
for(i=0;i<32;++i){
seek(fd, i);
fprintf(fd, " ");
}
close(fd);
fd = open("com0", 0);
write(fd, Word, strlen(Word));
close(fd);
do{
// 文字入力があるまで待つ
while(r == 0){
fd = open("com0",0);
sleep(80);
r = read(fd, a, 1);
close(fd);
printf("%d",r);
}
r = 0;
// ポインタaを一要素分進める
a = ++a;
}
// Aキーが押されるまで受け付ける
while(*(a-1)!= 'A');
//受信したらLCDに書き出す
fd = open("lcd0", 0);
write(fd, lcd, strlen(lcd));
close(fd);
len = strlen(lcd);
printf("\r\n%d文字受信しました\r\n",len);
// ドットマトリクス表示
while(1){
PBDR = 0x48; //ROW
PADR = 0x01; //COL-1行目
sleep(10);
PBDR = 0x84; //ROW
PADR = 0x02; //COL-2行目
sleep(10);
PBDR = 0x02; //ROW
P8DR |= 0x01; //ROW
PADR = 0x04; //COL-3行目
sleep(10);
P8DR = 0x00; //ROWクリア
PBDR = 0x01; //ROW
P9DR |= 0x10; //ROW
PADR = 0x08; //COL-4行目
sleep(10);
PBDR = 0x01; //ROW
P9DR |= 0x10; //ROW
PADR = 0x10; //COL-5行目
sleep(10);
PBDR = 0xCF; //ROW
P8DR |= 0x01; //ROW
P9DR |= 0x10; //ROW
PADR = 0x20; //COL-6行目
sleep(10);
P8DR = 0x00; //ROWクリア
PBDR = 0x01; //ROW
P9DR |= 0x10; //ROW
PADR = 0x40; //COL-7行目
sleep(10);
PBDR = 0x01; //ROW
P9DR |= 0x10; //ROW
PADR = 0x80; //COL-8行目
sleep(10);
P9DR = 0x00; //ROWクリア
}
}
ここにプログラムをおきます。参考程度にとどめてください。
文字の表示は、COL(PADRレジスタにつながっている)を一つずつずらして表示させます。途中、P8DRやP9DRを0でクリアして、Aの表示がうまくいくようにします。
やり終えた後、AだけじゃなくBとかCとかアルファベット全文字についてやってみる気は全く起きませんでした(笑)。どこのビットに1を立てるのか考えるのが手間です。
なお、今回のプログラムはAの表示をし始めたらそこから永久ループに入る書き方になっています。本来のプログラムの書き方からすると望ましくないと思います。ここでは何かボタンを用意して、押されたらループを抜ける書き方にしてください。私は面倒だったので省略しました。終わらせるときは、リセットボタンを押して終わらせてました。
次は7.シリアルポートsci0を使ってみる(送信)です。>>
|