Danh mục

Cách dùng bàn phím ma trận 4x4(for AVR)

Số trang: 5      Loại file: doc      Dung lượng: 4.00 KB      Lượt xem: 15      Lượt tải: 0    
10.10.2023

Hỗ trợ phí lưu trữ khi tải xuống: miễn phí Tải xuống file đầy đủ (5 trang) 0

Báo xấu

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Khi bạn nhấn một phím và giữ bất kì bao lâu cũng được, khi nhả phím ra nó mớithực hiện.Kếtnối phần cứng bàn phím ma trận 4x4, 4 chân nối vào 4 bit thấp của portB,4 chân nối vào 4 bit cao của portB.Phuơngpháp quét phím cấp điện lần lượt 4 chân bít thấp, kiểm tra sự thay đổiở 4 chân bit cao. khi nào có sự thay đổi nhảy đến phần chống dội phím, sau đóxử lí sự kiện có phím nhấn.
Nội dung trích xuất từ tài liệu:
Cách dùng bàn phím ma trận 4x4(for AVR)Cáchdùngbànphímmatrận4x4(forAVR) Nhữngđiểmkháccơbảncủaphầncodenàysovớicodevídụđãđưa: Ngắngọnhơn KhôngtốnTimer Chốngrungphímđơngiản,hiệuquả(khôngdùngdelay) Dễđịnhnghĩachocácloạibànphímkhácnhau FileKey4x4.hCode: #ifndef _KEY4X4_H_ #define _KEY4X4_H_ //-----------------------------------------------------------------// // ----- Define Hardware ------// #define KEY4X4_PORT PORTC #define KEY4X4_PIN PINC #define KEY4X4_DDR DDRC unsigned char KeyPad[4][4] = { 7, 8, 9, /, 4, 5, 6, x, 1, 2, 3, -, C, 0, =, +}; /* unsigned char KeyPad[4][4] = { 1, 2, 3, A, 4, 5, 6, B, 7, 8, 9, C, #, 0, *, D}; // ----- Define Firmware ------// */ #endif /* HARDWARE CONNECTION 1 PD0 -------0----1----2----3 | | | | 2 PD1 -------4----5----6----7 | | | | 3 PD2 -------8----9----10---11 | | | | 4 PD3 -------12---13---14---15 R1 | | | | 5 PD4 -~~~~~-| | | | R2 | | | 6 PD5 -~~~~~------| | | R3 | | 7 PD6 -~~~~~-----------| | R1..R4=10k..47k R4 | 8 PD7 -~~~~~----------------| */FileKey4x4.cCode: /***************************************************** Project : Keypad Matrix 4x4 Version : 1.0 Date : 07-11-2007 Author : Nam Company : PYT Chip type : ATmega16 Program type : Application Clock frequency : 12 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #include #include #include key4x4.h //-----------------------------------------------------------------// // Global variables uint8_t key_old_state[4][4]; //------------------------------------------------------------------------------/ / void check_key() { for (uint8_t row=0; row KEY4X4_DDR = 0x0F; // 4 row -> output, 4 col -> input lcd_init(16); // Global enable interrupts sei(); while (1) { check_key(); }; //while }1.ỞphầnHadwareconnection:cácpinsPD4...PD7nhwhìnhvẽlànốiquaR1...R4rồimớivàonútnhấn.CònnếulàpullupthinốivàonútnhấnvànốilênV+.Vậychínhxáclàkiểunào?Tôitìmhiểuhóarathếnày:ĐốivớiAVRdocóRpullupsbêntrongnêndùngphầnmềmcàiđặt,khôngcầnRngoàikéolên...NếucónhưsơđồcủatintintinthìhọgiảithíchlàtránhngắnmạchgiữacáccựccủaIC.CácICkhôngcóRpullupsbêntrongthìphảicóRngoàikéolênV+...2.vềcáinàythìtrongcodevisioncóexamplerồiđấy.vàođómởfilenàymàcoi.cáchviếtkháhay,dùngtimer,mỗilầnchỉquétmộtcột,cóchốngrung,chốngnhiễu,ngoàiracòncóthờigianreleasephímnữa.dùngchotrườnghợpbạncầnnhậnphímnhấnliêntụcthayvìnhấnnhiềulần.tuynhiênđểdễsửdụngvàđiềuchỉnhlinhhoạtthìchắclàcầnsửacáiexpđómộttí.CodeCquétphímchốngdộiphímchoAVRdùngcodevisionlậptrìnhKhibạnnhấnmộtphímvàgiữbấtkìbaolâucũngđược,khinhảphímranómớithựchiện.Kếtnốiphầncứngbànphímmatrận4x4,4chânnốivào4bitthấpcủaportB,4chânnốivào4bitcaocủaportB.Phuơngphápquétphímcấpđiệnlầnlượt4chânbítthấp,kiểmtrasựthayđổiở4chânbitcao.khinàocósựthayđổinhảyđếnphầnchốngdộiphím,sauđóxửlísựkiệncóphímnhấn.Codequétphím:while(1){DDRB=0x0F;PORTB=0;PORTB.0=1;delay_ms(5);if (PINB>15) break;PORTB=0;PORTB.1=1;delay_ms(5);if (PINB>15) break;PORTB=0;PORTB.2=1;delay_ms(5);if (PINB>15) break;PORTB=0;PORTB.3=1;delay_ms(5);if (PINB>15) break;}Code chống dội phímvoid chongdoi(void){ int i;loinhan:;for (i=0;i}break;}}PORTB=0; //reset PORTB} ...

Tài liệu được xem nhiều: