siram kumar
Newbie level 5
i have a code but it was not working, i am using batch file to compiling the C Code and for simulating i am using proteus simulator. I am sending my code please any one can check the code and suggest me how to write a correct code for the PIC18F45k20 controller.
This is My Code...........
This is My Code...........
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 #include "p18f45k20.h" #include "xlcd.h" #include "delays.h" #pragma config FOSC = INTIO67 ,IESO = OFF #pragma config WDTEN = OFF, MCLRE = OFF, LVP = OFF #define COL_0 PORTDbits.RD4 #define COL_1 PORTDbits.RD5 #define COL_2 PORTDbits.RD6 #define COL_3 PORTDbits.RD7 #define ROW_A PORTDbits.RD0 #define ROW_B PORTDbits.RD1 #define ROW_C PORTDbits.RD2 #define ROW_D PORTDbits.RD3 void DelayFor18TCY(void) { Nop();Nop();Nop();Nop(); Nop();Nop();Nop();Nop(); Nop();Nop();Nop();Nop(); } void delay(void) { int i; for(i = 0; i < 5000; i++); } void DelayPORXLCD(void) { Delay1KTCYx(120);//Delay of 15ms //cycles = (TimeDelay * FOSC)/4 //cycles = (15ms * 16MHz)/4 //cycles = 60,000 return; } void DelayXLCD(void) { Delay1KTCYx(20);//Delay of 5ms //cycles = (TimeDelay * FOSC)/4 //cycles = (5ms * 16MHz)/4 //cycles = 20,000 return; } typedef unsigned char Byte; Byte row,Key_Value; Byte Keypad_Value[4][4] = {'0','1','2','3', '4','5','6','7', '8','9','A','B', 'C','D','E','F'}; Byte Keypad(void); void Lcddisplay_Str(Byte *Str); void main(void) { Byte data[10] = "Keypad"; TRISD = 0b11110000; TRISB = 0b00000000; OSCCONbits.IRCF = 0x03; //configure Lcd OpenXLCD(FOUR_BIT & LINES_5X7); while(BusyXLCD()); //Wait if LCD busy WriteCmdXLCD(SHIFT_DISP_LEFT); //set lcd write left to right while(BusyXLCD()); Lcddisplay_Str(data); row = 0; while(1) { Key_Value = Keypad(); WriteCmdXLCD(0xC0); while(BusyXLCD()); WriteDataXLCD(Key_Value); } } Byte Keypad(void) { COL_0 = COL_1 = COL_2 = COL_3 = 1; delay(); ROW_A = ROW_B = ROW_C = ROW_D = 0; if(!COL_0 || !COL_1 || !COL_2 || !COL_3) { while(1) { ROW_A = 0; ROW_B = 1; ROW_C = 1; ROW_D = 1; if(!COL_0 || !COL_1 || !COL_2 || !COL_3) { row = 0; break; } ROW_A = 1; ROW_B = 0; ROW_C = 1; ROW_D = 1; if(!COL_0 || !COL_1 || !COL_2 || !COL_3) { row = 1; break; } ROW_A = 1; ROW_B = 1; ROW_C = 0; ROW_D = 1; if(!COL_0 || !COL_1 || !COL_2 || !COL_3) { row = 2; break; } ROW_A = 1; ROW_B = 1; ROW_C = 1; ROW_D = 0; if(!COL_0 || !COL_1 || !COL_2 || !COL_3) { row = 3; break; } } if(COL_0 == 0 && COL_1 == 1 && COL_2 == 1 && COL_3 == 1) { return (Keypad_Value[row][0]); } else if(COL_0 == 1 && COL_1 == 0 && COL_2 == 1 && COL_3 == 1) { return (Keypad_Value[row][1]); } else if(COL_0 == 1 && COL_1 == 1 && COL_2 == 0 && COL_3 == 1) { return (Keypad_Value[row][2]); } else if(COL_0 == 1 && COL_1 == 1 && COL_2 == 1 && COL_3 == 0) { return (Keypad_Value[row][3]); } else { //do noting } } //return 0xFF; } void Lcddisplay_Str(Byte *Str) { while(*Str) { WriteDataXLCD(*Str++); delay(); } }
Last edited by a moderator: