LCDへのカウントアップ数字表示

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C素人

LCDへのカウントアップ数字表示

#1

投稿記事 by C素人 » 8年前

LCDに時間表示。

1秒毎にカウントアップした数字をLCDに表示させようとしています。
1秒はおおよその目安なので、精度はそれほど求めていません。

タイマ割り込みが1秒ごとに発生するようにして、
その中で、数字をカウントアップさせて、LCDへの表示を試していますが、
LCDに数字が表示されません。(文字化けしてしまっています。)

周期確認用にLEDを点灯させていますが、こちらは1秒おきに点灯・消灯を繰り返しているので、
タイマ割り込みの設定はできています。

LCDへの数字表示ができません。
文字化けしているため、カウントアップできているのかも分かりません。

初歩的な質問ですみませんが、文字化けの原因を教えてください。

または、他に簡単な方法があれば、ご指摘いただけると助かります。

PICマイコン(コンパイラC18)の環境です。

コード:

void itostring(char digit, unsigned int data, char *buffer);
int cnt;

/*メッセ時の定義*/
char NUMMSG[] = "Time CNT=        ";

	while(1){
	}
}


#pragma interrupt timer   //割り込みの宣言
#pragma code isr_vector = 0x08	//	割込みベクタにジャンプ命令をセット
void goto_isr(void)
{
	_asm
		Goto timer
	_endasm
}

#pragma code  //割込み処理関数を用意
void timer(void)  //割込み処理関数
{
		cnt++;
		lcd_clear();	//LCD全消去
		lcd_cmd(0x80);		//1行目へ移動
		itostring(3, cnt,NUMMSG+9);	//数値を文字に変換
		lcd_str(cnt);	//Numberの表示	
		LED_R=~LED_R;				//LED_R On/Off
		INTCONbits.TMR0IF = 0; ///タイマ0割り込みフラグのクリア
		WriteTimer0(49911);

}


/////////////////////*LCD表示補助関数*////////////////////////
void lcd_printf(char* str)      //液晶表示補助関数
{
        while(*str)    //文字列終端の '\0'を検出するまで
        {
                lcd_data(*str);        // 1文字表示
                str++;
        }     
}

/*************************************
/*      整数からASCII文字に変換
*************************************/
void itostring(char digit, unsigned int data, char *buffer)
{
	char i;
	buffer += digit;				//最後の数字位置
	for(i=digit;i>0;i--)			//変換は下位から上位へ
	{
		buffer--;					//ポインタ-1
		*buffer = (data % 10) + '0';	//ASCIIへ変換
		data = data / 10;			//次の行へ
	}
}



アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: LCDへのカウントアップ数字表示

#2

投稿記事 by みけCAT » 8年前

  • LCDとマイコンの配線は適切ですか?
  • LCDのフォントの文字コードとプログラムの文字コードはマッチしていますか?
  • lcd_strの使い方または実装は適切ですか?
たとえばI2C接続の液晶表示器の制御で紹介されているlcd_strの第一引数は文字列へのポインタなのに、
ここのコードでは整数を渡しているというのは怪しいですね。
でも、それだとNUMMSGとは全く関係ないデータが使用されると予想できるので、文字化け(=データの解釈ミスや破損)の原因にはならないでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

C素人

Re: LCDへのカウントアップ数字表示

#3

投稿記事 by C素人 » 8年前

みけCAT様

ありがとうございます。
いただいた指摘について、確認するため、
単純に0から100までカウントするプログラムを作り、動作を確認してみました。

そのコードを添付します。
このコードで試したところ、LCDに文字を表示させることができました。


コード:

	while(1)
	{
		lcd_clear();	//LCD全消去
		lcd_cmd(0x80);		//1行目へ移動		
		lcd_str(STRTMSG);	//開始メッセージ
		for(i=0;i<=100;i++)
		{
			itostring(3, i, NUMMSG+9);	//数値を文字に変換
			lcd_cmd(0xC0);		//2行目へ移動
			lcd_str(NUMMSG);	//Numberの表示
			Delay10KTCYx(10);	//0.1秒待ち
		}
		lcd_clear();	//LCD全消去
		lcd_str(ENDMSG);	//終了メッセージ表示
		
		//1秒待ち
		Delay10KTCYx(100);	//1秒待ち
	}
}

/*************************************
/*      整数からASCII文字に変換
*************************************/
void itostring(char digit, unsigned int data, char *buffer)
{
	char i;
	buffer += digit;				//最後の数字位置
	for(i=digit;i>0;i--)			//変換は下位から上位へ
	{
		buffer--;					//ポインタ-1
		*buffer = (data % 10) + '0';	//ASCIIへ変換
		data = data / 10;			//次の行へ
	}
}



閉鎖

“C言語何でも質問掲示板” へ戻る