Thursday, April 17, 2014

// // Leave a Comment

003. LED 2: Một số ví dụ về điều khiển bật tắt 8 LED (PHẦN 1)

Trong bài này chúng ta sẽ cùng nhau làm 1 số ví dụ về bật tắt 8 led, một số hiệu ứng cơ bản để làm đèn nháy chẳng hạn:


  •  VD1: Bật tắt 8 LED 
  •  VD2: Bật (tắt) xen kẽ 8 LED
  •  VD3: Bật (tắt) dần 8 LED  
  •  VD4: Kết hợp các hiệu ứng để làm 1 dây đèn nháy có nút bấm điều khiển (chưa dùng lệnh ngắt)

Bây giờ chúng ta cùng nhau làm các ví dụ này nhé, cũng dễ thôi: ;)

- Cho ví dụ 1,2,3 chúng ta mắc mạch như hình dưới nhé: (Không cần mắc mạch tạo xung với mạch reset)


- Tiếp theo chúng ta sang keilc làm code cho nó nhé:
   +Chúng ta vẫn tạo Project mới: Project -> New uvision project -> nhập tên
   +Tạo file mới : Crl+N rồi Crl+S để lưu luôn nhé: lưu thành -> tenfile.c nhé
   +Add luôn file: vào Source group 1 bằng cách nhấp kép vào nhánh "Source group 1" chọn file.c vừa tạo xong ấn add (hoặc nhấp kép cũng được nha).
   +Bật tạo file hex để tí còn nạp vào vi điều khiên nhé: Alt+F7 -> Output -> Creat HEX file

  Thế là đã xong phần chuẩn bị, cùng làm từng ví dụ nhé~

VD1: Bật tắt 8 LED 

Chúng ta đã biết 1 vi điều khiển 8051 có 4 PORT có thể làm việc, mỗi port lại có 8 chân Px.x, vì vậy nếu dùng 1 bit để điều khiển 1 chân chúng ta sẽ cần đúng 1 byte để điều khiển cả PORT. Qua ví dụ này chúng ta sẽ biết được cách điều khiển cả 1 PORT qua lập trình C, cách nối LED với PORT mà không phải dùng câu lệnh "sbit LED_PIN=Px^x" cho từng chân.

   +Sau khi lắp mạch và tạo file.c cho ví dụ 1 này chúng ta đến luôn phần Code C nhé:

#include<regx52.h>
#define LED_PORT P2

void Delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0; x<t; x++)
{
for(y=0; y<50; y++);
}
}
void main ()
{
  while(1)
{
 LED_PORT= ~LED_PORT;
//O bai truoc, chung ta dung "!" la dau NOT cho bit nhe, muon dung cho ca byte ta dung "~"
 Delay_ms(1000);
}
}

  Cuối cùng chúng ta tạo file HEX rồi nạp vào Vi điều khiển để simulate để xem thành quả nhé


VD2: Bật (tắt) xen kẽ 8 LED

Chúng ta sẽ biết được cách tìm vị trí để điều khiển 1 hay nhiều led 1 lúc trong 1 LED_PORT, Từ đó mở rộng ra và có thể sáng tạo thêm nhiều hiệu ứng tương tự nhé!
   +Sau khi lắp mạch và tạo file.c cho ví dụ 1 này chúng ta đến luôn phần Code C nha:

#include<regx52.h>
#define LED_PORT P2 
//noi ca 8 led voi PORT luon

void Delay_ms(unsigned int t)
//van la ham delay nhu bai truoc nhe
{
 unsigned int x,y;
 for (x=0; x<t; x++)
  {
for (y=0; y<123; y++);
}
}

void main()
{
LED_PORT = 0x55;
while(1)
{
LED_PORT = ~LED_PORT; 
Delay_ms(500); 
}
}

  •  Để hiểu sao dùng AA ta vào Caculator: chương trình của Window nhé, sau đó chọn máy tính cho lập trình viên (Programer) Alt+3: 
  • Vào phần Hex ta gõ AA là hiểu liền
Từ đây bạn có thề thử bài tập, nhấp nháy 2,3 LED liên tiếp hay dùng dòng bit 01111010 để điều khiển 1 LED PORT rồi nhé.

VD3: Bật (tắt) dần 8 LED

Chúng ta làm tương tự như trên và chỉ cần tìm hiểu phần code thôi nhé:

#include<regx52.h>
#define LED_PORT P2 

void Delay_ms(unsigned int t)
{
 unsigned int x,y;
 for (x=0; x<t; x++)
  {
for (y=0; y<123; y++);
}
}
 
void main()
{
unsigned char i;
                    LED_PORT=0x00;
        while(1)
        {
for(i=0;i<8;i++)

{
LED_PORT=LED_PORT>>1;
Delay_ms (100);
}

for (i=0;i<8;i++)
{
LED_PORT=LED_PORT<<1|0x01;
Delay_ms (100);
}
        }

}


Trong ví dụ này ta chú ý câu lệnh: LED_PORT=LED_PORT<<1|0x01
  • Phần đầu: LED_PORT=LED_PORT<<1 Ta sẽ dịch bit LED_PORT sang trái khi i tăng từ 0->7
  • Phần sau: |0x01 : dấu "|" là toán tử logic OR
  • Nghĩa là ta sẽ vừa dịch bit vừa +1 vào bit vừa chuyển chúng ta sẽ được hiệu ứng đẹp mắt ''_''




Tạm thời dừng bài đăng này ở đây nhé
Thân
Phong'S

0 comments:

Post a Comment