//****************************************************************************************** // dsPIC33FJ256GP710 Sample Program // Project : // Program Name : // Programer : // Create date : Version 1.0 H23.08.05 // History : // Laungage : MPLAB C30 //****************************************************************************************** // Description // 1.OSC 80MHz (10MHz[Crystal]/2*32/2) // 2.I/O Port // (1)Grafic LCD Control Port // PORTD(0-7) : SG12864A(DB0-DB7) // PORTD(8) : SG12864A(D/I) // PORTD(9) : SG12864A(R/W) // PORTD(10) : SG12864A(E) // PORTD(11) : SG12864A(CS1) // PORTD(12) : SG12864A(CS2) // PORTD(13) : SG12864A(RES) // (2)UART Port // PORTF(2)/U1RX : Serial Comunication RX // PORTF(3)/U1TX : Serial Comunication TX // (3)Genaral I/O Port // PORTB(0-15) : // PORTE(0-7) : // //****************************************************************************************** #include "string.h" #include "stdio.h" #include "ctype.h" #include "math.h" #include "stdlib.h" #include "time.h" #include "p33FJ256GP710.h" //_FOSCSEL(FNOSC_FRC & IESO_OFF); //Fast RC oscillator //_FOSCSEL(FNOSC_FRCPLL & IESO_OFF); //Fast RC oscillator w/ divide and PLL _FOSCSEL(FNOSC_PRIPLL & IESO_OFF); //Primary oscillator (XT, HS, EC) w/ PLL //_FOSC(FCKSM_CSECMD & OSCIOFNC_ON & POSCMD_NONE ); //OSC2 Pin:Digital I/O, Primary disabled(Internal OSC) _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT ); //OSC2 Pin:OSC2 is clock O/P, XT oscillator(3-10MHz) _FWDT(FWDTEN_OFF); // Parameter #define PI_P_DI 8 #define PI_P_RW 9 #define PI_P_E 10 #define PI_P_CS1 11 #define PI_P_CS2 12 #define PI_P_RES 13 // #define PI_NORMAL 0 #define PI_FAILER 1 #define PI_LINE 10 #define PI_PAGE 11 #define PI_CS1 12 #define PI_CS2 13 // Define function void Prog01(void); void Init_LCD(void); void LCD_clear(void); char Put_LCD_char(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char); char Set_fnt(unsigned char *, unsigned char); void LCD_dsp(unsigned char , unsigned char , unsigned char ,unsigned char ,unsigned char,unsigned char); void LCD_MOVF_DB(unsigned char); void LCD_ENSIG(void); void LCD_BCF(unsigned char); void LCD_BSF(unsigned char); void NopN(unsigned int); void InitUART(void); void Timer(unsigned int); void SendUART(char); void SendUARTStr(char *); void RecUART(char *); void InitADC(void); void GetADC(int *); int main(void) { // ******************* // 1.Initialize // ******************* // (0)Define OSC 80MHz(10MHz/2*32(M32)/2) CLKDIV = 0b0000000000000000; PLLFBD = 0x001E; //M32(M32-2=>0d30=>0x1E) Use FNOSC_PRIPLL(Crystal) // PLLFBD = 0x0029; //M43(M43-2=>0d41=>0x29) Use FNOSC_FRCPLL(Internal OSC) // (1)Set All Digital Port AD1PCFGL = 0xffff; AD1PCFGH = 0xffff; // (2)Define PORT // 1)PortB TRISB = 0xFFFF; // LATB = 0x0000; PORTB = 0x0000; // 2)PortD TRISD = 0xC000; // LATD = 0x0000; PORTD = 0x0000; // (3)Initialized LCD Init_LCD(); LCD_clear(); // ***************************** // 2.Program Main // ***************************** // (1)Program Prog01(); while(1); } //****************************************************************************************** // Function Name : Prog01 // Title : CS1,CS2を分けて表示する(00から表示を開始するサンプル) // Input : // Output : //****************************************************************************************** void Prog01(void) { // ******************************** // 1.CS1に表示する // ******************************** Put_LCD_char('0', 0, 0, PI_CS1, PI_LINE); Put_LCD_char('1', 0, 1, PI_CS1, PI_PAGE); Put_LCD_char('2', 0, 2, PI_CS1, PI_PAGE); Put_LCD_char('3', 0, 3, PI_CS1, PI_PAGE); Put_LCD_char('4', 0, 4, PI_CS1, PI_PAGE); Put_LCD_char('5', 0, 5, PI_CS1, PI_PAGE); Put_LCD_char('6', 0, 6, PI_CS1, PI_PAGE); Put_LCD_char('7', 0, 7, PI_CS1, PI_PAGE); Put_LCD_char('8', 0, 8, PI_CS1, PI_PAGE); Put_LCD_char('9', 0, 9, PI_CS1, PI_PAGE); Put_LCD_char('ア', 1, 0, PI_CS1, PI_PAGE); Put_LCD_char('イ', 1, 1, PI_CS1, PI_PAGE); Put_LCD_char('ウ', 1, 2, PI_CS1, PI_PAGE); Put_LCD_char('エ', 1, 3, PI_CS1, PI_PAGE); Put_LCD_char('オ', 1, 4, PI_CS1, PI_PAGE); Put_LCD_char('カ', 1, 5, PI_CS1, PI_PAGE); Put_LCD_char('キ', 1, 6, PI_CS1, PI_PAGE); Put_LCD_char('ク', 1, 7, PI_CS1, PI_PAGE); Put_LCD_char('ケ', 1, 8, PI_CS1, PI_PAGE); Put_LCD_char('コ', 1, 9, PI_CS1, PI_PAGE); Put_LCD_char('サ', 2, 0, PI_CS1, PI_PAGE); Put_LCD_char('シ', 2, 1, PI_CS1, PI_PAGE); Put_LCD_char('ス', 2, 2, PI_CS1, PI_PAGE); Put_LCD_char('セ', 2, 3, PI_CS1, PI_PAGE); Put_LCD_char('ソ', 2, 4, PI_CS1, PI_PAGE); Put_LCD_char('タ', 2, 5, PI_CS1, PI_PAGE); Put_LCD_char('チ', 2, 6, PI_CS1, PI_PAGE); Put_LCD_char('ツ', 2, 7, PI_CS1, PI_PAGE); Put_LCD_char('テ', 2, 8, PI_CS1, PI_PAGE); Put_LCD_char('ト', 2, 9, PI_CS1, PI_PAGE); Put_LCD_char('ナ', 3, 0, PI_CS1, PI_PAGE); Put_LCD_char('ニ', 3, 1, PI_CS1, PI_PAGE); Put_LCD_char('ヌ', 3, 2, PI_CS1, PI_PAGE); Put_LCD_char('ネ', 3, 3, PI_CS1, PI_PAGE); Put_LCD_char('ノ', 3, 4, PI_CS1, PI_PAGE); Put_LCD_char('ハ', 3, 5, PI_CS1, PI_PAGE); Put_LCD_char('ヒ', 3, 6, PI_CS1, PI_PAGE); Put_LCD_char('フ', 3, 7, PI_CS1, PI_PAGE); Put_LCD_char('ヘ', 3, 8, PI_CS1, PI_PAGE); Put_LCD_char('ホ', 3, 9, PI_CS1, PI_PAGE); Put_LCD_char('マ', 4, 0, PI_CS1, PI_PAGE); Put_LCD_char('ミ', 4, 1, PI_CS1, PI_PAGE); Put_LCD_char('ム', 4, 2, PI_CS1, PI_PAGE); Put_LCD_char('メ', 4, 3, PI_CS1, PI_PAGE); Put_LCD_char('モ', 4, 4, PI_CS1, PI_PAGE); Put_LCD_char('ヤ', 4, 5, PI_CS1, PI_PAGE); Put_LCD_char('ユ', 4, 6, PI_CS1, PI_PAGE); Put_LCD_char('ヨ', 4, 7, PI_CS1, PI_PAGE); Put_LCD_char('ラ', 4, 8, PI_CS1, PI_PAGE); Put_LCD_char('リ', 4, 9, PI_CS1, PI_PAGE); Put_LCD_char('ル', 5, 0, PI_CS1, PI_PAGE); Put_LCD_char('レ', 5, 1, PI_CS1, PI_PAGE); Put_LCD_char('ロ', 5, 2, PI_CS1, PI_PAGE); Put_LCD_char('ワ', 5, 3, PI_CS1, PI_PAGE); Put_LCD_char('ン', 5, 4, PI_CS1, PI_PAGE); Put_LCD_char('゙', 5, 5, PI_CS1, PI_PAGE); Put_LCD_char('゚', 5, 6, PI_CS1, PI_PAGE); // ******************************** // 2.CS2に表示する // ******************************** Put_LCD_char('A', 0, 0, PI_CS2, PI_PAGE); Put_LCD_char('B', 0, 1, PI_CS2, PI_PAGE); Put_LCD_char('C', 0, 2, PI_CS2, PI_PAGE); Put_LCD_char('D', 0, 3, PI_CS2, PI_PAGE); Put_LCD_char('E', 0, 4, PI_CS2, PI_PAGE); Put_LCD_char('F', 0, 5, PI_CS2, PI_PAGE); Put_LCD_char('G', 0, 6, PI_CS2, PI_PAGE); Put_LCD_char('H', 0, 7, PI_CS2, PI_PAGE); Put_LCD_char('I', 0, 8, PI_CS2, PI_PAGE); Put_LCD_char('J', 0, 9, PI_CS2, PI_PAGE); Put_LCD_char('K', 1, 0, PI_CS2, PI_PAGE); Put_LCD_char('L', 1, 1, PI_CS2, PI_PAGE); Put_LCD_char('M', 1, 2, PI_CS2, PI_PAGE); Put_LCD_char('N', 1, 3, PI_CS2, PI_PAGE); Put_LCD_char('O', 1, 4, PI_CS2, PI_PAGE); Put_LCD_char('P', 1, 5, PI_CS2, PI_PAGE); Put_LCD_char('Q', 1, 6, PI_CS2, PI_PAGE); Put_LCD_char('R', 1, 7, PI_CS2, PI_PAGE); Put_LCD_char('S', 1, 8, PI_CS2, PI_PAGE); Put_LCD_char('T', 1, 9, PI_CS2, PI_PAGE); Put_LCD_char('U', 2, 0, PI_CS2, PI_PAGE); Put_LCD_char('V', 2, 1, PI_CS2, PI_PAGE); Put_LCD_char('W', 2, 2, PI_CS2, PI_PAGE); Put_LCD_char('X', 2, 3, PI_CS2, PI_PAGE); Put_LCD_char('Y', 2, 4, PI_CS2, PI_PAGE); Put_LCD_char('Z', 2, 5, PI_CS2, PI_PAGE); Put_LCD_char('u', 2, 6, PI_CS2, PI_PAGE); Put_LCD_char('d', 2, 7, PI_CS2, PI_PAGE); Put_LCD_char('r', 2, 8, PI_CS2, PI_PAGE); Put_LCD_char('l', 2, 9, PI_CS2, PI_PAGE); Put_LCD_char(' ', 3, 0, PI_CS2, PI_PAGE); Put_LCD_char('a', 3, 1, PI_CS2, PI_PAGE); Put_LCD_char('e', 3, 2, PI_CS2, PI_PAGE); Put_LCD_char('+', 3, 3, PI_CS2, PI_PAGE); Put_LCD_char('-', 3, 4, PI_CS2, PI_PAGE); Put_LCD_char('=', 3, 5, PI_CS2, PI_PAGE); Put_LCD_char(')', 3, 6, PI_CS2, PI_PAGE); Put_LCD_char('(', 3, 7, PI_CS2, PI_PAGE); Put_LCD_char(']', 3, 8, PI_CS2, PI_PAGE); Put_LCD_char('[', 3, 9, PI_CS2, PI_PAGE); Put_LCD_char('>', 4, 0, PI_CS2, PI_PAGE); Put_LCD_char('<', 4, 1, PI_CS2, PI_PAGE); Put_LCD_char('"', 4, 2, PI_CS2, PI_PAGE); Put_LCD_char('!', 4, 3, PI_CS2, PI_PAGE); Put_LCD_char('*', 4, 4, PI_CS2, PI_PAGE); Put_LCD_char('/', 4, 5, PI_CS2, PI_PAGE); } //****************************************************************************************** // Function Name : Init_LCD // Title : Initialized LCD // Input : // Output : //****************************************************************************************** void Init_LCD(void) { unsigned short tmp_s=0; // ************************* // 1.Default Value // ************************* tmp_s = (1< 9 ){ return(PI_FAILER); }else if(in_page > 7){ return(PI_FAILER); } // 3.Put LCD if(in_mode == PI_LINE){ tmp_line = in_page *8; LCD_dsp(tmp_line, 0, 0, in_cs, 0x00, PI_LINE); } clm = in_pos * 6 ; for(lp=0;lp<5;lp++){ LCD_dsp(0, in_page, clm, in_cs, fnt[lp], PI_PAGE); clm++; } // LCD_dsp(0, in_page, clm, in_cs, 0x00, PI_PAGE); return(PI_NORMAL); } //****************************************************************************************** // Function Name : Set_fnt // Title : // Input : // Output : //****************************************************************************************** char Set_fnt(unsigned char fnt[], unsigned char c) { // **************** // 0-9 // **************** if(c=='0'){ fnt[0] = 0b00000000; fnt[1] = 0b00111110; fnt[2] = 0b01000001; fnt[3] = 0b00111110; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c=='1'){ fnt[0] = 0b00000000; fnt[1] = 0b01000010; fnt[2] = 0b01111111; fnt[3] = 0b01000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c=='2'){ fnt[0] = 0b01000010; fnt[1] = 0b01000001; fnt[2] = 0b01100001; fnt[3] = 0b01010001; fnt[4] = 0b01001110; return(PI_NORMAL); } if(c=='3'){ fnt[0] = 0b00100010; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b00110110; return(PI_NORMAL); } if(c=='4'){ fnt[0] = 0b00111100; fnt[1] = 0b00100010; fnt[2] = 0b00100001; fnt[3] = 0b01111111; fnt[4] = 0b00100000; return(PI_NORMAL); } if(c=='5'){ fnt[0] = 0b01001111; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b00110000; return(PI_NORMAL); } if(c=='6'){ fnt[0] = 0b00111110; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b00110000; return(PI_NORMAL); } if(c=='7'){ fnt[0] = 0b00000001; fnt[1] = 0b00000001; fnt[2] = 0b01110001; fnt[3] = 0b00001001; fnt[4] = 0b00000111; return(PI_NORMAL); } if(c=='8'){ fnt[0] = 0b00110110; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b00110110; return(PI_NORMAL); } if(c=='9'){ fnt[0] = 0b00100110; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b00111110; return(PI_NORMAL); } // **************** // A-Z // **************** if(c=='A'){ fnt[0] = 0b01111100; fnt[1] = 0b00010010; fnt[2] = 0b00010001; fnt[3] = 0b00010010; fnt[4] = 0b01111100; return(PI_NORMAL); } if(c=='B'){ fnt[0] = 0b01111111; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b00110110; return(PI_NORMAL); } if(c=='C'){ fnt[0] = 0b00111110; fnt[1] = 0b01000001; fnt[2] = 0b01000001; fnt[3] = 0b01000001; fnt[4] = 0b00100010; return(PI_NORMAL); } if(c=='D'){ fnt[0] = 0b01111111; fnt[1] = 0b01000001; fnt[2] = 0b01000001; fnt[3] = 0b01000001; fnt[4] = 0b00111110; return(PI_NORMAL); } if(c=='E'){ fnt[0] = 0b01111111; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b01001001; return(PI_NORMAL); } if(c=='F'){ fnt[0] = 0b01111111; fnt[1] = 0b00001001; fnt[2] = 0b00001001; fnt[3] = 0b00001001; fnt[4] = 0b00001001; return(PI_NORMAL); } if(c=='G'){ fnt[0] = 0b00111110; fnt[1] = 0b01000001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b01111010; return(PI_NORMAL); } if(c=='H'){ fnt[0] = 0b01111111; fnt[1] = 0b00001000; fnt[2] = 0b00001000; fnt[3] = 0b00001000; fnt[4] = 0b01111111; return(PI_NORMAL); } if(c=='I'){ fnt[0] = 0b00000000; fnt[1] = 0b01000001; fnt[2] = 0b01111111; fnt[3] = 0b01000001; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c=='J'){ fnt[0] = 0b00100000; fnt[1] = 0b01000000; fnt[2] = 0b01000000; fnt[3] = 0b01000000; fnt[4] = 0b00111111; return(PI_NORMAL); } if(c=='K'){ fnt[0] = 0b01111111; fnt[1] = 0b00001000; fnt[2] = 0b00010100; fnt[3] = 0b00100010; fnt[4] = 0b01000001; return(PI_NORMAL); } if(c=='L'){ fnt[0] = 0b01111111; fnt[1] = 0b01000000; fnt[2] = 0b01000000; fnt[3] = 0b01000000; fnt[4] = 0b01000000; return(PI_NORMAL); } if(c=='M'){ fnt[0] = 0b01111111; fnt[1] = 0b00000010; fnt[2] = 0b00011100; fnt[3] = 0b00000010; fnt[4] = 0b01111111; return(PI_NORMAL); } if(c=='N'){ fnt[0] = 0b01111111; fnt[1] = 0b00000010; fnt[2] = 0b00001000; fnt[3] = 0b00100000; fnt[4] = 0b01111111; return(PI_NORMAL); } if(c=='O'){ fnt[0] = 0b00111110; fnt[1] = 0b01000001; fnt[2] = 0b01000001; fnt[3] = 0b01000001; fnt[4] = 0b00111110; return(PI_NORMAL); } if(c=='P'){ fnt[0] = 0b01111111; fnt[1] = 0b00001001; fnt[2] = 0b00001001; fnt[3] = 0b00001001; fnt[4] = 0b00000110; return(PI_NORMAL); } if(c=='Q'){ fnt[0] = 0b00111110; fnt[1] = 0b01000001; fnt[2] = 0b01010001; fnt[3] = 0b00111110; fnt[4] = 0b01000000; return(PI_NORMAL); } if(c=='R'){ fnt[0] = 0b01111111; fnt[1] = 0b00001001; fnt[2] = 0b00011001; fnt[3] = 0b00101001; fnt[4] = 0b01000110; return(PI_NORMAL); } if(c=='S'){ fnt[0] = 0b00100110; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b00110010; return(PI_NORMAL); } if(c=='T'){ fnt[0] = 0b00000001; fnt[1] = 0b00000001; fnt[2] = 0b01111111; fnt[3] = 0b00000001; fnt[4] = 0b00000001; return(PI_NORMAL); } if(c=='U'){ fnt[0] = 0b00111111; fnt[1] = 0b01000000; fnt[2] = 0b01000000; fnt[3] = 0b01000000; fnt[4] = 0b00111111; return(PI_NORMAL); } if(c=='V'){ fnt[0] = 0b00011111; fnt[1] = 0b00100000; fnt[2] = 0b01000000; fnt[3] = 0b00100000; fnt[4] = 0b00011111; return(PI_NORMAL); } if(c=='W'){ fnt[0] = 0b00111111; fnt[1] = 0b01000000; fnt[2] = 0b00111111; fnt[3] = 0b01000000; fnt[4] = 0b00111111; return(PI_NORMAL); } if(c=='X'){ fnt[0] = 0b01000001; fnt[1] = 0b00100010; fnt[2] = 0b00011100; fnt[3] = 0b00100010; fnt[4] = 0b01000001; return(PI_NORMAL); } if(c=='Y'){ fnt[0] = 0b00000001; fnt[1] = 0b00000100; fnt[2] = 0b01110000; fnt[3] = 0b00000100; fnt[4] = 0b00000001; return(PI_NORMAL); } if(c=='Z'){ fnt[0] = 0b01100001; fnt[1] = 0b01010001; fnt[2] = 0b01001001; fnt[3] = 0b01000101; fnt[4] = 0b01000011; return(PI_NORMAL); } // **************** // カナ文字 // **************** if(c==0xb1){ //'ア' fnt[0] = 0b00000001; fnt[1] = 0b01000001; fnt[2] = 0b00111101; fnt[3] = 0b00001001; fnt[4] = 0b00000111; return(PI_NORMAL); } if(c==0xb2){ //'イ' fnt[0] = 0b00100000; fnt[1] = 0b00010000; fnt[2] = 0b01111100; fnt[3] = 0b00000011; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==0xb3){ //'ウ' fnt[0] = 0b00000110; fnt[1] = 0b00000010; fnt[2] = 0b01000011; fnt[3] = 0b00100010; fnt[4] = 0b00011110; return(PI_NORMAL); } if(c==0xb4){ //'エ' fnt[0] = 0b01000000; fnt[1] = 0b01000010; fnt[2] = 0b01111110; fnt[3] = 0b01000010; fnt[4] = 0b01000000; return(PI_NORMAL); } if(c==0xb5){ //'オ' fnt[0] = 0b00100010; fnt[1] = 0b00010010; fnt[2] = 0b00001010; fnt[3] = 0b01111111; fnt[4] = 0b00000010; return(PI_NORMAL); } if(c==0xb6){ //'カ' fnt[0] = 0b01000010; fnt[1] = 0b00111111; fnt[2] = 0b00000010; fnt[3] = 0b01000010; fnt[4] = 0b00111110; return(PI_NORMAL); } if(c==0xb7){ //'キ' fnt[0] = 0b00001010; fnt[1] = 0b00001010; fnt[2] = 0b01111111; fnt[3] = 0b00001010; fnt[4] = 0b00001010; return(PI_NORMAL); } if(c==0xb8){ //'ク' fnt[0] = 0b00000100; fnt[1] = 0b00000011; fnt[2] = 0b01000001; fnt[3] = 0b00100001; fnt[4] = 0b00011111; return(PI_NORMAL); } if(c==0xb9){ //'ケ' fnt[0] = 0b00001000; fnt[1] = 0b00000111; fnt[2] = 0b01000010; fnt[3] = 0b00111110; fnt[4] = 0b00000010; return(PI_NORMAL); } if(c==0xba){ //'コ' fnt[0] = 0b01000010; fnt[1] = 0b01000010; fnt[2] = 0b01000010; fnt[3] = 0b01000010; fnt[4] = 0b01111110; return(PI_NORMAL); } if(c==0xbb){ //'サ' fnt[0] = 0b00000010; fnt[1] = 0b00001111; fnt[2] = 0b01000010; fnt[3] = 0b00111111; fnt[4] = 0b00000010; return(PI_NORMAL); } if(c==0xbc){ //'シ' fnt[0] = 0b00001010; fnt[1] = 0b00010100; fnt[2] = 0b00000000; fnt[3] = 0b01000000; fnt[4] = 0b00111110; return(PI_NORMAL); } if(c==0xbd){ //'ス' fnt[0] = 0b01000010; fnt[1] = 0b00100010; fnt[2] = 0b00011010; fnt[3] = 0b00100110; fnt[4] = 0b01000010; return(PI_NORMAL); } if(c==0xbe){ //'セ' fnt[0] = 0b00000100; fnt[1] = 0b01111111; fnt[2] = 0b01000100; fnt[3] = 0b01000100; fnt[4] = 0b01011100; return(PI_NORMAL); } if(c==0xbf){ //'ソ' fnt[0] = 0b00000010; fnt[1] = 0b00000100; fnt[2] = 0b01000000; fnt[3] = 0b00100000; fnt[4] = 0b00011110; return(PI_NORMAL); } if(c==0xc0){ //'タ' fnt[0] = 0b00001000; fnt[1] = 0b00000110; fnt[2] = 0b01001001; fnt[3] = 0b00100001; fnt[4] = 0b00011111; return(PI_NORMAL); } if(c==0xc1){ //'チ' fnt[0] = 0b00001000; fnt[1] = 0b01001010; fnt[2] = 0b00111111; fnt[3] = 0b00001001; fnt[4] = 0b00001000; return(PI_NORMAL); } if(c==0xc2){ //'ツ' fnt[0] = 0b00000100; fnt[1] = 0b00001000; fnt[2] = 0b00000100; fnt[3] = 0b01001000; fnt[4] = 0b00111110; return(PI_NORMAL); } if(c==0xc3){ //'テ' fnt[0] = 0b00000100; fnt[1] = 0b01000101; fnt[2] = 0b00111101; fnt[3] = 0b00000101; fnt[4] = 0b00000100; return(PI_NORMAL); } if(c==0xc4){ //'ト' fnt[0] = 0b00000000; fnt[1] = 0b01111111; fnt[2] = 0b00001000; fnt[3] = 0b00010000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==0xc5){ //'ナ' fnt[0] = 0b00000100; fnt[1] = 0b00000100; fnt[2] = 0b01000100; fnt[3] = 0b00111111; fnt[4] = 0b00000100; return(PI_NORMAL); } if(c==0xc6){ //'ニ' fnt[0] = 0b01000000; fnt[1] = 0b01000010; fnt[2] = 0b01000010; fnt[3] = 0b01000010; fnt[4] = 0b01000000; return(PI_NORMAL); } if(c==0xc7){ //'ヌ' fnt[0] = 0b01000010; fnt[1] = 0b00101010; fnt[2] = 0b00010010; fnt[3] = 0b00101010; fnt[4] = 0b01000110; return(PI_NORMAL); } if(c==0xc8){ //'ネ' fnt[0] = 0b00100010; fnt[1] = 0b00010010; fnt[2] = 0b01111011; fnt[3] = 0b00010110; fnt[4] = 0b00100010; return(PI_NORMAL); } if(c==0xc9){ //'ノ' fnt[0] = 0b00000000; fnt[1] = 0b00000000; fnt[2] = 0b01000000; fnt[3] = 0b00111111; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==0xca){ //'ハ' fnt[0] = 0b01100000; fnt[1] = 0b00011110; fnt[2] = 0b00000000; fnt[3] = 0b00011110; fnt[4] = 0b01100000; return(PI_NORMAL); } if(c==0xcb){ //'ヒ' fnt[0] = 0b00111110; fnt[1] = 0b01001000; fnt[2] = 0b01001000; fnt[3] = 0b01001000; fnt[4] = 0b01001000; return(PI_NORMAL); } if(c==0xcc){ //'フ' fnt[0] = 0b00000010; fnt[1] = 0b00000010; fnt[2] = 0b01000010; fnt[3] = 0b01000010; fnt[4] = 0b00111110; return(PI_NORMAL); } if(c==0xcd){ //'ヘ' fnt[0] = 0b00001000; fnt[1] = 0b00000100; fnt[2] = 0b00000100; fnt[3] = 0b00001000; fnt[4] = 0b00010000; return(PI_NORMAL); } if(c==0xce){ //'ホ' fnt[0] = 0b00110010; fnt[1] = 0b00000010; fnt[2] = 0b01111111; fnt[3] = 0b00000010; fnt[4] = 0b00110010; return(PI_NORMAL); } if(c==0xcf){ //'マ' fnt[0] = 0b00000010; fnt[1] = 0b00001010; fnt[2] = 0b00010010; fnt[3] = 0b00101010; fnt[4] = 0b01000110; return(PI_NORMAL); } if(c==0xd0){ //'ミ' fnt[0] = 0b00000000; fnt[1] = 0b01001001; fnt[2] = 0b01001001; fnt[3] = 0b01001001; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==0xd1){ //'ム' fnt[0] = 0b01110000; fnt[1] = 0b01001111; fnt[2] = 0b01000000; fnt[3] = 0b00110000; fnt[4] = 0b01000000; return(PI_NORMAL); } if(c==0xd2){ //'メ' fnt[0] = 0b01000000; fnt[1] = 0b00101000; fnt[2] = 0b00011111; fnt[3] = 0b00100000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==0xd3){ //'モ' fnt[0] = 0b00001010; fnt[1] = 0b01111110; fnt[2] = 0b01001010; fnt[3] = 0b01001010; fnt[4] = 0b01001010; return(PI_NORMAL); } if(c==0xd4){ //'ヤ' fnt[0] = 0b00000100; fnt[1] = 0b01111111; fnt[2] = 0b00000100; fnt[3] = 0b00010100; fnt[4] = 0b00001100; return(PI_NORMAL); } if(c==0xd5){ //'ユ' fnt[0] = 0b01000000; fnt[1] = 0b01000100; fnt[2] = 0b01000100; fnt[3] = 0b01111100; fnt[4] = 0b01000000; return(PI_NORMAL); } if(c==0xd6){ //'ヨ' fnt[0] = 0b00000000; fnt[1] = 0b01010100; fnt[2] = 0b01010100; fnt[3] = 0b01111100; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==0xd7){ //'ラ' fnt[0] = 0b00000100; fnt[1] = 0b00000101; fnt[2] = 0b01000101; fnt[3] = 0b01000101; fnt[4] = 0b00111100; return(PI_NORMAL); } if(c==0xd8){ //'リ' fnt[0] = 0b00000000; fnt[1] = 0b00001111; fnt[2] = 0b00000000; fnt[3] = 0b01000000; fnt[4] = 0b00111111; return(PI_NORMAL); } if(c==0xd9){ //'ル' fnt[0] = 0b01111111; fnt[1] = 0b00000000; fnt[2] = 0b01111111; fnt[3] = 0b01000000; fnt[4] = 0b00100000; return(PI_NORMAL); } if(c==0xda){ //'レ' fnt[0] = 0b00000000; fnt[1] = 0b01111111; fnt[2] = 0b01000000; fnt[3] = 0b01000000; fnt[4] = 0b00100000; return(PI_NORMAL); } if(c==0xdb){ //'ロ' fnt[0] = 0b00000000; fnt[1] = 0b01111110; fnt[2] = 0b01000010; fnt[3] = 0b01000010; fnt[4] = 0b01111110; return(PI_NORMAL); } if(c==0xdc){ //'ワ' fnt[0] = 0b00000000; fnt[1] = 0b00001110; fnt[2] = 0b00000010; fnt[3] = 0b01000010; fnt[4] = 0b00111110; return(PI_NORMAL); } if(c==0xdd){ //'ン' fnt[0] = 0b00000010; fnt[1] = 0b00000100; fnt[2] = 0b01000000; fnt[3] = 0b00110000; fnt[4] = 0b00001110; return(PI_NORMAL); } if(c==0xde){ //'゙' fnt[0] = 0b00000111; fnt[1] = 0b00000000; fnt[2] = 0b00000111; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==0xdf){ //'゚' fnt[0] = 0b00000111; fnt[1] = 0b00000101; fnt[2] = 0b00000111; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } // **************** // ELSE // **************** if(c==' '){ fnt[0] = 0b00000000; fnt[1] = 0b00000000; fnt[2] = 0b00000000; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c=='u'){ fnt[0] = 0b00000100; fnt[1] = 0b00000010; fnt[2] = 0b01111111; fnt[3] = 0b00000010; fnt[4] = 0b00000100; return(PI_NORMAL); } if(c=='d'){ fnt[0] = 0b00010000; fnt[1] = 0b00100000; fnt[2] = 0b01111111; fnt[3] = 0b00100000; fnt[4] = 0b00010000; return(PI_NORMAL); } if(c=='r'){ fnt[0] = 0b00001000; fnt[1] = 0b01001001; fnt[2] = 0b00101010; fnt[3] = 0b00011100; fnt[4] = 0b00001000; return(PI_NORMAL); } if(c=='l'){ fnt[0] = 0b00001000; fnt[1] = 0b00011100; fnt[2] = 0b00101010; fnt[3] = 0b01001001; fnt[4] = 0b00001000; return(PI_NORMAL); } if(c=='a'){ fnt[0] = 0b01111111; fnt[1] = 0b01111111; fnt[2] = 0b01111111; fnt[3] = 0b01111111; fnt[4] = 0b01111111; return(PI_NORMAL); } if(c=='+'){ fnt[0] = 0b00001000; fnt[1] = 0b00001000; fnt[2] = 0b01111111; fnt[3] = 0b00001000; fnt[4] = 0b00001000; return(PI_NORMAL); } if(c=='-'){ fnt[0] = 0b00001000; fnt[1] = 0b00001000; fnt[2] = 0b00001000; fnt[3] = 0b00001000; fnt[4] = 0b00001000; return(PI_NORMAL); } if(c=='='){ fnt[0] = 0b00010100; fnt[1] = 0b00010100; fnt[2] = 0b00010100; fnt[3] = 0b00010100; fnt[4] = 0b00010100; return(PI_NORMAL); } if(c==')'){ fnt[0] = 0b00000000; fnt[1] = 0b00000000; fnt[2] = 0b00000000; fnt[3] = 0b01000001; fnt[4] = 0b00111110; return(PI_NORMAL); } if(c=='('){ fnt[0] = 0b00111110; fnt[1] = 0b01000001; fnt[2] = 0b00000000; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==']'){ fnt[0] = 0b00000000; fnt[1] = 0b00000000; fnt[2] = 0b00000000; fnt[3] = 0b01000001; fnt[4] = 0b01111111; return(PI_NORMAL); } if(c=='['){ fnt[0] = 0b01111111; fnt[1] = 0b01000001; fnt[2] = 0b00000000; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c=='>'){ fnt[0] = 0b00000000; fnt[1] = 0b01000001; fnt[2] = 0b00100010; fnt[3] = 0b00010100; fnt[4] = 0b00001000; return(PI_NORMAL); } if(c=='['){ fnt[0] = 0b00001000; fnt[1] = 0b00010100; fnt[2] = 0b00100010; fnt[3] = 0b01000001; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c=='*'){ fnt[0] = 0b00100010; fnt[1] = 0b00010100; fnt[2] = 0b00001000; fnt[3] = 0b00010100; fnt[4] = 0b00100010; return(PI_NORMAL); } if(c=='/'){ fnt[0] = 0b01000000; fnt[1] = 0b01100000; fnt[2] = 0b00011000; fnt[3] = 0b00000110; fnt[4] = 0b00000001; return(PI_NORMAL); } if(c=='"'){ fnt[0] = 0b00000000; fnt[1] = 0b00000111; fnt[2] = 0b00000000; fnt[3] = 0b00000111; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c=='!'){ fnt[0] = 0b00000000; fnt[1] = 0b00000000; fnt[2] = 0b11011111; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==','){ fnt[0] = 0b00000000; fnt[1] = 0b01000000; fnt[2] = 0b00110000; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c=='.'){ fnt[0] = 0b00000000; fnt[1] = 0b00000000; fnt[2] = 0b01100000; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==':'){ fnt[0] = 0b00000000; fnt[1] = 0b00000000; fnt[2] = 0b00110110; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } if(c==';'){ fnt[0] = 0b00000000; fnt[1] = 0b01000000; fnt[2] = 0b00110110; fnt[3] = 0b00000000; fnt[4] = 0b00000000; return(PI_NORMAL); } // ELSE fnt[0] = 0b00000110; fnt[1] = 0b00001001; fnt[2] = 0b01110001; fnt[3] = 0b00000001; fnt[4] = 0b00000010; return(PI_FAILER); } //****************************************************************************************** // Function Name : LCD_dsp // Title : // Input : // Output : //****************************************************************************************** void LCD_dsp(unsigned char in_line, unsigned char in_page, unsigned char in_clm, unsigned char in_cs, unsigned char in_dat, unsigned char in_mode) { unsigned char tmp_c; // ************************* // 0.Initialize // ************************* if(in_cs == PI_CS1){ LCD_BSF(PI_P_CS1); LCD_BCF(PI_P_CS2); }else{ LCD_BCF(PI_P_CS1); LCD_BSF(PI_P_CS2); } // ************************* // 1.Display ON // ************************* // (1)Set data LCD_BCF(PI_P_RW); LCD_BCF(PI_P_DI); LCD_MOVF_DB((unsigned short)0b00111111); // (2)Enable signal LCD_ENSIG(); // ************************* // 2.Display Start Line(0-63) // ************************* if(in_mode == PI_LINE){ // (1)Set data LCD_BCF(PI_P_RW); LCD_BCF(PI_P_DI); tmp_c = 0b11000000 | in_line; LCD_MOVF_DB(tmp_c); // (2)Enable signal LCD_ENSIG(); } // ************************* // 3.Page Adress set(0-7) // ************************* if(in_mode == PI_PAGE){ // (1)Set data LCD_BCF(PI_P_RW); LCD_BCF(PI_P_DI); tmp_c = 0b10111000 | (in_page & 0b00000111 ); LCD_MOVF_DB(tmp_c); // (2)Enable signal LCD_ENSIG(); } // ************************* // 4.Set Colmn Adress(0-63) // ************************* // (1)Set data LCD_BCF(PI_P_RW); LCD_BCF(PI_P_DI); tmp_c = 0b01000000 | (in_clm & 0b00111111 ); LCD_MOVF_DB(tmp_c); // (2)Enable signal LCD_ENSIG(); // ************************* // 5.Status Read // ************************* // ************************* // 6.Write Display Data // ************************* // (1)Set data LCD_BCF(PI_P_RW); LCD_BSF(PI_P_DI); LCD_MOVF_DB(in_dat); // (2)Enable signal LCD_ENSIG(); LCD_MOVF_DB((unsigned short)0b00111111); LCD_BCF(PI_P_DI); // ************************* // 7.Read Display Data // ************************* } //****************************************************************************************** // Function Name : LCD_MOVF_DB // Title : // Input : // Output : //****************************************************************************************** void LCD_MOVF_DB(unsigned char dat) { unsigned short tmp_s; tmp_s = PORTD & 0xFF00; tmp_s = tmp_s | dat ; PORTD = tmp_s; } //****************************************************************************************** // Function Name : LCD_ENSIG // Title : Enable Signal // Input : // Output : //****************************************************************************************** void LCD_ENSIG(void) { NopN(1); //450[nS]< // LCD_BCF(PI_P_E); NopN(1); //450[nS]< // LCD_BSF(PI_P_E); NopN(1); //450[nS]< } //****************************************************************************************** // Function Name : LCD_BCF // Title : BSF // Input : // Output : //****************************************************************************************** void LCD_BCF(unsigned char pos) { PORTD = PORTD & ~(1 << pos); } //****************************************************************************************** // Function Name : LCD_BSF // Title : BSF Control // Input : // Output : //****************************************************************************************** void LCD_BSF(unsigned char pos) { PORTD = PORTD | (1 << pos); } //****************************************************************************************** // Function Name : NopN // Title : // Input : // Output : // Description : OSC:80MHz ==> 80MHz / 2(PIC) * 40 ==> 1MHz(1μS) / n < //****************************************************************************************** void NopN(unsigned int n) { unsigned int lp,lp1; for(lp=0;lp) AD1PCFGLbits.PCFG0 = 0; //PCFG(15-0) 1:Digital mode, 0:Analog mode AD1PCFGLbits.PCFG1 = 1; AD1PCFGLbits.PCFG2 = 1; AD1PCFGLbits.PCFG3 = 1; AD1PCFGLbits.PCFG4 = 1; AD1PCFGLbits.PCFG5 = 1; AD1PCFGLbits.PCFG6 = 1; AD1PCFGLbits.PCFG7 = 1; AD1PCFGLbits.PCFG8 = 1; AD1PCFGLbits.PCFG9 = 1; AD1PCFGLbits.PCFG10 = 1; AD1PCFGLbits.PCFG11 = 1; AD1PCFGLbits.PCFG12 = 1; AD1PCFGLbits.PCFG13 = 1; AD1PCFGLbits.PCFG14 = 1; AD1PCFGLbits.PCFG15 = 1; // AD1CHS0bits.CH0SA0 = 0; //Channel 0 positive input is AN0 AD1CHS0bits.CH0SA1 = 0; //Channel 0 positive input is AN0 AD1CHS0bits.CH0SA2 = 0; //Channel 0 positive input is AN0 AD1CHS0bits.CH0SA3 = 0; //Channel 0 positive input is AN0 // AD1CHS0bits.CH0NB = 0; //Channel 0 negative input is VREF // AD1CHS123bits.CH123NA0 = 0; //CH1, CH2, CH3 negative input is VREF- AD1CHS123bits.CH123NA1 = 0; //CH1, CH2, CH3 negative input is VREF- AD1CHS123bits.CH123SA = 0; //0 = CH1 positive input is AN0, CH2 positive input is AN1, CH3 positive input is AN2 // AD1CSSH = 0x00; //ADC1 PORT CONFIGURATION REGISTER HIGH AD1CSSL = 0x01; //ADC1 PORT CONFIGURATION REGISTER LOW // b) Select voltage reference source to match expected range on analog inputs(AD1CON2<15:13>) AD1CON2bits.VCFG = 0; //VR+:AVDD , VR-:AVSS // c) Select the analog conversion clock to match desired data rate with processor clock (AD1CON3<7:0>) AD1CON3bits.ADCS = 0; //TCY/2 // d) Select the appropriate sample/conversion sequence (AD1CON1<7:5> and AD1CON3<12:8>) AD1CON1bits.SSRC = 0x7;//Internal counter ends sampling and starts conversion (auto-convert) AD1CON3bits.SAMC = 31; //31 TAD AD1CON3bits.ADCS = 0b111111; //ADC Conversion Clock Select bits (TCY (ADCS<7:0> + 1) = 64 TCY = TAD) // e) Select how conversion results are presented in the buffer (AD1CON1<9:8>) AD1CON1bits.FORM = 0; //Integer (0000 00dd dddd dddd) // e) 10-bit or 12-bit Operation Mode bit (AD1CON1<10>) AD1CON1bits.AD12B = 1; //1 = 12-bit, 1-channel ADC operation // AD1CON1bits.AD12B = 0; //0 = 10-bit, 4-channel ADC operation // f) Select interrupt rate (AD1CON2<5:2>) AD1CON2bits.SMPI = 0; //Interrupts at the completion of conversion for each sample/convert sequence // g) Turn on A/D module (AD1CON1<15>) AD1CON1bits.ADON = 1; // Turn on the A/D converter // ******************************* // 2. Configure A/D interrupt (if required) // ******************************* // a) Clear the AD1IF bit // IFS0bits.AD1IF = 0; // Clear the A/D interrupt flag bit // b) Select A/D interrupt priority // IEC0bits.AD1IE = 1; // Enable A/D interrupt } //****************************************************************************************** // Function Name : GetADC // Title : Get A/D Converter Value // Input : // Output : //****************************************************************************************** void GetADC(int *dat) { AD1CON1bits.SAMP=1; IFS0bits.AD1IF = 0; while(IFS0bits.AD1IF==0); *dat = (unsigned int)ADC1BUF0; }