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ự
Code:#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
-
bởi nhathung1101Muốn đặt gì thì cũng phải có thông tin cơ bản. Việc nhỏ thế này mà phải dấu giếm thì người lớn không thèm làm đâu.
Cho bạn 3 ngày, không là sẽ xóa.-
Channel: Đặt hàng
Hôm qua, 22:02 -
-
Trả lời cho Hỏi cách điều chế xungbởi nhathung1101Schmit Trigger là chuẩn với điều kiện rise > 0,8V.
Bí thì dùng vi với tích gì đó, miễn đừng nói phân kẻo chó ở đây lại sủa nhặng.-
Channel: Kỹ thuật điện tử tương tự
Hôm qua, 21:57 -
-
bởi trungautMình cần đặt hàng thiết kế chế tạo mạch nghịch lưu 3 pha để cài đặt các thuật toán điều khiển động cơ FOC, DTC, ... Xin liên hệ trungaut@gmail.com để bàn chi tiết. Xin cảm ơn diễn dàn đăng tin!
-
Channel: Đặt hàng
Hôm qua, 14:27 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi tuyennhanCách ly dây điện vào , bộ nguồn và đèn khỏi khung xe thì có rò thật cũng không lo bị giật .
-
Channel: Điện tử dành cho người mới bắt đầu
21-12-2024, 08:56 -
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
Comment