پاسخ : سوال: پروژه اسکن صفحه کلید کامپیوتر و نمایش در lcd
تو پروژه "اتصال کیبرد PS/2 به صورت کامل با LCD" که لینکش رو گزاشتی کد هاش مشکل داره میشه بررسی کنی-خاستم درستش کنم نشد :redface:
این پروژه خودمه اگه کسی ببینه مشکلش چیه ممنون میشم. :mrgreen:
تو پروژه "اتصال کیبرد PS/2 به صورت کامل با LCD" که لینکش رو گزاشتی کد هاش مشکل داره میشه بررسی کنی-خاستم درستش کنم نشد :redface:
این پروژه خودمه اگه کسی ببینه مشکلش چیه ممنون میشم. :mrgreen:
کد:
#include <mega16.h>
#include <delay.h>
#asm
.equ __lcd_port=0x18
#endasm
#include <lcd.h>
unsigned char counter=0,data=0,help=0,i;
signed char c=4,r=0;// متغیر های مربوط به سطر و ستون
bit dis=0;
flash unsigned char code_key[]=
{
0x0D,0x15,0x16,0x1A,0x1B,0x1C,0x1D,0x1E,0x21,0x22,0x23,0x24,0x25,0x26,0x29,0x2A,0x2B,
0x2C,0x2D,0x2E,0x31,0x32,0x33,0x34,0x35,0x36,0x3A,0x3B,0x3C,0x3D,0x3E,0x41,0x42,0x43,
0x44,0x45,0x46,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x52,0x54,0x55,0x5A,0x5B,0x5D,0x69,0x6B,
0x6C,0x70,0x71,0x72,0x73,0x74,0x75,0x79,0x7A,0x7B,0x7C,0x7D,0x66,0xf0,0xe0,0x76
};
flash unsigned char key[]=
{
' ','q','!','z','s','a','w','@','c','x','d','e','$','#',' ',
'v','f','t','r','%','n','b','h','g','y','^','m','j','u','&',
'*','<','k','i','o',')','(','>','?','l',':','p','_','"','{',
'=','`','}','|','1','4','7','0','.','2','5','6','8','+','3',
'-','*','9','~','/','`','E'
};
//__________________________________________________________________________
interrupt [EXT_INT0] void vagfe_0()
{
if((counter>0) && (counter<=8))
{
counter--;
help=0;
help|=PIND.1;
help=(help<<counter);
data|=help;
counter++;
}
counter++;
if(counter==11) dis=1;
if(counter>=33) counter=0;
}
//__________________________________________________________________________
void display()
{
for(i=0;i<68;i++) //تعداد خانه های آرایه بالا=134
{
if(code_key[i]==data) // اگه دیتای دریافتی از کیبورد با خانه آی ام آرایه برابر بود
{
c++;//رفتن به ستون بعد برای نمایش مقدار جدید
data=key[i];// ریختن مقدار معادل با کد دریافتی از کیبورد کامپیوتر در متغییر دیتا
lcd_gotoxy(c,r);
lcd_putchar(data);
}
}
dis=0;// غیر فعال کردن نمایش این تابع در تابع اصلی و حلقه بینهایت3
}
//__________________________________________________________________________
void main()
{
DDRD.1=0;
PORTD.1=1;
GICR|=0x40;//فعال کردن وقفه صفر
MCUCR=0x02;// تعیین نحوه تحریک شدن وقفه صفر
MCUCSR=0x00;
GIFR=0x40;// دادن قدرت تصمیم گیری به وقفه صفر
lcd_init(16);
#asm("sei")// فعال کردن وقفه سراسری
lcd_putsf("O_o ~ ^_^");
delay_ms(200);
lcd_clear();
lcd_gotoxy(0,0);
while(1)
{
if(dis==1)display();
};
}






دیدگاه