全体表示

[ リスト ]

LCD(4)

まだまだ、完成は遠いですが、、、。
//sample22_01.c
#pragma sfr
/*  PIN接続状況
マイコン側    LCD側
  P10      DB0
  P11            DB1
  P12            DB2
  P13            DB3
  p14            DB4
  p15            DB5
  p16            DB6
  p17            DB7

  P30            E
  P31            R/W
  P32            RS
*/

//インターフェース
#define LCD_INSTRUCTION 0
#define LCD_WRITE 0
#define LCD_READ 2
#define LCD_ENABLE 1
#define LCD_CONTROL (LCD_INSTRUCTION + LCD_WRITE)
#define LCD_STATUS (LCD_INSTRUCTION + LCD_READ)
#define LCD_PUT (LCD_DATA + LCD_WRITE)
#define LCD_GET (LCD_DATA + LCD_READ)

//LCDコントロール制御
#define LCD_CLEAR 1
#define LCD_HOME 2
#define LCD_MODE 4//エントリモード
#define LCD_DISPLAY 8
#define LCD_CURSOR 16//カーソルシフト
#define LCD_FUNCTION 32
#define LCD_CGRAM 64//アドレス
#define LCD_DDRAM 128

//LCD制御 OP
#define LCD_CUR_INC 2//アドレス+1
#define LCD_CUR_DEC 0//アドレスー1
#define LCD_WITHSHIFT 1//表示シス
#define LCD_OFF 0 //表示OFF
#define LCD_ON 4//表示ON
#define LCD_DISPCUR 2//クリア
#define LCD_BLINK 1//ブリンク
#define LCD_8BIT 16
#define LCD_4BIT 0
#define LCD_2LINE 8//2行
#define LCD_1LINE 0//1行
#define LCD_CHAR10 4//10ドット
#define LCD_CHAR7 0//7ドッド

void lcd_init(void);
void lcd_puts(char *);
void lcd_putc(char);
void lcd_control(unsigned char);
void lcd_clear(void);
void lcd_home(void);
void lcd_line2(void);
void lcd_locate(char x,char y);
static void wait(int cnt);


void lcd_init(void){ //初期化
  PM1 = 0x00; //PM1.0-PM1.7を出力に設定
  PM3 = 0x00;
  wait(15);
  lcd_control(LCD_FUNCTION + LCD_8BIT);
  wait(5);
  lcd_control(LCD_FUNCTION + LCD_8BIT);
  wait(5);
  lcd_control(LCD_FUNCTION + LCD_8BIT + LCD_2LINE + LCD_CHAR7);
  lcd_control(LCD_DISPLAY + LCD_OFF);
  lcd_clear();
  lcd_home();
  
  lcd_control(LCD_DISPLAY + LCD_ON + LCD_DISPCUR + LCD_BLINK);
  lcd_control(LCD_MODE + LCD_CUR_INC);
}

//wait
static void wait(int cnt){
  int m,n;
  for(m=0;m<cnt;m++){
    for(n=0;n<5000;n++){};
  }
}



//表示clear
void lcd_clear(void){
lcd_control(LCD_CLEAR);
wait(3);
}

//carsor home
void lcd_home(void){
  lcd_control(LCD_HOME);
  wait(3);
}


//line 2
void lcd_line2(void){
  lcd_contol(LCD_DDRAM + 0x40);
  wait(3);
}

//lcd 文字列表示
void lcd_puts(char *msg){
  char *p;
  for(p=msg; *p != '\0';p++){
  lcd_put(*p);
  }
}

//lcd 表示位置(locate)
void lcd_locate(char x, char y){
  char i;
  lcd_putc(0x02);
  wait(10);
  for(i=0;i<(y*40)+x;i++){
    lcd_putc(0x14);
  }
}

//lcd 1文字表示          
void lcd_putc(char ch){
  //P3 = LCD_PUT;
  //P3 = LCD_PUT + LCD_ENABLE;
  //P1 = ch;
  //P3 = LCD_PUT;
 wait(1);
}
//lcd コマンド制御                 
void lcd_control(unsigned char cmd){
  //P3 = LCD_CONTROL;
  //P3 = LCD_CONTROL + LCD_ENABLE;
  //P1 = cmd;
  //P3 = LCD_CONTROL;
  wait(1);
}


void main(){ 
  //lcd_init();
  //lcd_home():
  //lcd_puts("This is test");
  //lcd_line2();
  //lcd_locate(5,2);
  //lcd_puts("line 2"); 
}



.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事