*lcdは16×2のものです
エラーはないのですが,lcdが光っているだけで文字が表示されません.
文字の先頭の位置を上手く引き渡せていないのでしょうか?
初めてポインタというものやlcdを使うのできちんと理解できていません.
lcdに表示できる仕組みだけでも教えてほしいです.お願いいたします.
*/
int rs=4;
int e=6;
int d7=13;
int d6=12;
int d5=11;
int d4=10;
//4ビットの書き込み
void lcd_write4(int str,int rs_2){
if(rs_2==0){
//コマンドの入力
digitalWrite(rs,0);
}else{
//データの入力
digitalWrite(rs,1);
}
//上位4ビットに書き込む
digitalWrite(e,1);
digitalWrite(d7,(str>>7)&0x01);//x
digitalWrite(d6,(str>>6)&0x01);//x
digitalWrite(d5,(str>>5)&0x01); //e
digitalWrite(d4,(str>>4)&0x01); //rs
delay(5);
digitalWrite(e,0);
delay(5);
//下位4ビットに書きこむ
digitalWrite(e,1);
digitalWrite(d7,(str>>3)&0x01); //d7
digitalWrite(d6,(str>>2)&0x01); //d6
digitalWrite(d5,(str>>1)&0x01); //d5
digitalWrite(d4,str&0x01);//d4
delay(5);
digitalWrite(e,0);
delay(5);
}
/そのまま/
int str_e;
int str_rs;
int str_d7;
int str_d6;
int str_d5;
int str_d4;
//8ビットの書き込み
void lcd_write8(int str){
//enableを1にする
digitalWrite(e,1);
digitalWrite(e,(str>>5)&0x01);
digitalWrite(rs,(str>>4)&0x01);
digitalWrite(d7,(str>>3)&0x01);
digitalWrite(d6,(str>>2)&0x01);
digitalWrite(d5,(str>>1)&0x01);
digitalWrite(d4,str&0x01);
delay(50);
digitalWrite(e,0);
delay(50);
}
//lcdの初期化
void lcd_init(){
//ポート設定
pinMode(e,OUTPUT);
pinMode(rs,OUTPUT);
pinMode(d7,OUTPUT);
pinMode(d6,OUTPUT);
pinMode(d5,OUTPUT);
pinMode(d4,OUTPUT);
delay(50);
digitalWrite(rs,LOW);
lcd_write8(0x23);
digitalWrite(rs,LOW);
lcd_write8(0x23);
digitalWrite(rs,LOW);
lcd_write8(0x23);
digitalWrite(rs,LOW);
lcd_write8(0x22);
lcd_write4(0x28,0);
lcd_write4(0x0E,0);
lcd_write4(0x06,0);
}
//lcdのカーソル
void lcd_locate(int x,int y){
//rsが0になる必要があるため
lcd_write4(0x80+x+y*0x40,0);
}
//main
int main(void){
char a1[]="hello";
char a2[]="world";
lcd_init();
lcd_locate(0,0);
lcd_prints(a1);
lcd_locate(1,0);
lcd_prints(a2);
/* //lcdに文字列出力上
lcd_locate(0,0);
lcd_prints("hello");
//lcdに文字列出力下
lcd_locate(1,0);
lcd_prints("world");*/
while(1){
;
}
delay(50);
return 0;
}
//lcdの表示(文字)
void lcd_print(char c){
rs=1;
delay(1);
lcd_write4(c,rs);
}
//lcdの表示(文字列)
void lcd_prints(char *x){
while(*x != 0x00){
//rsをHIGHにするための1
lcd_print(*x);
x++;
}
}
void setup( ) {
//lcdの初期化
lcd_init();
}
void loop() {
//lcdの初期化
lcd_init();
lcd_locate(0,0);
lcd_prints(" ");
lcd_locate(1,0);
lcd_prints(" ");
while(1){
;
}
}
/

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/22 00:42 編集
2022/01/21 14:20
2022/01/21 14:22
2022/01/21 16:22
2022/01/21 16:30 編集