Nguyên lí quét phím:

Một phần của tài liệu Kỹ thuật lập trình vi điều khiển (Trang 65)

- Phương th c truy n tin ni ti p(Serial Interface): ế

B nh d li uộ ệ

3.5.2.1 Nguyên lí quét phím:

- Vì sao m ch phím đ u theo ma tr n. N u đ đ c t 16 nút b m bình thạ ấ ậ ế ể ọ ừ ấ ường ph iả dùng 16 chân vi đi u khi n. N u đ u theo d ng ma tr n thì ch m t 8 chân ta cũngề ể ế ấ ạ ậ ỉ ấ có th đ c để ọ ược 16 phím b m. ấ

- Có 2 cách quét phím theo c t và theo hàng, tôi ch n cách quét theo c t, quét theoộ ọ ộ hàng các b n có th làm t ong t . ạ ể ư ự

- Bước 1 : Ta đ a chân P1.0 n i v i c t 1 xu ng 0V.R i ta ki m tra giá tr logicư ố ớ ộ ố ồ ể ị c a các chân P1.4,P1.5,P1.6,P1.7.N u phím 1 đủ ế ược b m thì hàng 1_ P1.4 s có giáấ ẽ tr b ng 0. ị ằ

N u phím 2 đế ược b m thì hàng 2_ P1.5 s có giá tr b ng 0. N u phím 3 đấ ẽ ị ằ ế ược b mấ thì

hàng 3_ P1.6 s có giá tr b ng 0. N u phím 4 đẽ ị ằ ế ược b m thì hàng 4_ P1.7 s có giáấ ẽ tr b ng 0. Ta căn c vào đó đ xác đ nh xem phím nào đị ằ ứ ể ị ược b m. ấ

- Bước 2 : Ta đ a chân P1.1 n i v i c t 2 xu ng 0V.R i ta ki m tra giá tr logic c aư ố ớ ộ ố ồ ể ị ủ các chân P1.4,P1.5,P1.6,P1.7.N u phím 5 đế ược b m thì hàng 1_ P1.4 s có giá trấ ẽ ị b ng 0. ằ

N u phím 6 đế ược b m thì hàng 2_ P1.5 s có giá tr b ng 0. N u phím 7 đấ ẽ ị ằ ế ược b mấ thì

hàng 3_ P1.6 s có giá tr b ng 0. N u phím 8 đẽ ị ằ ế ược b m thì hàng 4_ P1.7 s có giáấ ẽ tr b ng 0. Ta căn c vào đó đ xác đ nh xem phím nào đị ằ ứ ể ị ược b m. Tấ ương t ta th cự ự hi n cho các c t còn l i. Ta s dùng câu l nh if đ ki m tra.ệ ộ ạ ẽ ệ ể ể

3.5.2.2 Lập trình:

- T o 1 project m i, copy ph n hi n th các s 0…9 các ch A…Y c a bài trạ ớ ầ ể ị ố ữ ủ ước. R i b sung các hàm sau. Hàm hi n th phím n. ồ ổ ệ ị ấ

void phim_duoc_an(unsigned char phim) { switch(phim)// Tuy vao so lan

{ case 0: { so0(); break;

}// Neu so lan =0 hien so 0 thoat khoi switch case 1: {

so1(); break;

}// Neu so lan =1 hien so 1 thoat khoi switch case 2: { so2(); break; }// .... case 3: { so3(); break; } case 4: {

so4(); break; } case 5: { so5(); break; } case 6: { so6(); break; } case 7: { so7(); break; } case 8: { so8(); break; } case 9: { so9(); break;

}// Neu so lan =9 hien so 9 thoat khoi switch } }

Hàm quét phím:

/*Khai bao 1 mang 4 phan tu nhu sau: quetphim[4]={P0=0xFE,0xFD,0xFB,0xF7}

De dua 0 ra lan luot cac hang phim, khi do neu nut nao đuoc an thi chan vi đieu khien se xuong 0.Chu y fai kiem tra phim khoang 100 lan.*/

unsigned char quetphim[4]={0xFE,0xFD,0xFB,0xF7}; // Dinh nghia so lan quet phim

#define solanquetphim 100 // Cac ban co the thay doi gia tri nay cho phu hop unsigned char quetbanphim(void) {

unsigned char giatribanphim;// Bien de luu gia tri phim an tu 0 den 15 ma hoa 16 phim unsigned char x,y; //Quet 4 hang phim

for(x=0; x<4;x++) {

P1=quetphim[x];// Dua lan luot cac hang xuong 0

for(y=0;y<solanquetphim;y++)// Kiem tra solanquetphim lan

{

if(P1_4==0) giatribanphim=0+4*x;// Gia tri phim tuong ung if(P1_5==0) giatribanphim=1+4*x;// Tuy thuoc vao hang x if(P1_6==0) giatribanphim=2+4*x;// La may ma gia tri cua if(P1_7==0) giatribanphim=3+4*x;// gia tri ban phim tuong ung. } } return(giatribanphim); } Hàm Main. void main(void) { unsigned char i; while(1) { i=quetbanphim(); phim_duoc_an(i); } } 3.6 Ghép n i v i LCDố ớ

Một phần của tài liệu Kỹ thuật lập trình vi điều khiển (Trang 65)

Tải bản đầy đủ (PDF)

(88 trang)