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; //次の行へ
}
}