掲示板


[記事リスト] [返信する] [新着記事] [過去ログ] [ワード検索] [留意事項] [管理用]

記事No 797
タイトル lcdのビジーチェック
投稿日 : 2017/01/18(Wed) 19:34:31
投稿者 negishi   <nekinorijp@yahoo.co.jp>
参照先
lcdのビジーチェックでデータビット7が0になってもビジーチェックを抜けられません。どうすれば抜けられるか教えていただけますか?ソースコードは以下のようになっています。開発環境はmplabx idev3.5 xc8v1.4です 

#define _XTAL_FREQ 20000000 // クロック周波数設定
/**** 液晶表示用設定 *****/
#define DB7 RB7 //DB7 pin
#define DB6 RB6 //DB6 pin
#define DB5 RB5 //DB5 pin
#define DB4 RB4 //DB4 pin
//#define DB3 pin_b3 //DB3 pin
//#define DB2 pin_c6 //DB2 pin
//#define DB1 pin_c5 //DB1 pin
//#define DB0 pin_c4 //DB0 pin
#define RS LATD7 //RS pin
#define RW LATD6 //RW pin
#define STB LATD5 //E pin (STB pin)
#define bmode 0x0f
///////////////////////////////////////////////
// LCD control Library
// lcd_init()-------- initialize
// lcd_ready()------- busy check
// lcd_cmd(cmd)------ send command
// lcd_data(string)-- display string
// lcd_clear() ------ clear display
///////////////////////////////////

/// lcd ready check function
int lcd_ready(){
int high,low;
TRISB=(0x0f | 0xF0); //upper is input
LATDbits.RS=0;//_low(rs)
LATDbits.RW=1;//high(rw); //read mode
LATDbits.STB=1;//high(stb);
high=PORTB &0xF0; //input upper
LATDbits.STB=0;//low(stb);

LATDbits.STB=1;//_high(stb);
low=PORTB & 0xF0; //input lower
LATDbits.STB=0;//low(stb);
TRISB=(0x0f);
return(high | (low>>4)); //end check
}

////////// lcd display data function
void lcd_data(int asci){
//db = asci; //set upper data
LATB=(asci);
LATDbits.RW=0;//_low(rw); //set write
LATDbits.RS=1; //set rs high
LATDbits.STB=1; //strobe
LATDbits.STB=0; //low(stb);

asci=asci<<4;
LATB=(asci); //set lower data
LATDbits.STB=1; //strobe
LATDbits.STB=0; //low(stb);
while((lcd_ready(),7));


}
////////// lcd command out function
int cmd;
void cmdout(int cmd){
LATB=(cmd);
LATDbits.RW=0; //set write
LATDbits.RS=0; //set rs low
LATDbits.STB=1; //strobe
LATDbits.STB=0;
cmd=cmd<<4;
PORTB=(cmd);
LATDbits.STB=1; //strobe
LATDbits.STB=0;
}

void lcd_cmd(int cmd){
cmdout(cmd);
while(( lcd_ready(),7)); //end check
}

///// lcd display clear function
//MCHP void lcd_clear();{
void lcd_clear(){
lcd_cmd(1); //initialize command
__delay_ms(100);
}

///////// lcd initialize function
//MCHPvoid lcd_incmd(int cmd);{
void lcd_incmd(int cmd){
//db = cmd; //mode command
LATB=(cmd);
LATDbits.RW=0; //set write
LATDbits.RS=0; //set rs low
LATDbits.STB=1; //strobe
LATDbits.STB=0; //low(stb);
__delay_ms(10);
}

//MCHP void lcd_init();{
void lcd_init(){
__delay_ms(15);
lcd_incmd(0x30); //8bit mode set
__delay_ms(5);
lcd_incmd(0x30); //8bit mode set
__delay_ms(5);
lcd_incmd(0x30); //8bit mode set
__delay_ms(5);
lcd_incmd(0x20); //4bit mode set
__delay_ms(5);

lcd_cmd(0x2C); //DL=0 4bit mode
lcd_cmd(0x08); //disolay off C=D=B=0
lcd_cmd(0x0e); //display on C=D=1 B=0
lcd_cmd(0x06); //entry I/D=1 S=0
}

- 関連一覧ツリー (▼ をクリックするとツリーを一括表示します)


- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ
参照先
画像UP
暗証キー (英数字で8文字以内)
投稿キー (右画像の数字を入力) 投稿キー


- 投稿記事修正/削除フォーム -
処理 No 暗証キー

- WebForum -