PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 21-07-2005, 08:45 AM   #1
noisePIC
Đệ tử 2 túi
 
Tham gia ngày: May 2005
Bài gửi: 39
:
Phương pháp quét LED

Phương pháp Quét Led
- Giả sử cho bài toán: Dùng PIC 16F84(13 chân I/O) để hiện thị số lên 6 LED 7 đoạn.Bình thường để hiển thị số lên LED 7 đoạn bạn có thể dùng trực tiếp các chân I/O(8 chân/ 1 LED 7 đoạn),Hoặc dùng bộ giải mã BCD(4 chân I/O / 1 LED 7 đoạn).Như vậy để hiển thị số lên 6 LED 7 đoạn bạn cần dùng tối thiểu 24 chân I/O.--> bài toán buộc phải thay đổi ,không dùng PIC 16F84 nữa! dùng con khác có nhiều chân hơn.
- Nhưng bài toán trên vẫn có thể giải quyết được bằng phương pháp quét LED sử dụng tính chất lưu ảnh trên võng mạc(24 ảnh/giây) thì ảnh như liên tục.Do vậy ta phải quét hết 6 LED 24 lần/ 1s. Các LED lần lượt sáng theo thứ tự từ LED thứ 1 cho tới LED thứ 6 trong một khoảng thời gian nào đó(Tùy thuộc vào tần số quét ta chọn).
Linh kiện:

PIC 16F84A
Giải mã BCD 74LS47N
6 Led 7 đoạn Anốt chung
6 Tranzitor C828

Sơ đồ mạch<không upload được ảnh!!!>

Mô tả:
6 Led Anode chung được nối qua Transitor C828 tới nguồn Vcc.Chân RB0-RB5 nối tương ứng qua một điện trở tới chân Bazơ của Transitor C828.
Tất cả các chân của Led 7 đoạn (a,b,c,d,e,f,g) được nối chung với BUS.
- 4 lối ra của PORTA (RA3-RA0) nối với lối vào của 74LS47.Lối vào nhị phân này tương ứng với lối ra là số thập phân được hiển thị.Giả sử ta cần số 5 sáng
thì RB0 phải bằng 1- để mở Transitor.Còn RA3,RA2,RA1,RA0=0101
..tương tự đối với các LED 7 đoạn khác.
Chương trình được viết như sau:
Code:
//******************************************
//QUET LED
//author: noisepic@gmail.com
//date:20/07/2005
//status:OK
//Mota:PIC16F84A + Bo giai ma BCD 7447
//4 vao 7447: RA3-RA0
//PORTB(RB0-RB5 ket noi voi Transitor C828)
//*******************************************
#include<16f84A.h>
#include<def_84.h>
#fuses   NOWDT,PUT,HS,NOPROTECT
#use  delay(clock=4000000)
main()
{
//gia su ta can quet so 1,2,3,4,5,6
TRISA=0x00;
TRISB=0x00;
PORTA=0xff;
PORTB=0x00;// ban dau chua Led 7 doan nao sang
while(TRUE)
   {
//hien so 1
   PORTB=0x01;//transitor 1 mo
   PORTA=0x01;
   delay_us(3333);
//hien so 2
   PORTB=0x02;//transitor 2 mo
   PORTA=0x02;
   delay_us(3333);
//hien so 3//transitor 3 mo
   PORTB=0x04;
   PORTA=0x03;
   delay_us(3333);
//hien so 4//transitor 4 mo
   PORTB=0x08;
   PORTA=0x04;
   delay_us(3333);
//hien so 5 //transitor 5 mo
   PORTB=0x10;
   PORTA=0x05;
   delay_us(3333);

//hien so 6//transitor 6 mo
   PORTB=0x20;
   PORTA=0x06;
   delay_us(3333);

   } 
}
Với thời gian trễ là 3333us~3.3 ms tương đương với quét 50 ảnh/ s.
3.3*6*50~999ms=1s.
Chương trình trên hiển thị số 1 2 3 4 5 6
- Trong chương trình có sử dụng hàm delay_us(3333).Tại sao lại là 3333.
Theo nguyên lý làm phim, nếu có 24 hình ảnh của vật xuất hiện trong 1 giây thì dường như vật đó luôn luôn xuất hiện- ứng dụng của hiện tượng lưu ảnh trên võng mạc.Nhưng do trong thiết kế khi dùng 24 ảnh/s đèn led hơi nháy.Do vậy noisepic tăng tần số quét lên 50 ảnh /s..

Viết chương trình mà không giải thích thì….không ai đọc! chính noisepic là người xem nhiều mã ngụồn.Mã nguồn nào mà giải thích cụ thể thi noisepic mới xem!
Một chương trình viết bằng CCS bao gồm
Code:
#include<16F84A.h>
#fuses	NOWDT,PUT,HS,NOPROTECT
#use	delay(clock=4000000)
main()
{
// Các lệnh gõ ở đây
}
Cụ thể từng dòng:

#include<16F84A.h> // phần này định nghĩa loại PIC bạn dùng
#fuses NOWDT,PUT,HS,NOPROTECT // nếu bạn mới viết chương trình thì cũng chưa cần quan tâm mấy với các ứng dụng đơn giản như Ngắt,I/O
#use delay(clock=4000000)// định nghĩa thạch anh mà bạn dùng.như tôi dùng thạch anh 4 MHZ.Khai báo này để dùng lệnh trễ thời gian

Tóm tại 3 dòng trên khai báo cho trình biên dịch CCS biết cấu hình phần cứng PIC như thế nào!
Code:
TRISA=0x00;
TRISB=0x00;
PORTA=0xff;
PORTB=0x00;//
Với những ai đã học PIC rồi thì khai báo trên dễ hiểu.Nhưng với người mới bắt đàu thì cứ để noisepic giải thích..tiếp nhé
Code:
TRISA=0x00;
TRISB=0x00;
Trong PIC có 2 thanh ghi TRISA,TRISB các bit của nó quyết định xem PORTA ,PORTB là input hay out put.1 tương ứng với INPUT,0 tương ứng với OUTPUT
Với khai báo trên PORTA,PORTB là out put cả!
PORTA=0xff; Mức điện áp ra các chân ở cổng A xấp xỉ 5 V.Các LED 7 đoạn OFF
PORTB=0x00; transitor đóng.
Code:
   PORTB=0x20;
   PORTA=0x06;
   delay_us(3333);
Dòng lệnh này để xuất số 6 ra cổng A và giữ số 6 đó trong vòng 3,3ms.
PORTB=00100000 RB5=1 transitor 6 mở cấp điện cho LED 6
PORTA=0x06=6.

noisepic định viết phần tutorial về CCS (đơn giản cho người mới bắt đầu!) không biết có nên viết không?

thay đổi nội dung bởi: noisePIC, 21-07-2005 lúc 08:47 AM.
noisePIC vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 04:37 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam