Chủ đề này nghe các bác nhắc tới nhiều mà tìm trong mục AVR lại ko thấy. Em đang cần giao tiếp bàn phím PS2 với AVR 16, các bác có thể chỉ cách nhận được data từ bàn phím ko?
Thông báo
Collapse
No announcement yet.
Giao tiếp AVR với bàn phím PS2
Collapse
X
-
khi nhấn một phím thì PC sẽ phát một mã nhấn phím, nhấn giữ lâu thì mã đó phát liên tục
khi nhả phím sẽ phát mã nhả phím đổng thời phát lại mã của phím đó
đoạn code này sừ dụng ngắt ngoài đẻ nhận data phím
sau đó dung hàm Converkeyboard(unsigned char nDataPS2) để chuyển về mã ký tự
chúc các bạn thành côngCode:#include <MEGA8515.h> #define phim_rong 0xff #define p_DataPS2 PIND.4 unsigned char m_CurselPS2; unsigned char m_DataPS2; bit m_break; bit m_thuong_hoa; unsigned char unshifted[48][2]= { 0x1c,'a', 0x32,'b', 0x21,'c', 0x23,'d', 0x24,'e', 0x2b,'f', 0x34,'g', 0x33,'h', 0x43,'i', 0x3b,'j', 0x42,'k', 0x4b,'l', 0x3a,'m', 0x31,'n', 0x44,'o', 0x4d,'p', 0x15,'q', 0x2d,'r', 0x1b,'s', 0x2c,'t', 0x3c,'u', 0x2a,'v', 0x1d,'w', 0x22,'x', 0x35,'y', 0x1a,'z', 0x45,'0', 0x16,'1', 0x1e,'2', 0x26,'3', 0x25,'4', 0x2e,'5', 0x36,'6', 0x3d,'7', 0x3e,'8', 0x46,'9', 0x0e,'`', 0x4e,'-', 0x55,'=', 0x5d,'\\', 0x54,'[', 0x5b,']', 0x4c,';', 0x52,'\'', 0x41,',', 0x49,'.', 0x4a,'/', 0,0 }; // Shifted characters unsigned char shifted[48][2]= { 0x1c,'A', 0x32,'B', 0x21,'C', 0x23,'D', 0x24,'E', 0x2b,'F', 0x34,'G', 0x33,'H', 0x43,'I', 0x3b,'J', 0x42,'K', 0x4b,'L', 0x3a,'M', 0x31,'N', 0x44,'O', 0x4d,'P', 0x15,'Q', 0x2d,'R', 0x1b,'S', 0x2c,'T', 0x3c,'U', 0x2a,'V', 0x1d,'W', 0x22,'X', 0x35,'Y', 0x1a,'Z', 0x45,')', 0x16,'!', 0x1e,'@', 0x26,'#', 0x25,'$', 0x2e,'%', 0x36,'^', 0x3d,'&', 0x3e,'*', 0x46,'(', 0x0e,'~', 0x4e,'_', 0x55,'+', 0x5d,'|', 0x54,'{', 0x5b,'}', 0x4c,':', 0x52,'"', 0x41,'<', 0x49,'>', 0x4a,'?', 0,0 }; //********************************************************************* //--------------------------------------------------------------------- //********************************************************************* unsigned char Converkeyboard(unsigned char nDataPS2) { unsigned char i; if(nDataPS2 == 0xf0) //ma bao nha phim { m_break = 1; return phim_rong; } if(m_break) //xu ly ma nha phim { if(nDataPS2 == 0x12 || nDataPS2 == 0x59)//neu la ma Shift { m_thuong_hoa = 0; } m_break = 0; return phim_rong; } else { if(nDataPS2 == 0x12 || nDataPS2 == 0x59)//nhan phim Shift { m_thuong_hoa = 1; return phim_rong; } if(nDataPS2 == 0x29) return ' '; if(!m_thuong_hoa) { for(i = 0; unshifted[i][0]!=nDataPS2 && unshifted[i][0]; i++); if (unshifted[i][0] == nDataPS2) return unshifted[i][1]; } else { for(i = 0; unshifted[i][0]!=nDataPS2 && shifted[i][0]; i++); if (unshifted[i][0] == nDataPS2) return shifted[i][1]; } return phim_rong; } } //********************************************************************* //--------------------------------------------------------------------- //********************************************************************* interrupt [EXT_INT0]//su kien ngat ngoai 0 void CK_PS2(void)//ham xu ly ngat ngoai 0 { m_CurselPS2++; if(m_CurselPS2==1) //bit START { if(p_DataPS2)m_CurselPS2=0; //text START } else if(m_CurselPS2>1&&m_CurselPS2<10) { m_DataPS2 = (m_DataPS2 >> 1); //quay trai m_DataPS2 (m_DataPS2.7 = 0) if(p_DataPS2) m_DataPS2 = m_DataPS2 | 0x80; // Store a ’1’ } else if(m_CurselPS2>10) //bit STOP { if(p_DataPS2) { // makytu = Converkeyboard(m_DataPS2); // tuy ban xu ly ma ky tu } m_CurselPS2=0; } //bo qua Parity } void main(void) { //======================================================================== //KHOI TAO NGAT NHGOAI 0,1 MCUCR = 0x02; //NGAT NGOAI 0 CANH XUONG GICR = 0x40; // INT0.6 =[1] CHO PHEP NGAT NGOAI 0; m_CurselPS2=0; DDRD = 0x00; PORTD =0xff; while(1); }Điện thoại:
email:
Bài viết mới nhất
Collapse
-
Trả lời cho Tìm bạn thân quen cũ.bởi mèomướpDạ cháu đọc 1 số bài viết của bác vi... thì nhớ đc bác là 1 cụ già gần 80 tuổi, sức khỏe yếu. Đam mê và làm vc về kỹ thuật điện. Thích thơ ca. Có nhìu bài chia sẻ quý báu cho thế hệ sau. Tuy nhiên già rồi nên khái tính, bảo thủ, nhưng vẫn đáng kính ạ... còn lão nhathung... thì kiểu bố đời
-
Channel: Tâm tình dân kỹ thuật
31-07-2026, 12:52 -
-
bởi lvhnHãng nào tùy thích thôi bác! bây giờ các hãng đều hỗ trợ xem qua máy tính hay điện thoại đều được. Gắn Trước tiên mua về cắm nguồn set ip hết xong hãy lắp lên, cam poe chỉ cần 4 lõi là hoạt động bình thường nên 1 dây kéo cho 2 cam vẫn ok
-
Channel: Tâm tình dân kỹ thuật
30-07-2026, 15:49 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnNhớ không nhầm thì lúc còn đi học có gặp chú 1 lần cf bãi xe Nguyễn Kim, giờ quán cf đó nghỉ bán rồi
-
Channel: Tâm tình dân kỹ thuật
30-07-2026, 15:44 -
-
Trả lời cho Thắc mắc pin 21v ?bởi lvhnCon số đấy biểu thị gần đúng thôi, cái đồng hồ đó có đảm bảo chính xác hay không? pin có cục lên 4v4 vẫn bình thường. Cái gì cũng có sai số trong phạm vi không quá lớn thì không ảnh hưởng gì đâu, bàn ngay ngón ngắn ngón dài mà
-
Channel: Điện tử dành cho người mới bắt đầu
30-07-2026, 15:32 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnThay mấy con transisto nhỏ đầu vào, thường vi sai lỗi hay bị. Khám tổng quát chân các linh kiện xem có bị rỉ sét nhiều không?
-
Channel: Điện thanh
30-07-2026, 15:24 -
-
bởi dinhthuong92Mạch này hiệu suất ra led đạt khoảng 90.7% tại 12V in, 40W out.
-
Channel: Nguồn!
27-07-2026, 10:15 -
-
bởi dinhthuong92Có lẽ nguồn viết bài này chỉ mang tính định tính để nói rằng cần thay đổi tổng trở tải để có Pmax chứ trình bày chưa chi tiết và thấu đáo một cách định lượng. Công thức tổng quát phải có mặt L mới được, và nói là "tổng...
-
Channel: Nguồn!
27-07-2026, 10:09 -

Comment