Hình ảnh của led đơn :
Led chính là diode có khả năng phát sáng Cấu tạo đơn giản như hình trên
(Cái này các bạn học điện tử đã được học rồi )[b]
Không dài dòng nữa mình sẽ hướng dẫn các bạn cách lập trình led đơn(vì những bạn ban đầu mới làm quen với vi điều khiển thường gặp khá nhiều khó khăn)
Ban đầu ai mà chẳng vậy phải ko ?
Thấu hiểu được điều đó nhóm Hand in Hand chúng tôi mạnh dạn đưa ra các hướng dẫn kỹ thuật . Không dám qua mặt các cao thủ, chỉ mong người sử dụng dễ dàng trong việc lập trình cho các ứng dụng đơn giản.
Xin cảm ơn !
/*---------------------------------------------------------------------------*/
Trước tiên hãy làm quen với một cách chắc ai cũng biết :
Nguyên lý :
[b]Led sáng->Trễ->Led Tắt->trễ
- Code:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
void delay(void)
{
int i;
for(i=0;i<30000;i++);
}
void main(void)
{
while(1)
{
P1=0x01;
delay();
P1=0x00;
delay();
}
}
/*-------------------------------------------------------*/
Nếu bạn muốn điều khiển nhiều led cùng 1 cổng thì sao nhỉ ?
Đơn giản thôi!
Có thể bạn xuất từng cổng , nhưng đó chỉ là một cách đơn giản.
Các bạn có thể sử dụng một cấu trúc đơn giản như sau.
Bạn muốn một led sáng từ P1.0 đến P1.7 chẳng hạn.
Giải thuật như sau:
- Code:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
void delay(void)
{
int i;
for(i=0;i<30000;i++);
}
void main(void)
{
unsigned char x;
while(1)
{
for(x=0x01;x<=0x80;x<<=1)
{
P1=x;
delay();
}
}
}
/* Như thế là xong một cổng làm thế nào ?
Tùy vào các bạn dùng các thuật toán khác nhau , nhưng theo kinh nghiệm của mình là dùng mảng là các bạ đơn giản nhất và có thể tạo ra nhiều hiệu ứng nhất.
các bạn tham khảo code này nhá "
- Code:
// sinh nhat em 18-8-1990;
// tien dep trai---------
// hay yeu anh em nhe
// dung xa a e nhe
// 1000 dong code dang cho anh
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
unsigned int i,j,k;
unsigned char x,y,z;
void delay(unsigned int ms)
{
int i;
for(i=0;i<ms;i++)
{
TMOD=0x01;
TH0=0xFC;
TL0=0x17;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
}
}
//nhap nhay
void maimeo_1(void)
{
for(k=0;k<8;k++)
{
P0=P1=P2=0xff;
delay(300);
P0=P1=P2=0x00;
delay(300);
}
}
//hai nua trai tim
void maimeo_2(void)
{
for(i=0;i<6;i++)
{
P0=0x00;
P2=0x0F;
P1=0xFF;
delay(300);
P0=0xff;
P1=0x00;
P2=0xF0;
delay(300);
}
}
//nhay so le truoc chan sau
void maimeo_3(void)
{
for(i=0;i<8;i++)
{
P0=P1=P2=0x55;
delay(300);
P0=P1=P2=0xaa;
delay(300);
}
}
//nhay chan truoc le sau
void maimeo_4(void)
{
for(i=0;i<8;i++)
{
P0=P1=P2=P3=0xaa;
delay(300);
P0=P1=P2=P3=0x55;
delay(300);
}
}
//sang tat duoi nguoc dong thoi
void maimeo_5(void)
{
unsigned char x,y;
x=y=0xFF; //255
i=0x01; //1
j=0x80; //128
for(k=0;k<8;k++)
{
x=x-i;
y=y-j;
P0=x;
P1=P2=y;
i=i*2;
j=j/2;
delay(300);
}
}
//tat duoi
void maimeo_6(void)
{
unsigned char x,y;
x=y=0xFF;//255
i=0x01; //1
j=0x80; //128
for(k=0;k<8;k++)
{
x=x-i;
y=y-j;
P0=y;
P1=P2=x;
i=i*2;
j=j/2;
delay(300);
}
}
// tat dan het cac led theo chieu thuan
void maimeo_7(void)
{
unsigned char M[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
unsigned char T[]={0x1f,0x0f,0x07,0x03,0x01,0x00};
P0=P1=P2=0xff;
for(i=0;i<8;i++)
{
P0=M[i];
delay(300);
}
for(i=0;i<6;i++)
{
P1=T[i];
delay(300);
}
for(i=0;i<8;i++)
{
P2=M[i];
delay(300);
}
}
// sang dan het cac led theo chieu thuan
void maimeo_8(void)
{
unsigned char M[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
unsigned char T[]={0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
P0=P1=P2=0x00;
for(i=0;i<8;i++)
{
P0=M[i];
delay(300);
}
for(i=0;i<6;i++)
{
P1=T[i];
delay(300);
}
for(i=0;i<8;i++)
{
P2=M[i];
delay(300);
}
}
// sang dan het cac led theo chieu nghich
void maimeo_9(void)
{
unsigned char M[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0};
unsigned char T[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
P0=P1=P2=P3=0xff;
for(i=0;i<6;i++)
{
P1=M[i];
delay(300);
}
for(i=0;i<8;i++)
{
P0=T[i];
delay(300);
}for(i=0;i<8;i++)
{
P2=T[i];
delay(300);
}
}
// tat dan het cac led theo chieu nghich
void maimeo_10(void)
{
unsigned char M[]={0x01,0x03,0x07,0x0f,0x1f,0x3f};
unsigned char T[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
P0=P1=P2=0x00;
for(i=0;i<6;i++)
{
P1=M[i];
delay(300);
}
for(i=0;i<8;i++)
{
P0=T[i];
delay(300);
}
for(i=0;i<8;i++)
{
P2=T[i];
delay(300);
}
}
// chay dong thoi ca 2 tim
void maimeo_11(void)
{
int i,j;
for(j=0;j<4;j++)
{
x=0xFE;
for(i=0;i<8;i++)
{
P1=P2=P0=x;
delay(300);
x=x<<1;
}
}
}
// sang tran tu tim to xuong tim be
void maimeo_12(void)
{ P0=P1=P2=0x00;
for(i=0;i<8;i++)
{
P0=0x04;
delay(10);
P0=0x00;
delay(10);
}
for(j=0;j<2;j++)
{
P0=0x04;
delay(300);
P0=0x0E;
delay(300);
P0=0x1F;
delay(300);
P1=0x01;
P0=0x3F;
delay(300);
P1=0x03;
P0=0x7F;
delay(300);
P1=0x07;
P0=0xFF;
delay(300);
P1=0x2F;
delay(300);
P1=0x3F;
delay(300);
P2=0x80;
delay(300);
P2=0xC1;
delay(300);
P2=0xE3;
delay(300);
P2=0xF7;
delay(300);
P2=0xFF;
delay(300);
P2=P1=P0=0x00;
}
}
// tat tran tu tim to xuong be
void maimeo_13(void)
{
P0=P1=P2=0xFF;
for(j=0;j<2;j++)
{
P0=0xFB;
delay(300);
P0=0xF1;
delay(300);
P0=0xE0;
delay(300);
P0=0xC0;
P1=0xFE;
delay(300);
P0=0x80;
P1=0xFC;
delay(300);
P0=0x00;
P1=0xF8;
delay(300);
P1=0xD0;
delay(300);
P1=0xC0;
delay(300);
P2=0x7F;
delay(30);
P2=0x3E;
delay(300);
P2=0x1C;
delay(300);
P2=0x08;
delay(300);
P2=0x00;
delay(300);
P2=P1=P0=0xFF;
}
}
// TRAI TIM CHAY sang led don
void maimeo_14(void)
{
int i,j;
for(j=0;j<2;j++)
{
x=0x01;
for(i=0;i<8;i++)
{
P0=P1=P2=x;
delay(300);
x=x<<1;
}
}
}
// nhap nhay da hieu ung
void maimeo_15(void)
{
int i,j;
for(i=0;i<3;i++)
{
P0=P1=P2=0xFF;
delay(300);
P0=P1=P2=0x00;
delay(300);
}
for(j=0;j<5;j++)
{
P1=P0=0xFF;
P2=0x00;
delay(300);
P1=P0=0x00;
P2=0xFF;
delay(300);
}
}
// led don khuyech dao toan cau ha ha
void maimeo_16(void)
{
int i,j;
unsigned char M[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
P0=P1=P2=0x00;
for(i=0;i<2;i++)
{
P0=0x80;
P1=0x01;
delay(300);
P1=P0=0x00;
delay(300);
}
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
P0=M[i];
P1=M[7-i];
P2=M[i];
delay(400);
}
P0=0x80;
P1=0x01;
for(i=0;i<4;i++)
{
P0=P2=M[7-i];
P1=M[i];
delay(400);
}
i=0;
for(k=0;k<8;k++)
{
P0=M[7-k];
P1=M[k];
P2=M[k];
delay(300);
}
k=0;
for(k=0;k<4;k++)
{
P0=M[k];
P1=M[7-k];
P2=M[7-k];
delay(300);
}
}
}
// chuong trinh led tuon dai dac biet
void maimeo_17(void)
{
int j;
unsigned char T[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7F,0xFF};
j=0;
for(j=0;j<8;j++)
{
P0=T[j];
P1=T[j];
P2=T[7-j];
delay(300);
}
j=0;
for(j=0;j<8;j++)
{
P0=T[7-j];
P1=T[7-j];
P2=T[j];
delay(300);
}
}
void main(void)
{
while(1)
{
maimeo_1();
maimeo_2();
maimeo_3();
maimeo_4();
maimeo_5();
maimeo_6();
maimeo_7();
maimeo_8();
maimeo_9 ();
maimeo_10();
maimeo_2();
maimeo_17();
maimeo_3();
maimeo_11();
maimeo_12();
maimeo_13();
maimeo_14();
maimeo_15();
maimeo_16();
maimeo_17();
maimeo_10();
maimeo_7();
maimeo_9();
maimeo_2();
maimeo_16();
}
}
Hình ảnh sau:
//Bạn nào muốn điều khiển nhiều cổng cùng một lúc thì sao ?
Đơn giản thôi!
Các bạn sẽ xuất đồng thời các cổng nhé!
Xem chương trình sau:
- Code:
unsigned char x,y;
x=y=0xFF; //255
i=0x01; //1
j=0x80; //128
for(k=0;k<8;k++)
{
x=x-i;
y=y-j;
P0=x;
P1=P2=y;
i=i*2;
j=j/2;
delay(300);
}
Do vẽ trên proteus đơn giản nên mình ko đưa file mô phỏng ? bạn nào cần cứ yêu cầu.
//-----------Còn một cách nữa -----------------
Là dùng các hàm trong thư viện
- Code:
Tính năng và cách dùng như sau:
Tên hàm và tính năng
#ifndef __INTRINS_H__
#define __INTRINS_H__
extern void _nop_ (void);
extern bit _testbit_ (bit);
extern unsigned char _cror_ (unsigned char, unsigned char);
extern unsigned int _iror_ (unsigned int, unsigned char);
extern unsigned long _lror_ (unsigned long, unsigned char);
extern unsigned char _crol_ (unsigned char, unsigned char);
extern unsigned int _irol_ (unsigned int, unsigned char);
extern unsigned long _lrol_ (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
extern void _push_ (unsigned char _sfr);
extern void _pop_ (unsigned char _sfr);
#endif
// crol : quay trái
cror: Quay phải
Tương tự iror : dịch phải
irol : dịch phải
Ngoài ra tùy vào sự sáng tạo của mỗi người có thể còn có rất nhiều hiệu ứng khác , cách dùng khác nữa chứ ko chỉ có những cách mình giới thiệu trên đây.
------------Chúc các bạn thành công -------------------------