[H2]Điều khiển LED đơn



 
IndexIndex  GalleryGallery  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
News & Announcements
  • Gallery & Others
IndexIndex  GalleryGallery  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  


[H2]Điều khiển LED đơnXem chủ đề cũ hơn Xem chủ đề mới hơn Go down
November 4th 2011, 3:02 pm
avatar
[Thành viên] - RikikudoLoveTukimiri


Tổng số bài gửi : 674
Số lần được cảm ơn. : 91
Join date : 22/04/2011
Age : 25
Đến từ : HaNam Province

Bài gửiTiêu đề: [H2]Điều khiển LED đơn
Xem lý lịch thành viên

Nội Dung Bài Viết:
<<<----------------------------->>>
Chào các bạn trên cơ sở chia sẻ kiến thức mình biết về họ VĐK 8051 mình sẽ tổng hợp các bài viết theo chủ đề mức độ từ đơn giản đến phức tạp . Việc học qua ví dụ sẽ tiếp thu nhanh hơn đặc biệt với các bạn mới tìm hiểu về dòng vi điều khiển này .

Bài hôm nay chúng ta bắt đầu với led đơn , Cái này rất thú vị đây , xong bài này chắc mọi người có thể lập trình dc led trái tim hoành tráng hơn của mình đấy .
Nói qua về phần cứng tý nhỉ : mạch ghép nối rất đơn giản chỉ cần 1chip 89s52 vài con led+ trở => ok
nhưng mình chỉ chú ý mọi người vấn đề sau dòng phun( nghĩa là mức 1 sáng) vi điều khiển rất nhỏ tầm 1mA k đủ sáng led(~5mA)
vì vậy chúng ta sẽ lập trình led mức 0 sáng ( dòng hút ~10mA). thêm trở 330 or 470 hạn dòng cho led =>ok phần cứng chỉ có thế

Và bây giờ mình sẽ đi vào cách quét led đơn giản nhất (ai bắt đầu học chắc cũng phải gõ cái này) đó là điều khiển từng led 1 ( hay quét theo bit) . Ở đây mình sẽ kết nối led với chân P1.0 của vi điều khiển
Trích dẫn

#include "reg52.h"//khai bao thu vien cho ho 89x52
sbit led=P1^0;

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()
{
while(1)//vong lap vo tan
{
led=0; //led sang muc 0
delay(1000);
led=1;
delay(1000); //led tat
}}



Rất đơn giản phải k ? để tăng số led chỉ việc gán biến vd led1=P1^1....

Cái trên chắc ai nhìn cũng hiểu rồi , giờ để cả cổng P1 (8 led gắn với cổng P1) sáng tắt thì làm ntn?
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()
{
while(1)//vong lap vo tan
{
P1=0; //led sang muc 0
delay(1000);
P1=1;
delay(1000); //led tat
}}



Cái này tương tự như trên thôi nhưng đây là điều khiển theo byte (8led 1 lúc)
Code trên còn có thể viết như sau:
Trích dẫn

main()
{
while(1)//vong lap vo tan
{
P1=0x00; //led sang muc 0
delay(1000);
P1=0xff;
delay(1000); //led tat
}}


Các bạn thấy khó hiểu rồi phải k => cái này là xuất theo mã hexa 0x00.
Ở đây là hexa 8 bit thứ tự đánh bit như sau 7 6 5 4 3 2 1 0
tương ứng với các chân vi điều khiển ở đây là P1,7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
0X00 đổi sang nhị phân là 00000000 vậy 8 led 0 nên sáng tương tự với 0xff. Các bạn nắm vững số hexa sẽ thấy cái này rất đớn giản !

Có 1 câu hỏi cho các bạn là P1= 0xb3 thì các led nào sẽ sáng ?????
0xb3=10110011 led mức 0 sáng sẽ là các led 6,3,2 led tắt là các led 7,5,4,1,0
đơn giản chưa ?? xuất 1 phát dc 8 led , và bây giờ là code lập trình sáng dần các led từ led 0->7 theo phương pháp mình hay dùng là mảng 1 chiều :
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[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//mang chua ma led
while(1)//vong lap vo tan
{
for(k=0;k<8;k++)
{
P1=maled[k];
delay(1000);
}
}}




Rất hay phải k , bật mí là mình viết code led trái tim theo cách này đó , để cả 4 cổng đều sáng thì viết như sau:
Trích dẫn
for(k=0;k<8;k++)
{
P0=P1=P2=P3=maled[k];
delay(1000);
}


ok. giờ là phương pháp cuối cùng mình dùng sử dụng hàm trong thư viên "intrins.h"
Trích dẫn
#include "reg52.h"//khai bao thu vien cho ho 89x52
#include "intrins.h"
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 x,k;
unsigned char maled[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//mang chua ma led
while(1)//vong lap vo tan
{
x=0xfe;//gan bien x

for(k=0;k<8;k++)
{
P1=x; //o day la led 0 sang
delay(1000);//tre
x=_crol_(x,1); // quay trai bien x 1 don vi
}
}}




Phù thế là xong led đơn chỉ có thể đơn giản k nào ?? Các bạn tự viết hiệu ứng cho led theo mấy cách này nha bạn nào viết dc code cho led trái tim thì gửi video cho mình coi nha .Hôm nay tạm nghỉ ở đây , bài sau chúng ta sẽ tìm hiểu về cách phương pháp quét led 7 thanh =>ok


_________________

TĐH2 - K5 2010-2014
Hiếu==| | | ==๑۩۞۩๑----- ♥♥Hiếu♥Bích♥♥™ -----๑۩۞۩๑==| | |==Bích
Thấy hay thì THANK cho cái


Chiều buồn ngồi xé 500
Xé nhầm năm chục buồn ơi là buồn Crying or Very sad

Wondering? Between numerrous of waves and storm . only dream winged by diligence can be fly Nghiện game

Copy đường link dưới đây gửi đến nick yahoo bạn bè!



[H2]Điều khiển LED đơn

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang
Trang 1 trong tổng số 1 trang
* Viết tiếng Việt có dấu, là tôn trọng người đọc.
* Chia sẻ bài sưu tầm có ghi rỏ nguồn, là tôn trọng người viết.
* Thực hiện những điều trên, là tôn trọng chính mình.
-Nếu chèn smilies có vấn đề thì bấm A/a trên phải khung viết bài
YÊU CẦU VIẾT TIẾNG VIỆT CÓ DẤU

Permissions in this forum:Bạn không có quyền trả lời bài viết
 :: GIAO LƯU - CHIA SẺ KIẾN THỨC :: CHIA SẺ KIẾN THỨC CÙNG NHAU-
/* Số lượt truy cập */