/***********************************************************************/ /* */ /* FILE :test.c */ /* DATE :Sun, Jan 06, 2008 */ /* DESCRIPTION :Main Program */ /* CPU TYPE :H8S/2144F */ /* */ /* This file is generated by Renesas Project Generator (Ver.4.9). */ /* */ /***********************************************************************/ void main(void); #ifdef __cplusplus extern "C" { void abort(void); } #endif #include "iodefine.h" // 追加 #define DI P4.DR.BIT.B3 #define RW P4.DR.BIT.B5 #define LCD_DB PB.ODR.BYTE #define E P4.DR.BIT.B6 #define CS1 P4.DR.BIT.B7 #define CS2 P8.DR.BIT.B3 #define SLCD_A P6.DR.BIT.B0 #define SLCD_SCLK P6.DR.BIT.B1 #define SLCD_DATA P6.DR.BIT.B2 #define SLCD_POR P6.DR.BIT.B3 extern void busycheck(void); extern void cs(char); extern void displayon(char); extern void displayoff(char); extern void displaystartline(char,char); extern void pageaddress(char,char); extern void setaddress(char,char); extern void writedisplaydata(char,char); extern void lcd_E(void); extern void SLCD_reset(void); extern void SLCD_write(char); extern void SLCD_clkout(void); extern void SLCD_init(void); void main(void) { unsigned int i,j; P6.DDR=0xFF; // P6 bit0(7セグA)は入力、bit1〜bit7は出力に P6.DR.BYTE=0xF0; // 赤、青LEDと表示バックライト点灯 P4.DDR=0xFF; // P4は出力(LCD制御線) P8.DDR=0xFF; // P8は出力(LCD制御線) PB.DDR=0xFF; // PBは出力(LCDデータバス) SLCD_A=0; SLCD_SCLK=0; SLCD_DATA=0; SLCD_POR=0; displayoff(2); displayon(1); displaystartline(1,0); pageaddress(1,0); setaddress(1,0); for (i=0; i<64; i++) // 適当にデータ書き込み { writedisplaydata(1,i); } /* for (i=0; i<64; i++) // 縦にスクロールしてみる { displaystartline(1,i); for (j=0; j<65535; j++); for (j=0; j<65535; j++); for (j=0; j<65535; j++); for (j=0; j<65535; j++); for (j=0; j<65535; j++); for (j=0; j<65535; j++); } displaystartline(1,0); */ SLCD_init(); // SLCD_write(0x7F); // SLCD_write(0x7F); while(1); } void SLCD_write(char data) { int i; for (i=0; i<8; i++) { SLCD_DATA=((data >> 7)& 0x01); SLCD_clkout(); data=data << 1; } SLCD_DATA=0; for (i=0; i<600; i++); // 40us以上になるよう調整 } void SLCD_clkout(void) { int i; SLCD_SCLK=1; for (i=0; i<10; i++); // 1us以上になるよう調整 SLCD_SCLK=0; for (i=0; i<10; i++); // 1us以上必要 } void SLCD_reset(void) { unsigned int i; SLCD_POR=1; for (i=0; i<1300; i++); // 200us以上になるように調整 SLCD_POR=0; for (i=0; i<1000; i++); } void SLCD_init(void) { SLCD_A=1; SLCD_reset(); SLCD_reset(); SLCD_DATA=1; SLCD_clkout(); SLCD_DATA=0; SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_DATA=1; SLCD_clkout(); SLCD_clkout(); SLCD_reset(); SLCD_reset(); SLCD_clkout(); SLCD_DATA=0; SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_DATA=1; SLCD_clkout(); SLCD_clkout(); SLCD_reset(); SLCD_reset(); SLCD_clkout(); SLCD_DATA=0; SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_DATA=1; SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_reset(); SLCD_reset(); SLCD_clkout(); SLCD_DATA=0; SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_DATA=1; SLCD_clkout(); SLCD_DATA=0; SLCD_clkout(); SLCD_DATA=1; SLCD_clkout(); SLCD_DATA=0; SLCD_clkout(); SLCD_DATA=1; SLCD_clkout(); SLCD_DATA=0; SLCD_clkout(); SLCD_DATA=1; SLCD_clkout(); SLCD_reset(); } void lcd_E(void) { int i; E=1; for (i=0; i<100; i++); // 少し時間を空けないと、データを取りこぼす E=0; } void writedisplaydata(char a,char b) { cs(a); RW=0; // R/W DI=1; // D/I LCD_DB=b; // write data lcd_E(); busycheck(); } void setaddress(char a,char b) { cs(a); RW=0; // R/W DI=0; // D/I LCD_DB=(b & 0x3F) | 0x40; // column address lcd_E(); busycheck(); } void pageaddress(char a,char b) { cs(a); RW=0; // R/W DI=0; // D/I LCD_DB=(b & 0x07) | 0xB8; // page address lcd_E(); busycheck(); } void displaystartline(char a,char b) { cs(a); RW=0; // R/W DI=0; // D/I LCD_DB=(b & 0x3F) | 0xC0; // display start line lcd_E(); busycheck(); } void displayon(char a) { cs(a); RW=0; // R/W DI=0; // D/I LCD_DB=0x3F; // display ON lcd_E(); busycheck(); } void displayoff(char a) { cs(a); RW=0; // R/W DI=0; // D/I LCD_DB=0x3E; // display OFF lcd_E(); busycheck(); } void cs(char a) { switch(a) { case 1: CS1=1; // CS1 CS2=0; // CS2 break; case 2: CS1=0; // CS1 CS2=1; // CS2 break; } } void busycheck(void) { PB.DDR=0x00; // PBは入力(LCDデータバス) LCD_DB=0x00; RW=1; // R/W DI=0; // D/I lcd_E(); while(LCD_DB & 0x80); // busy check PB.DDR=0xFF; // PBは出力(LCDデータバス) } #ifdef __cplusplus void abort(void) { } #endif