با عرض سلام خدمت دوستان :
در اجرای یک برنامه کی پد دچار مشکل شدیم ... برنامه برای یک کی پد 4*3 است و یک atmega8 .
کی پد به port c میکرو ، که تعداد 7 پین دارد متصل است . برنامه به این صورت است که کاربر تا زمان فشار دادن کلید enter (عدد 11 در برنامه )می تواند رقم وارد کند(تا عدد چند رقمی چاپ شود) ولی مشکل اینجاست که در زمان اجرای برنامه اعداد ستون سوم چاپ نمی شوند . :sad:
4 پین اول portc ورودی هستند که pull up شده اند. کد کامل هم به صورت زیر است و بسیار ممنون
در اجرای یک برنامه کی پد دچار مشکل شدیم ... برنامه برای یک کی پد 4*3 است و یک atmega8 .
کی پد به port c میکرو ، که تعداد 7 پین دارد متصل است . برنامه به این صورت است که کاربر تا زمان فشار دادن کلید enter (عدد 11 در برنامه )می تواند رقم وارد کند(تا عدد چند رقمی چاپ شود) ولی مشکل اینجاست که در زمان اجرای برنامه اعداد ستون سوم چاپ نمی شوند . :sad:
4 پین اول portc ورودی هستند که pull up شده اند. کد کامل هم به صورت زیر است و بسیار ممنون
کد:
unsigned int keys[4][3] = {{1,4,7,10},{2,5,8,0},{3,6,9,11}} ; unsigned char data,h,a[20],c[10] ,temp; int i,power, ent_num=0,num_key[40]; float p = 0, Intense = 0 ; // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In // State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x70; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTD=0x00; DDRD=0xFF; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // LCD module initialization lcd_init(16); while (1) { power=-1; do{ power++; num_key[power] = 0xff ; while(num_key[power] == 0xff) { temp = 0x70; h = 0x80 ; for(i = 0 ; i <3 ; i++) { PORTD = temp ; delay_ms(100) ; data =PIND & 0x0f ; if(data == 0x07) num_key[power] = keys[0][i] ; if(data == 0x0b) num_key[power] = keys[1][i] ; if(data == 0x0d) num_key[power] = keys[2][i] ; if(data == 0x0e) num_key[power] = keys[3][i] ; temp = 255-(h/(pow(2,i+1))) ; } } delay_ms(1000); lcd_clear(); lcd_gotoxy(0,0); sprintf(a,"key[%d]=%d",power,num_key[power]); lcd_puts(a); delay_ms(500); lcd_clear(); }while(num_key[power]!= 10); for(i=0;i<power;i++) { ent_num=ent_num*10; ent_num+=num_key[i]; } //power=-1; lcd_gotoxy(0,0); sprintf(c,"key[%d]=%d",ent_num); lcd_puts(c); delay_ms(500); ent_num=0; ;{ }
دیدگاه