سلام
باید یک عدد دو رقمی را از ورودی کی پد 3 در 4 اسکن کرده و بر روی یک سون سگمنت 2 کارکتری نمایش بدیم.
تا حدیش رو خودم نوشتم
که اعداد 0 تا 9 رو بتونه چاپ کنه
ولی نمیدونم چطوری باید اعداد چند رقمی رو از ورودی بگیرم !
باید یک عدد دو رقمی را از ورودی کی پد 3 در 4 اسکن کرده و بر روی یک سون سگمنت 2 کارکتری نمایش بدیم.
تا حدیش رو خودم نوشتم
که اعداد 0 تا 9 رو بتونه چاپ کنه
ولی نمیدونم چطوری باید اعداد چند رقمی رو از ورودی بگیرم !
کد:
#include <mega16.h> #include <delay.h> #define KEYPAD A //KEYPAD IS ATTACHED ON PORTA #define KEYPAD_PORT PORTA #define KEYPAD_DDR DDRA #define KEYPAD_PIN PINA #define p1 PORTD.0 #define p2 PORTD.1 char n[10] = {0b11000000,0b11111001,0b10100100, 0b10110000,0b10011001,0b10010010,0b10000010,0b11011000, 0b10000000,0b10010000}; unsigned int key1,key2; unsigned int GetKeyPressed() { unsigned int r,c; KEYPAD_PORT|= 0X0F; for(c=0;c<3;c++) { KEYPAD_DDR&=~(0X7F); KEYPAD_DDR|=(0X40>>c); for(r=0;r<4;r++) { if(!(KEYPAD_PIN & (0X08>>r))) { return (r*3+c); } } } return 0XFF;//Indicate No key pressed } void show(void) { p2 = 1; PORTC = n[key2]; delay_ms(15); p2 = 0 ; p1 = 1; PORTC = n[0]; delay_ms(15); p1 = 0 ; } void main() { DDRC = 0xFF; DDRD = 0xFF; DDRA = 0x00; key1=0; key2=0; //Now initialize the module while(1) { show(); key1=GetKeyPressed(); //Get the keycode of pressed key switch (key1){ case 10: key1 = 0; key2 = 0; break; case 0: key1 = 0; key2 = 1; break; case 1: key1 = 0; key2 = 2; break; case 2: key1 = 0; key2 = 3; break; case 3: key1 = 0; key2 = 4; break; case 4: key1 = 0; key2 = 5; break; case 5: key1 = 0; key2 = 6; break; case 6: key1 = 0; key2 = 7; break; case 7: key1 = 0; key2 = 8; break; case 8: key1 = 0; key2 = 9; break; } } }
دیدگاه