Cái phần này tương đối khó tôi phải mất khá nhiều thời gian đểtìm hiểu nguyên
lý quét mấy con LED 7 vạch này. Đểhiện thịlên LED 7 vạch nếu mà ta muốn
hiện thịsố1234 trên LED 7 vạch mà mỗi con LED 7 vạch nó lại tiêu tốn mất 1
Port của vi điều khiển nhưthếthì lãng phí cho chức năng của 1 vi điều khiển
nhưcon PSoc.Đểkhắc phục điều này thì dùng phương pháp quét LED nhưthế
đối với hiện thị4 chân này ta chỉmất có 12 chân vi điều khiển.
8 trang |
Chia sẻ: maiphuongtt | Lượt xem: 2125 | Lượt tải: 5
Bạn đang xem nội dung tài liệu Quét LED 7_ Đếm 0-9999, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Quét LED 7_ Đếm 0-9999
Nguồn : biendt.biz
Cái phần này tương đối khó tôi phải mất khá nhiều thời gian để tìm hiểu nguyên
lý quét mấy con LED 7 vạch này. Để hiện thị lên LED 7 vạch nếu mà ta muốn
hiện thị số 1234 trên LED 7 vạch mà mỗi con LED 7 vạch nó lại tiêu tốn mất 1
Port của vi điều khiển như thế thì lãng phí cho chức năng của 1 vi điều khiển
như con PSoc.Để khắc phục điều này thì dùng phương pháp quét LED như thế
đối với hiện thị 4 chân này ta chỉ mất có 12 chân vi điều khiển.
1 : Lắp mạch.
Hiện này trên thị trường có loại LED 7 vạch được đóng hộp thành 1 con với ghép
của 4 con LED 7 vạch đơn. Nhưng mà do giá thành mua con đóng hộp này tôi
mua thế nào mà đắt hơn 2 con đôi ghép lại. Nên tôi dùng phương pháp ghép
vào để thành con LED 7 vạch này.
Cấu tạo của nó như sau
Hiện có 2 loại là catot chung và anot chung nhưng ở đây tôi dùng Anot chung.
Con trên nó được chung các thanh LED : a chung a, b chung b...... và nó được
điều khiển bởi các chân Anot như trên nó được điều khiển bởi 4 chân. Khi cấp
nguồn vào các chân abcd... thì lúc này LED chưa sáng. Khi ta cho nguồn vào các
chân điều thì nó sẽ sáng cho vào chân điều khiển nào thì nó sẽ sáng LED tương
ứng với chân điều khiển đó.
Ví dụ : Ta cho 5V vào chân A1 còn nối đất cho chân a thì chỉ có thanh a của LED
số 1 sáng thôi. tương tự như các LED khác cũng thế.
Sơ đồ lắp mạch:
Ở đây tôi dùng Port2 để điều khiển các thanh trên LED 7 thanh còn các
Port1_4,Port1_5,Port1_6,Port1_7 để điều khiển hiện thị lần lượt các LED từ 1
đến 3.Các pác nhớ là lắp chuẩn các chân đấy nhé nếu mà lắp nhầm cái là nó
không hiện thị như mong muốn đâu.
Do quét 4 LED cùng 1 lúc nên dòng qua các LED sẽ yếu nên các LED sẽ sáng
yếu ở đây tôi dùng con A1015 để kích dòng vào cho Các LED và nó được điều
khiển bởi các Port1_4,Port1_5,Port1_6,Port1_7.Ở chân B của mỗi A1015 cho
thêm con trở 1K cho đỡ nóng Transitor
hêm 1 mạch reset cho mạch: dùng 1 công tắc nối với chân số 19 thông qua 1
điện trở 1k và đầu kia được nối lên VCC. Khi công tắc được đóng thì mạch sẽ tự
reset. Còn 1 tụ được nối giữa chân 28 và 14 là để không bị mất nguồn trong
khoảng thời gian ngắn
2 : Nguyên lý hoạt động
Ở đây chúng ta dựa theo nguyên tắc quét ảnh vì mắt chúng ta có hiện tượng lưu
ảnh trên võng mạch nên khi ta quét với tần số nhanh thì mắt chúng ta không có
cảm giác là nó sáng lần lượt các LED mà có cảm giác là nó sáng tất.Đầu tiên ta
phải gửi dữ liệu muốn hiện thị cho LED1 và chân bật chân điều khiển của LED1
đó lên để cho LED1 đó hiện thị. Sau đó ta lại gửi tiếp dữ liệu muốn hiện thị LED
2 và cũng phải bật chân điều khiển của LED2 đó. Để cho số tiếp theo hiện thị lên
LED2. Cứ như thế cho LED 3 và LED4. Quá trình này được diễn ra nhanh với tần
số cao. Nên ta ko thể có cảm giác là các LED sáng lần lượt. Để kiểm tra nguyên
lý của nó các pác hãy tăng Delay lên để thấy rõ quét LED của nó!
Ví dụ: Để hiện thị được số 1234 trên 4 con LED 7 vạch. Đầu tiên ta phải cho đèn
1 sáng sau đó đèn 2 sáng sau đó đến đèn 3 4. Ta cho các LED này hiện thị lần
lượt và được lặp đi lặp lại với tần sô cao nên ta sẽ được số 1234 hiện thị trên
LED
3 : Lập trình:
Dùng P2 và P1 ở chế độ Strong
//----------------------------------------------------------------------------
// Quet 4 LED 7 vach
// Dem so tu 0-9999
// Viet boi : biendt - biendt.biendt@gmail.com
// Dung Port2 noi vao lan luot tu a,b...g
// Port1_4 den Port1_7 noi lan luot LED4-LED1
// C main line
//----------------------------------------------------------------------------
#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
/* Dinh nghia cac ma hien thi so tu 0 den 9*/
#define S0 0x40 //So 0
#define S1 0xF9
#define S2 0x24
#define S3 0x30
#define S4 0x19
#define S5 0x12
#define S6 0x02
#define S7 0xF8
#define S8 0x80
#define S9 0x10 // So 9
/* Nhap 1 mang ki tu gom 10 phan tu bao gom cac so hien thi*/
unsigned char LED_code[10]={S0,S1,S2,S3,S4,S5,S6,S7,S8,S9};
/* Ham tao tre thoi gian*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<10;i++)
for(j=0;j
}
void hienthiso(unsigned char digit1,unsigned char digit2,
unsigned char digit3, unsigned char digit4)
{
/* Hien thi so thu nhat*/
PRT2DR=LED_code[digit1];
PRT1DR=PRT1DR&0xef;
delay(1);
PRT1DR=PRT1DR|0x10;
/* Hien thi so thu hai*/
PRT2DR=LED_code[digit2];
PRT1DR=PRT1DR&0xdf;
delay(1);
PRT1DR=PRT1DR|0x20;
/* Hien thi so thu ba*/
PRT2DR=LED_code[digit3];
PRT1DR=PRT1DR&0xbf;
delay(1);
PRT1DR=PRT1DR|0x40;
/* Hien thi so thu thu 4*/
PRT2DR=LED_code[digit4];
PRT1DR=PRT1DR&0x7f;
delay(1);
PRT1DR=PRT1DR|0x80;
}
void main()
{
while(1)
{
unsigned m,n,x,y,lap;
for(m=0;m<10;m++)
{
for(n=0;n<10;n++)
{
for(x=0;x<10;x++)
{
for(y=0;y<10;y++)
{
for(lap=0;lap<200;lap++) // lap hien thi
{
hienthiso(y,x,n,m);
delay(10);
}
}
}
}
}
}
}
Mạch đã Test ==>OK