// PIC16F1827 Configuration Bit Settings // 'C' source line config statements // CONFIG1 #pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled) #pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) #pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled) // CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config PLLEN = OFF // PLL Enable (4x PLL disabled) #pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset) #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include #define _XTAL_FREQ 8000000 //クロック動作周波数を8MHzとして__delay_msを使用する Display7SEG(unsigned short int num); Display7SEG_4DIG(unsigned short int number); int main() { OSCCON = 0b01110100; TRISA = 0b00000000; //ポートAを出力に設定 TRISB = 0b00000000; //ポートBを出力に設定 PORTA = 0b00000000; //ポートAから0を出力 PORTB = 0b00000000; //ポートBから0を出力 while (1) { Display7SEG_4DIG(4321); } } Display7SEG_4DIG(unsigned short int number) { unsigned short int DIG[4]; unsigned short int temp; temp = number; DIG[3] = temp / 1000; temp = number; DIG[2] = (temp - 1000 * DIG[3]) / 100; temp = number; DIG[1] = (temp - 1000 * DIG[3] - 100 * DIG[2]) / 10; temp = number; DIG[0] = temp - 1000 * DIG[3] - 100 * DIG[2] - 10 * DIG[1]; PORTA = 0b11111111; //すべてのLEDを消灯 Display7SEG(DIG[0]); PORTA = 0b11111110; //1桁目を表示 __delay_ms(1); PORTA = 0b11111111; //すべてのLEDを消灯 Display7SEG(DIG[1]); PORTA = 0b11111101; //2桁目を表示 __delay_ms(1); PORTA = 0b11111111; //すべてのLEDを消灯 Display7SEG(DIG[2]); PORTA = 0b11111011; //3桁目を表示 __delay_ms(1); PORTA = 0b11111111; //すべてのLEDを消灯 Display7SEG(DIG[3]); PORTA = 0b11110111; //4桁目を表示 __delay_ms(1); } Display7SEG(unsigned short int num) { switch (num) { case 0: //PORTB = 0b10110111;//0 正論理 PORTB = 0b01001000; //0 負論理 break; case 1: //PORTB = 0b00010100;//1 PORTB = 0b11101011; //1 break; case 2: //PORTB = 0b01110011;//2 PORTB = 0b10001100; //2 break; case 3: //PORTB = 0b01110110;//3 PORTB = 0b10001001; //3 break; case 4: //PORTB = 0b11010100;//4 PORTB = 0b00101011; //4 break; case 5: //PORTB = 0b11100110;//5 PORTB = 0b00011001; //5 break; case 6: //PORTB = 0b11100111;//6 PORTB = 0b00011000; //6 break; case 7: //PORTB = 0b00110100;//7 PORTB = 0b11001011; //7 break; case 8: //PORTB = 0b11110111;//8 PORTB = 0b00001000; //8 break; case 9: //PORTB = 0b11110110;//9 PORTB = 0b00001001; //9 break; } }