Quét ma tr ậ n phím 3 x 4 hi ệ n th ị LED 7seg
Viết bởi Administrator
Thứ sáu, 22 Tháng 5 2009 04:11
Muốn học tốt được vi điều khiển thì việc đấu tiên ta nên làm quen những bài tập cơ bản của vi điều
khiển. ở đây là quan trọng IO như :LED, nút nhấn, ma trận....Hôm nay tôi giới thiệu đến các pác 1
thuật toán quét ma trận phím đầu vào. Ở đây là quét ma trận 3x4 với thuật toán quét đơn giản
nhưng mà chưa tối ưu. Giá trị của ma trận phím được hiện thị lên LED 7Seg! Bắt đầu!
Chú ý : Đây là bài thực hành nên tôi không đưa các linh kiện như :ULN2803, A1015
1 ) Cấu tạo của ma trận phím 3x4
Ma trận phím này được cấu tạo bởi : 3 hàng và 4 cột. các hàng và cột được nối với các chân cổng
vào ra của vi điều khiển Psoc CY8C29466. Khi một phím được bấm, nó sẽ nối một hàng và một
cột tương ứng.Như vậy ta sẽ có 12 nút nhấn mà chỉ mất có 7 chân vi điều khiển còn muốn tiếp
kiệm hơn nữa là các pác dùng còn giải mã 3 >> 8 (74138) hay dùng 74ls154.(Cái này cũng không
cần bit đâu vì bài của mình đâu lớn như thế) nên nối trực tiếp vào chân vi điều khiển cho nó nhanh.
Khi nút 0 được nhấn thì nó nối giữa cột 1 hàng 1. CÒn nút 1 được nhấn thì cột 2 và hàng 1 được
nối hay nút 2 được nhấn thì nối giữa cột 3 và hàng 1... cứ như vậy đến nút thứ 12!
Đối với kết cấu của ma trận này chưa được chống nhiễu phím. Nếu muỗn chống nhiễu thì các bạn
thêm con tụ khoảng 104 vào các nút nếu không muốn thì chống nhiễu bằng phần mền cũng được!
2 ) Mạch hiện thị.
Ở mạch này ta lại sử dụng cách quét LED 7. Loại LED này mua ngoài chợ chỉ có 5k thôi! L
oại này là loại Anot chung. Các chân a,b,c,d,.. được nối với nhau và hai chân điều khiển dùng để
điều khiển hiện thị LED.Có nghĩa là muốn cho LED 1 sáng thì ta cấp dòng vào cho chân điều khiển
của LED 1 và tương tự như như LED2.Đối với LED này muốn cho LED sáng thì phải cấp vào các
chân điều khiển mức 1 và các chân a,b,c,..mức 0 (Mã LED phải tính ở mức 0)
Nguyên lý quét LED ở đây tôi đã trình bày ở trong mục quét LED ở trang chủ. Nhưng qua đây tôi
nói qua tại mỗi thời điểm ta chỉ hiện thị được 1 LED nên muốn hiện thị 2 LED mà ta có thể nhìn
thấy thì cần phải quét 2 giá trị này liên tục. Do ta quét với tần số nhanh nên mắt ta không cảm nhận
được là từng cái sáng 1 (Cái này xem điện ảnh họ làm 24h/s). Mình thì cứ hiểu thế thôi. Quét càng
nhanh thì ta sẽ không nhìn thấy các điểm nháy của LED. Nếu không tin các pác có thể cho delay
cao lên sẽ thấy từng LED sáng 1.
3) Sơ đồ nguyên lý:
/* Viet boi : biendt - [email protected]
Dung P2 la cac chan dau vao va ra
+ P20->P22 dat o che do Pull up
+ P24->P27 dat o che do Strong
Dung P0 va P1 (P1_7 and P1_6) de hien thi len 7 Seg
Dung Psoc CY8C29466 */
//----------------------------------------------------------------------------
#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#define hang1 (PRT2DR&0x01)
#define hang2 (PRT2DR&0x02)
#define hang3 (PRT2DR&0x04)
/*-----------------------Ham delay---------------------------------*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<100;i++);
for(j=0;j
}
/*--------------------Ham hien thi LED 7seg----------------------------*/
unsigned char codeled[10]={0x40,0xf9,0x24,0x30,0x99,0x12,0x82,0x78,0x80,0x10};
void hienthi(unsigned int data)
{
unsigned int digit1,digit2;
digit1=data/10;
digit2=data%10;
PRT0DR=codeled[digit1];
PRT1DR=PRT1DR|0x80;
delay(10);
PRT1DR=PRT1DR&0x7f;
{
quetbanphim();
hienthi(giatribp);
}
}