سلام
من توی اسکن صفحه کلید مشکل دارم.
از الگوریتمی استفاده کردم که ابتدا سطرها خروجی با سطح صفر و بقیه ورودی میشن و خونده میشن و بعد برعکس میشه و حاصل با هم 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;
}
}







دیدگاه