- 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ố ớ