سلام
من توی اسکن صفحه کلید مشکل دارم.
از الگوریتمی استفاده کردم که ابتدا سطرها خروجی با سطح صفر و بقیه ورودی میشن و خونده میشن و بعد برعکس میشه و حاصل با هم OR میشه استفاده کردم ولی توی پروتئوس جواب نمیده.
مثلا توی این برنامه نوشتم که اگر کلید 1 زده شد روی lcd عدد 1 نوشته بشه در غیر اینصورت چیزی نوشته نشه ولی جواب نمیده؟!
ممنون میشم راهنمایی کنید.
http://s4.picofile.com/file/8170628026/Keypad_Scan.rar.html
من توی اسکن صفحه کلید مشکل دارم.
از الگوریتمی استفاده کردم که ابتدا سطرها خروجی با سطح صفر و بقیه ورودی میشن و خونده میشن و بعد برعکس میشه و حاصل با هم OR میشه استفاده کردم ولی توی پروتئوس جواب نمیده.
مثلا توی این برنامه نوشتم که اگر کلید 1 زده شد روی lcd عدد 1 نوشته بشه در غیر اینصورت چیزی نوشته نشه ولی جواب نمیده؟!
ممنون میشم راهنمایی کنید.
کد:
#include <mega32.h> #include <lcd.h> #include <delay.h> #include <stdlib.h> #asm .equ __lcd_port=0x15; #endasm #define No_key_code 1; unsigned char Key_code=1; void main() { char s[2]; unsigned char temp_key_code=1,Old_key_code=1; lcd_init(16); TCCR0|=(1<<WGM01)|(1<<CS00)|(1<<CS01); OCR0=124; TIMSK|=(1<<OCIE0); #asm("sei"); while(1) { temp_key_code=Key_code; if(temp_key_code != Old_key_code) { Old_key_code=temp_key_code; if(temp_key_code != 1) { lcd_gotoxy(0,0); itoa(temp_key_code,s); lcd_puts(s); } } } } interrupt [11] void Timer0_COMPA_isr() { static unsigned char x20=0; unsigned char temp; if(++x20==20) { x20=0; DDRB=0x07; PORTB=0x78; delay_us(5); temp=(PINB&0x78); DDRB=0x78; PORTB=0x07;; delay_us(5); temp|=(PINB&0x07); if(temp==0x76) Key_code=0; else Key_code=No_key_code; } }
دیدگاه