/***********************************************************************/ /* */ /* 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_E P6.DR.BIT.B0 #define SLCD_SCLK P6.DR.BIT.B1 #define SLCD_DATA P6.DR.BIT.B2 #define SLCD_INT P6.DR.BIT.B3 #define RTC_SCL P9.DR.BIT.B1 #define RTC_SDA P9.DR.BIT.B0 extern void SLCD_reset(void); extern void SLCD_write(char); extern void SLCD_clkout(void); extern void SLCD_init(void); extern void SLCD_1disp(unsigned char); extern void SLCD_intdisp(unsigned int,unsigned int); extern void wait(unsigned int); extern unsigned char RTC_read(unsigned char); extern unsigned char RTC_1read(void); extern void RTC_ACKout(void); extern void RTC_1write(unsigned char); extern void RTC_clkout(void); extern void RTC_write(unsigned char,unsigned char); extern void RTC_init(void); void main(void) { unsigned int i,j,k; unsigned char ye,mn,dy,hh,mm,ss; 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データバス) P9.DDR=0xFF; // P9は出力(RTCとか) SLCD_E=0; SLCD_SCLK=0; SLCD_DATA=0; SLCD_INT=0; RTC_SCL=1; RTC_SDA=1; SLCD_init(); SLCD_reset(); SLCD_write(0xA0); for (i=0; i<16; i++) SLCD_write(0x00); // 表示クリア if ((RTC_read(0xF) & 0x10)==0x10) RTC_init(); // バックアップされていなければ、レジスタ初期化 // RTC_init(); while(1) { ye=RTC_read(0x6); // 年 mn=RTC_read(0x5); // 月 dy=RTC_read(0x4); // 日 hh=RTC_read(0x2); // 時 mm=RTC_read(0x1); // 分 ss=RTC_read(0x0); // 秒 SLCD_reset(); SLCD_write(0xA0); SLCD_1disp((ye & 0xF0)>>4); SLCD_1disp(ye & 0x0F); SLCD_1disp(((mn & 0xF0)>>4) | 0x80); SLCD_1disp(mn & 0x0F); SLCD_1disp(((dy & 0xF0)>>4) | 0x80); SLCD_1disp(dy & 0x0F); SLCD_write(0x00); SLCD_write(0x00); SLCD_1disp((hh & 0xF0)>>4); SLCD_1disp(hh & 0x0F); SLCD_1disp(((mm & 0xF0)>>4) | 0x80); SLCD_1disp(mm & 0x0F); SLCD_1disp(((ss & 0xF0)>>4) | 0x80); SLCD_1disp(ss & 0x0F); wait(10); } } void RTC_init(void) { RTC_write(0x0,0x00); // 秒カウンタ RTC_write(0x1,0x29); // 分カウンタ RTC_write(0x2,0x00); // 時カウンタ RTC_write(0x3,0x01); // 曜日カウンタ RTC_write(0x4,0x14); // 日カウンタ RTC_write(0x5,0x01); // 月カウンタ RTC_write(0x6,0x08); // 年カウンタ RTC_write(0x8,0x00); // Alarm_A 分レジスタ RTC_write(0x9,0x00); // Alarm_A 時レジスタ RTC_write(0xA,0x00); // Alarm_A 曜日レジスタ RTC_write(0xB,0x00); // Alarm_B 分レジスタ RTC_write(0xC,0x00); // Alarm_B 時レジスタ RTC_write(0xD,0x00); // Alarm_B 曜日レジスタ RTC_write(0xE,0x20); RTC_write(0xF,0x30); } void RTC_write(unsigned char address,unsigned char data) { int i; P9.DDR=0xFF; // SDAを出力 RTC_SDA=0; for (i=0; i<5; i++); RTC_SCL=0; for (i=0; i<5; i++); // スタートコンディションのつもり RTC_1write(0x64); RTC_1write(((address & 0x0F) << 4) & 0xF0); RTC_1write(data); P9.DDR=0xFF; // SDAを出力 RTC_SCL=0; RTC_SDA=0; for (i=0; i<10; i++); RTC_SCL=1; for (i=0; i<5; i++); RTC_SDA=1; //ストップコンディションのつもり for (i=0; i<10; i++); } unsigned char RTC_read(unsigned char address) { int i; unsigned char data[15]; P9.DDR=0xFF; // SDAを出力 RTC_SDA=0; for (i=0; i<5; i++); RTC_SCL=0; for (i=0; i<5; i++); // スタートコンディションのつもり RTC_1write(0x65); for (i=0; i<16; i++) { data[((i+15) & 0x0F)]=RTC_1read(); if (i<15) RTC_ACKout(); } P9.DDR=0xFF; // SDAを出力 RTC_SCL=0; RTC_SDA=0; for (i=0; i<10; i++); RTC_SCL=1; for (i=0; i<5; i++); RTC_SDA=1; //ストップコンディションのつもり for (i=0; i<10; i++); return data[address]; } unsigned char RTC_1read(void) { int i,j; unsigned char data=0; P9.DDR=0xFE; // SDAを入力 for (i=0; i<8; i++) { RTC_SCL=1; for (j=0; j<5; j++); data=data << 1; data=data | RTC_SDA; RTC_SCL=0; for (j=0; j<5; j++); } return data; } void RTC_ACKout(void) { int i; P9.DDR=0xFF; // SDAを出力 RTC_SDA=0; for (i=0; i<5; i++); RTC_SCL=1; for (i=0; i<10; i++); RTC_SCL=0; for (i=0; i<5; i++); RTC_SDA=1; } void RTC_1write(unsigned char data) { unsigned int i; P9.DDR=0xFF; // SDAを出力 for (i=0; i<8; i++) { RTC_SDA=((data >> 7) & 1); RTC_clkout(); data=data << 1; } RTC_SDA=1; P9.DDR=0xFE; // SDAを入力 RTC_SCL=1; for (i=0; i<10; i++) // なんかACKを検出できないので、すぐタイムアウト { if (RTC_SDA=0) i=0xfff0; // ACK 待ち } RTC_SCL=0; } void RTC_clkout(void) { int i; //for (i=0; i<5; i++); RTC_SCL=1; for (i=0; i<5; i++); RTC_SCL=0; } void wait(unsigned int a) { unsigned int i,j; for (i=0; i> 7)& 0x01); SLCD_clkout(); data=data << 1; } SLCD_DATA=0; } void SLCD_clkout(void) { int i; for (i=0; i<10; i++); SLCD_SCLK=1; for (i=0; i<10; i++); SLCD_SCLK=0; } void SLCD_reset(void) { unsigned int i; SLCD_INT=1; for (i=0; i<10; i++); SLCD_INT=0; for (i=0; i<10; i++); } void SLCD_init(void) { int i; SLCD_INT=1; for (i=0; i<10; i++); SLCD_E=1; for (i=0; i<10; i++); SLCD_INT=0; for (i=0; i<10; i++); 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_DATA=0; 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_DATA=0; 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_DATA=1; SLCD_clkout(); SLCD_clkout(); SLCD_clkout(); SLCD_DATA=0; SLCD_reset(); SLCD_reset(); SLCD_DATA=1; 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_DATA=0; SLCD_reset(); for (i=0; i<1000; i++); } #ifdef __cplusplus void abort(void) { } #endif