H8/3052F に、話題の秋月グラフィックLCDをバス接続してみました。
LCDからのREADはうまく動かないようですが、
表示だけならば、問題ありません。
回路とソースは以下の通りです。
▲5V
│
>
< 5KΩ
>
< ┌───┐
A01 ─────┼───┤ │
(CN3-16) ●───┤OR ├─ CS1(5)
│┌──┤ │
││ └───┘
││ ┌───┐
A02 ─────┼┼──┤ │
(CN3-17) ││┌─┤OR ├─ CS2(6)
│││┌┤ │
CS5 ─────●┼┘│└───┘
(CN1-13) │ │
│ │
RESET ──|>─●─┴────── RES(18)
(CN2-04) NOT
A00 ────────────── A0(4)
(CN3-16)
HWR ────────────── WR(9)
(CN2-08)
TIOCB4────────────── CL(7)
(CN1-19/PB3)
▲5V
│
>
< 5KΩ
> (READが動作しないので
< とりあえず pull up)
RD └─────── RD(8)
(CN2-07)
D00 DB0(10)
(CN3-07)
| |
D07 DB7(17)
(CN3-14)
--------- 以下、ソースコード ----------------------
#define BASE_ADR 0xa0000
#define CMD0 (*((volatile unsigned char*)(BASE_ADR+2)))
#define CMD1 (*((volatile unsigned char*)(BASE_ADR+4)))
#define DATA0 (*((volatile unsigned char*)(BASE_ADR+3)))
#define DATA1 (*((volatile unsigned char*)(BASE_ADR+5)))
__inline void WriteLcdCmd( char cs, unsigned char data )
{
switch( cs ) {
case 0 :
CMD0 = data ;
break ;
case 1 :
CMD1 = data ;
break ;
}
//WaitLcdBusy( cs ) ;
}
__inline void WriteLcdData( char cs, unsigned char data )
{
switch( cs ) {
case 0 :
DATA0 = data ;
break ;
case 1 :
DATA1 = data ;
break ;
}
}
void InitLcd( void )
{
Sleep( 1000 ) ;/* ハードリセット終了待ち */
WriteLcdCmd( LEFT, 0xe2 ); /* リセット */
WriteLcdCmd( RIGHT, 0xe2 );
Sleep( 300 ) ;/* リセット終了待ち */
WriteLcdCmd( LEFT, 0xa9 ); /* DUTY=1/32 */
WriteLcdCmd( RIGHT, 0xa9 );
WriteLcdCmd( LEFT, 0xa0 ); /* ADC=右回り */
WriteLcdCmd( RIGHT, 0xa0 );
WriteLcdCmd( LEFT, 0xa4 ); /* 通常表示 */
WriteLcdCmd( RIGHT, 0xa4 );
WriteLcdCmd( LEFT, 0xb8 ); /* ページ0 */
WriteLcdCmd( RIGHT, 0xb8 );
WriteLcdCmd( LEFT, 0xaf ); /* ここでランダムパターン表示 */
WriteLcdCmd( RIGHT, 0xaf );
}
void ChangeLcdPage( char cs, char page )
{
page &= 0x3;
WriteLcdCmd( cs, 0xb8 + page );
}
void SetLcdColumn( char cs, char col )
{
col &= 0x7f;
if( col > 79 ){
col = 79;
}
WriteLcdCmd( cs, col );
}
void ClearLcd( void )
{
char i, j;
for( i = 0; i < 4; i++ ){
ChangeLcdPage( LEFT, i );
SetLcdColumn( LEFT, 0 );
for( j = 0; j < 62; j++ ){
WriteLcdData( LEFT, 0 );
}
}
for( i = 0; i < 4; i++ ){
ChangeLcdPage( RIGHT, i );
SetLcdColumn( RIGHT, 0 );
for( j = 0; j < 62; j++ ){
WriteLcdData( RIGHT, 0 );
}
}
ChangeLcdPage( LEFT, 0 );
SetLcdColumn( LEFT, 0 );
}
void FillLcd( char Data )//テストプログラム
{
char i, j;
for( i = 0; i < 4; i++ ){
ChangeLcdPage( LEFT, i );
SetLcdColumn( LEFT, 0 );
for( j = 0; j < 62*3; j++ ){
WriteLcdData( LEFT, Data );
}
}
for( i = 0; i < 4; i++ ){
ChangeLcdPage( RIGHT, i );
SetLcdColumn( RIGHT, 0 );
for( j = 0; j < 62*3; j++ ){
WriteLcdData( RIGHT, Data );
}
}
ChangeLcdPage( LEFT, 0 );
SetLcdColumn( LEFT, 0 );
}
PS LCDデータ/コマンドの読み出しは、やはり無理でしょうか(^^;)?
ソフト屋なんでよく分かりません...horosi-desu
--
Name :Katsuhiko Terawaki
Address:5-3 Tashita Hirano-aza Iizaka-machi Fukushima-city
Fukushima-prefecture Japan.
E-mail :wakky@xxxxxxxxxxxxxxxxxxx
URL :http://www.computerartisan.com