Chào các bạn hôm nay chúng ta tiếp tục học về 8051 nha! Bài hôm nay là các phương pháp quét led 7 thanh . Mình sẽ đi từ cách quét 1 led để các bạn hiểu rõ nguyên tắc xong sẽ mở rộng ra 2 ,4, 8.... led sa0 cho các bạn mới học có thể hiểu một cách dễ dàng nhất ... nào chúng ta bắt đầu!!
Đầu tiên ta nói qua về led 7 thanh tý nhỉ : led 7seg có thể có thể coi được tạo thành từ các led đơn ghép lại nhưng theo dạng thanh . Nó chia ra làm 2 loại anot chung và katot chung . Ta có thể hiểu nôm na rằng thực ra 7 "thanh" này giống như là 7 con led.A chung tức là anode của 7 con led này nối với nhau,còn các chân K thì riêng.Đối với K chung chũng có thể hiểu tương tự như vậy=> ok .Còn đây là sơ đồ chân của nó .
Tiếp theo là bảng mã led theo các chữ số từ 0=>9 . Chú ý bảng này tương ứng mới mức 1 sáng(5v ý ) led katot chung . Còn với loại anot chung thì bạn thay bảng trạng thái led sáng là mức 0 nha!
ok=> thế là xong phần lý thuyết về led 7seg .
I,,Phương pháp quét đầu tiên mình nói đến là phương pháp mỗi led gắn vào 1 port của VĐK phương pháp này là đơn giản nhất ,nhược điểm là tốn chân VĐK ở đây chỉ áp dụng cho các bạn mới học thôi hehe . PHần cứng như sau led 7seg anot chung , ,kết nối các chân của led tới port P2 của 89S52 ,chân anot qua tro 470 ôm nối lên VCC qua trở 100 om. các bạn nhìn hình vẽ
Code:
Trích dẫn
#include "reg52.h"//khai bao thu vien cho ho 89x52
void delay(unsigned int ms) //ham delay ms
{
unsigned int i,j; //vong for chay mat 8us
for(i=0;i
for(j=0;j<125;j++); //tre 1s thi viet delay(1000)
}
main()
{
unsigned int k;
unsigned char maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//ma led 7seg anot chung
while(1)//vong lap vo tan
{
for(k=0;k<10;k++)
{
P2=maled[k];//chay tu 0 den 9
delay(10000);//tre bao nhieu tuy cac ban dat
}
}}Rất đơn giản phải k nào ???
Vẫn sử dụng led đó nhưng giờ chúng ta dùng ic giải mã 74ls47 , phần cứng có chút thay đổi là chúng ta chỉ dùng 4 chân đầu tiên của P2 từ P2.0=>P2.3 nối vào các chân A
Sơ đồ:
Code:
Trích dẫn
#include "reg52.h"//khai bao thu vien cho ho 89x52
void delay(unsigned int ms) //ham delay ms
{
unsigned int i,j; //vong for chay mat 8us
for(i=0;i
for(j=0;j<125;j++); //tre 1s thi viet delay(1000)
}
main()
{
unsigned int k;
unsigned char maled[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; //ma led 7447
while(1)//vong lap vo tan
{
for(k=0;k<10;k++)
{
P2=maled[k];//chay tu 0 den 9
delay(10000);//tre bao nhieu tuy cac ban dat
}
}}
ok => trên là phương pháp dùng từng led riêng biệt vấn đề đặt ra là rất tốn chân VXL khắc phục tình trạng này thì người ta sử dụng phương pháp quét có thể quét 15 ,20 led 1 con vđk là chuyện bình thường , chúng ta cùng tìm hiểu.
II,PHƯƠNG PHÁP QUÉT
Nguyên tắc: Ở đây thay vì nối chân anot của led 7seg lên VCC ta dùng 1 tran npn or pnp để điều khiển bật tăt led này. Tại mỗi thời điểm chỉ có duy nhất 1 led 7 thanh được bật sáng mà thôi. Nhờ sự lưu ảnh trên võng mạc người mà ta cảm nhận như các led 7 thanh này sáng đồng thời nhau, với điều kiện tốc độ quét ảnh >24 hình/1S.
Mình sẽ đi vào bài toán cụ thể : Viết chương trình hiển thị từ 00=>99
Phần cứng kết nối như sau : dùng led anot chung 2 led nối chung chân data vào P3 , chân điều khiển led 1 là P1.0 led 2 là P1.1 các bạn xem hình vẽ dưới .
code:
Trích dẫn
#include"reg52.h"
//================
sbit Led1 = P1^0;
sbit Led2 = P1^1;
//=================
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int a,b,c,d,k;
//=================
void main()
{
while(1)
{
for(k=0;k<=99;k++)
{
a=k/10;
b=k%10;
for(c=0;c<=10000;c++)
{
Led1=1; //led dau tien sang
P3=M[a];
Led1=0;
P3=0xff;//xoa du lieu
Led2=1; //led 2 sang
P3=M[b];
Led2=0;
P3=0xff;//xoa du lieu
}
}
}
}
//=================End=================
Hôm nay tạm thế đã còn rất nhiều phương pháp như dùng ic ghi dịch 74LS595 .... mình sẽ nói ở các bài tiếp theo . Các bạn về nhà luyện tập viết code đếm đến 9999 nha !