#include #include //PORTB_PULLUPS_ON #include //Delay関数 #include //これ入れるとprintfが使える #include //タイマー割り込み用 #include "Lib_LCD.h" #pragma config OSC=HSPLL, PWRT=OFF #pragma config BOR=ON, BORV=42, WDT=OFF #pragma config STVR=OFF, LVP=OFF, DEBUG=OFF #pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF #pragma config CPD=OFF, WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF #pragma config EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF #define PulseOut LATEbits.LATE1//割り込み一秒確認用出力 #define Sw1 PORTDbits.RD2//スイッチ static char numset1[] = "amahime!"; static char numset2[] = "Push SW1"; static char numset3[] = "CountSec"; static char numtest[10] = "";//数値->文字列変換 unsigned int SecData = 0;//カウント値 unsigned int TimSet0 = 0x676A;//39062/9896 unsigned int gamen = 1;//多面切り替え unsigned int updown =1;//カウントupかdown判定 void gamen1(void); void gamen2(void); //割り込み処理************************************* #pragma interrupt isr1 #pragma code isrcode = 0x08 void isr_direct(void) {_asm goto isr1 _endasm} //---------- 割り込み #pragma code void isr1(void){ if(INTCONbits.TMR0IF){//タイマー0割り込み INTCONbits.TMR0IF = 0;//割り込みリセット WriteTimer0(TimSet0);//タイマー再設定 PulseOut = !PulseOut; if(updown == 0){ if(SecData == 999){ SecData--; updown = 1; }else{ SecData++; } }else{ if(SecData == 0){ SecData++; updown = 0; }else{ SecData--; } } } } //************************************************ //************************************************ void main(void){ int swdata1 = 0;//繰り返し処理が行われないように TRISA = 0x00;//ポートの入出力設定 TRISB = 0x00;//ポートの入出力設定 TRISC = 0x00;//ポートの入出力設定 TRISD = 0x04;//ポートの入出力設定 TRISE = 0x00;//ポートの入出力設定 LATA = 0;//ポートの初期状態 LATB = 0;//ポートの初期状態 LATC = 0;//ポートの初期状態 LATD = 0;//ポートの初期状態 LATE = 0;//ポートの初期状態 PORTB_PULLUPS_ON;//Bポートプルアップ設定 OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_EDGE_FALL & T0_PS_1_256); WriteTimer0(TimSet0);//タイマー値セット PIE1bits.TMR1IE = 1; INTCON = 0xE0; lcd_init();//lcd初期化 while(1){ if(Sw1 == 0){ if(swdata1 == 0){ Delay1KTCYx(12);//チャタリング遅延 if(Sw1 == 0){ gamen = !gamen;//表示画面切り替え lcd_data(0x01,1);//LCD クリアー Delay1KTCYx(16);//lcd clr用遅延 1.6ms swdata1 = 1; } } }else{ swdata1 = 0; } if(gamen == 0){//表示画面選択 gamen1(); }else{ gamen2(); } }//while }//main //************************************************ void gamen1(){//画面1表示 lcd_data(0x80,1);//lcd アドレス指定 lcd_str(numset3);//lcd 文字列出力 sprintf(numtest,"%03d",SecData);//数値文字列変換 lcd_data(0xC0,1);//lcd アドレス指定 lcd_str(numtest);//lcd 文字列出力 } void gamen2(){//画面2表示 lcd_data(0x80,1);//lcd アドレス指定 lcd_str(numset1);//lcd 文字列出力 lcd_data(0xC0,1);//lcd アドレス指定 lcd_str(numset2);//lcd 文字列出力 } //************************************************