[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00761] Re: 画面クリア



フクイ@初心者です。
長久さん丁寧なご回答ありがとうございます。

早速、OS,開発環境のバージョンを確認しましたが、最新のものでした。
ということで、少々長いのですが、ソースを開示しますので、
皆様気づかれたことをアドバイスください。
電源ONで16色モードのタイトルが出るのですが、そこははしょって、
その後の4色カラーモードの初期化関数から開示します。

/* カラー4色モード画面初期化 */
void ws_init (){
	wwc_set_color_mode (COLOR_MODE_4COLOR);
	wwc_clear_font ();
	display_control (DCM_SCR1);
	text_set_screen (SCREEN1);

	wwc_palette_set_color (0,3,BLACK);
	wwc_palette_set_color (0,2,BLUE);
	wwc_palette_set_color (0,1,RED);
	wwc_palette_set_color (0,0,WHITE);

	text_screen_init ();
	text_put_string (6,0,"♪SERIAL TERMINAL♪");
	cursor_set_location (0,1,1,1);
	cursor_display (1);
}

ちなみに、この関数内の最後で screen_fill_char は動作しました。
また、もう1つ疑問があるのですが、4回の wwc_palette_set_color を
for文でまわすと、値がうまくパレットに設定できませんでした。

次にマイコンからのキーボード入力をシリアルで取り込む関数です。
実際のプログラムは、上記の画面初期化を行なった後、
STARTキーが押されるまでキーボード入力を受け付けつづけます。

/* キーボード入力 */
unsigned int key_in (){
	int c;
	if (ww_comm_recv_buf_st () > 0){
		c = ww_comm_recv ();
		if (c){
			text_put_char (tx, ty, c);

			if (tx<27)
				tx++;
			else if (ty<17){
				ty++;
				tx=0;
			}else
				/* 画面クリア */
				lcd_clear ();

			cursor_set_location (tx,ty,1,1);
		return (c);
		}
	}
}

この関数はマイコンから送られてくるASCIIコードを
ささお氏作のフリーのシリアル通信ライブラリを使用して受け取り、
それをWSCのテキスト画面に表示するだけのものです。
この中で、画面がいっぱいになったときに lcd_clear () という関数を使って
画面をクリアしています。
ちなみに、この関数内では screen_fill_char は動作しませんでした。
具体的にはプログラムが止まってしまいました。

次に画面クリアの関数です。

/* カラー4色モード画面クリア */
void clear_screen (){
	screen_fill_char (SCREEN1,0,0,28,18,0);
}

screen_fill_char で使用しているパレット、キャラクタ番号は共にゼロなので
文法的には問題ないと思います。この関数で wwc_font_clear を実行しても
もちろん動作しません。

以上、なにか問題があるでしょうか?
気になったのですが、キーボードから入力する関数 key_in の中で
memset() を実行しても、プログラムが止まりました。

関数の使い方、または関数から関数を呼び出すさいに何か不手際があるのでしょうか
?
わかる方おられましたら、アドバイスください。
よろしくお願い致します。



ML Archives