| 沼津高専 電子制御工学科 | ||||||
|
||||||
| 改訂記録 | ||||||
|---|---|---|---|---|---|---|
| 版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
| A01 | 2000.10.13 | 田口 | 大庭 |
初版 | ||
| A02 | 2000.10.19 | 田口 | 大庭 |
LCDドライバプログラムを扱う上での注意を追加 | ||
| A03 | 2000.12.7 | 田口 | 田口 |
ioctl関数のコマンドを追加、試験方法の修正 | ||
| A04 | 2001.1.6 | 田口 | 田口 | 2行の文字表示方法、ダウンロードファイルの追加、試験方法の更新等 | ||
| A05 | 2001.3.13 | 田口 | 遠山 | 最終的な仕様に修正 | ||


●int fd=open("/dev/lcd$i",f_mode)
第1引数:LCDデバイスドライバを指定($iは0,1などの整数である。)
第2引数:ファイルの読み書きの属性(O_RDONLY、O_WRONLY、O_RDWR、etc)
・LCDデバイスファイルをopenすると、open時にI/Oポートアドレスのチェックと登録を行う。もしI/Oポートが使用中な
らerrを返す。
・初めてopenされたときは、LCDモジュールに最低限の初期設定(LCDモジュールのディスプレイ・カーソルON、2行表示に
設定、表示クリア)を行う。
●read(fd, char *buf,size_t count,loff_t offset)
第1引数:LCDドライバファイルを指定
第2引数:表示文字の格納領域
第3引数:読み込み文字のバイト数
第4引数:オフセット
・readメソッドは呼び出されると、LCDモジュールに表示されている文字データを第3引数で指定されたバイト数分I/Oポ
ートから読み込み、bufに格納する。カーソルがあったアドレスより前の文字データしか格納されていない事に注
意が必要。また、2行にわたって表示している場合は、表示設定を行わない限り(例えばアドレスを1行目の最後
の文字の所にするとか)2行目の文字のみデータは格納されている。
[例]10バイト分読み込みたい→現在LCDに表示されている文字は1行目に5文字、2行目に3文字、カーソルは2行目に表示
されている文字の後→
結果:2行目の3文字分のデータしか格納されていないので、10バイト分指定したにもかかわらず3バイト分だけ読み
込む。
・もしデータが獲得できなかった場合は-ENOMSGを返す。
●write(fd, char *buf,int count,offset)
第1引数:LCDドライバファイルを指定
第2引数:表示文字の格納領域
第3引数:書込み文字のバイト数
第4引数:オフセット
・write関数は呼び出されると、bufに格納した文字データをデバイスに書き出す。そしてI/Oポートアドレスに文字デー
タを書き込んで表示する。表示文字を書き込む前に表示設定(ioctl関数にて)を行わない限り、書き込んだ文字は、現
在表示されている文字の後に表示される。
・もし第3引数が0(もしくは0以下)場合は-EINVALを返す。また、最大書き込み文字(32字)以上書き込むと-EMSGSIZEを返
す。
・2行分の文字を1度に書き込む方法に関しては下記(5-3)参照。
●ioctl(fd,int cmd,int &ctl_nr)
第1引数:LCDドライバファイルを指定
第2引数:コマンド選択値
第3引数:表示設定値
・ioctl関数では第2引数の値によってコマンドを選択し、LCDデバイスの様々な表示設定を行う。コマンドは9つあり、選
択したコマンドによって表示設定信号を作成してI/Oポートに書き込むことにより、LCDの表示クリアやカーソルの進む
方向などを設定できる。
●close(fd)
第1引数:LCDドライバファイルを指定
・引数にLCDドライバファイルを指定すると、release関数はI/Oポートを開放してcloseする。
| コマンド(cmd) |
コマンド値 |
設定内容 |
表示設定値(ctl_nr) |
| LCD_CLEAR |
40 |
表示クリア |
なし |
| LCD_ADD_ZERO |
41 |
表示アドレスを0番地にセット(表示内容不変化) |
なし |
| LCD_CURSOR_SHIFT |
42 |
@カーソル進行方向 A表示シフト |
@インクリメント:1,デクリメント:0 AYES:1,NO:0 |
| LCD_ON_OFF |
43 |
@全表示のON/OFF AカーソルのON/OFF B文字のブリンク |
@ON:1,OFF:0 AON:1,OFF:0 BYES:1,NO:0 (@*0x04 + A*0x02 + B) |
| LCD_LIST_OR_CURSOR |
44 |
@表示シフトorカーソル移動(表示内容不変化) Aシフト方向 |
@表示シフト:1,カーソル移動:0 A右:1,左:0 |
| LCD_TWO_SET |
45 |
表示アドレスを2行目0番地にセット |
なし |
| LCD_ADD_SET |
46 |
表示文字のアドレスセット |
表示文字アドレス値 |
| LCD_BF_ADD |
47 |
@ビジーフラグの読み出し A表示文字アドレスの読み出し |
@内部動作中:1,命令受付可:0 A表示文字アドレス値 |
| LCD_HARDRESET |
48 |
利用度数のリセット |
なし |
#define LCD_IOC_MAGIC 'l' #define LCD_CLEAR _IO(LCD_IOC_MAGIC,40) #define LCD_ADD_ZERO _IO(LCD_IOC_MAGIC,41) #define LCD_CURSOR_SHIFT _IOW(LCD_IOC_MAGIC,42,&ctl_nr) #define LCD_ON_OFF _IOW(LCD_IOC_MAGIC,43,&ctl_nr) #define LCD_LIST_OR_CURSOR _IOW(LCD_IOC_MAGIC,44,&ctl_nr) #define LCD_TWO_SET _IO(LCD_IOC_MAGIC,45) #define LCD_ADD_SET _IOW(LCD_IOC_MAGIC,46,&ctl_nr) #define LCD_BF_ADD _IOR(LCD_IOC_MAGIC,47,&ctl_nr) #define LCD_HRADRESET _IO(LCD_IOC_MAGIC,48) #definr LCD_IOC_MAXNR 48

| 関連文書 |
|---|