پاسخ : سوال: پروژه اسکن صفحه کلید کامپیوتر و نمایش در 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(); }; }
دیدگاه