Quét LED 7_ Đếm 0-9999

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.

pdf8 trang | Chia sẻ: maiphuongtt | Lượt xem: 2135 | Lượt tải: 5download
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
Tài liệu liên quan