//#include #include "pic14.h" #include "elso.h" //#include "segment.h" // seven segment display // a // f b // g // e c // d #define segment_a RC6 #define segment_b RC4 #define segment_c RD3 #define segment_d RD2 #define segment_e RD4 #define segment_f RC7 #define segment_g RD5 #define segment_dot RC5 /* Configuration bits: adapt to your setup and needs */ typedef unsigned int word; word at 0x2007 CONFIG = _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _DEBUG_OFF & _CP_OFF; //_WRT_OFF & static void isr(void) interrupt 0 { toggle_segment(1); if (ADIF) { // A/D completed on_digit_dot(); ADIF = 0; } } void init_board(void) { TRISD0 = 0; // configure PORTD0 for output (blinking led) TRISD7 = 0; TRISD6 = 0; TRISD5 = 0; TRISD4 = 0; TRISD3 = 0; TRISD2 = 0; TRISC7 = 0; TRISC6 = 0; TRISC5 = 0; TRISC4 = 0; TRISA = BIN(11111111); //all input AN0 peidg analog //disable all interrupts PIE1 = BIN(00000000); // All peripheral interrupts initially disabled INTCON = BIN(00000000); // Interrupts disabled PIR1 = 0; // Clear peripheral interrupt flags } // ------------------------------------------------ // a simple delay function void delay_ms(long ms) { long i; while (ms--) for (i=0; i < 330; i++) ; } void on_digit_zero(void) { segment_a = 1; segment_b = 1; segment_c = 1; segment_d = 1; segment_e = 1; segment_f = 1; segment_g = 0; segment_dot = 0; } void on_digit_one(void) { segment_a = 1; segment_b = 1; segment_c = 0; segment_d = 0; segment_e = 0; segment_f = 0; segment_g = 0; segment_dot = 0; } void on_digit_two(void) { segment_a = 1; segment_b = 0; segment_c = 1; segment_d = 1; segment_e = 0; segment_f = 1; segment_g = 1; segment_dot = 0; } void on_digit_three(void) { segment_a = 1; segment_b = 1; segment_c = 1; segment_d = 0; segment_e = 0; segment_f = 1; segment_g = 1; segment_dot = 0; } void on_digit_four(void) { segment_a = 1; segment_b = 1; segment_c = 0; segment_d = 0; segment_e = 1; segment_f = 0; segment_g = 1; segment_dot = 0; } void on_digit_five(void) { segment_a = 0; segment_b = 1; segment_c = 1; segment_d = 0; segment_e = 1; segment_f = 1; segment_g = 1; segment_dot = 0; } void on_digit_six(void) { segment_a = 0; segment_b = 1; segment_c = 1; segment_d = 1; segment_e = 1; segment_f = 1; segment_g = 1; segment_dot = 0; } void on_digit_seven(void) { segment_a = 1; segment_b = 1; segment_c = 0; segment_d = 0; segment_e = 0; segment_f = 1; segment_g = 0; segment_dot = 0; } void on_digit_eight(void) { segment_a = 1; segment_b = 1; segment_c = 1; segment_d = 1; segment_e = 1; segment_f = 1; segment_g = 1; segment_dot = 0; } void on_digit_nine(void) { segment_a = 1; segment_b = 1; segment_c = 1; segment_d = 0; segment_e = 1; segment_f = 1; segment_g = 1; segment_dot = 0; } void on_digit_dot(void) { segment_a = 0; segment_b = 0; segment_c = 0; segment_d = 0; segment_e = 0; segment_f = 0; segment_g = 0; segment_dot = 1; } void clear_digit(void) { segment_a = 0; segment_b = 0; segment_c = 0; segment_d = 0; segment_e = 0; segment_f = 0; segment_g = 0; segment_dot = 0; } // turn one segment on void toggle_segment(int on) { if (on) { segment_a = 0; segment_b = 1; segment_c = 1; segment_d = 1; segment_e = 1; segment_f = 1; segment_g = 1; segment_dot = 1; } else { segment_a = 0; segment_b = 0; segment_c = 0; segment_d = 0; segment_e = 0; segment_f = 0; segment_g = 0; segment_dot = 0; } } void count() { on_digit_zero(); delay_ms(250); on_digit_one(); delay_ms(250); on_digit_two(); delay_ms(250); on_digit_three(); delay_ms(250); on_digit_four(); delay_ms(250); on_digit_five(); delay_ms(250); on_digit_six(); delay_ms(250); on_digit_seven(); delay_ms(250); on_digit_eight(); delay_ms(250); on_digit_nine(); delay_ms(250); clear_digit(); delay_ms(250); } void main() { // sit in an endless loop blinking the led init_board(); for (;;) { INTCON = BIN(11000000); //GIE, PEIE PIE1 = BIN(01000000); //ADIE = 1 ADCON0 = BIN(10000001); //Tosc/32, ADON ADCON1 = BIN(00001110); //left justified,an0 ADIF = 0; delay_ms(1); //wait the required aquisition time ADON = 1; //start AD count(); } }