Lập trình LED đơn chạy chữ Happy New Year 2014 đơn giản
Các bạn đã nhìn thấy rất nhiều các biển quảng cáo led nó chạy như thế nào rồi, tại sao nó lại nháy dc như vậy thì hôm nay mình sẽ hướng dẫn các bạn làm ra nó, nhưng chỉ ở mức cơ bản dễ làm thui nha. Các bạn đã biết Quảng cáo led bây giờ họ ko lập trình truyền thống nữa mà dùng phần mềm chuyên dụng để thiết kế làm rất ngắn thời gian thi công cho nên ta ko thế bắt trước theo họ được ví dụ như sáng mờ dần.... đó là họ dùng MCU chuyên dụng
Thôi ko nói dài dòng nữa ta sẽ đi vào vấn đề chính luôn. :)
Đầu tiên ta quay lại kiến thức tin học một chút, đó là cách chuyển đổi bit giữa các hệ, ta chuyển từ BIN-HEX nhằm ko muốn mất thời gian tính toán ta dùng luôn máy tính casio chuyển cho nhanh
Máy FX500MS ai đã biết cách vào hệ mà ta hay nghịch để viết chữ ấy nếu ko biết thì hỏi ng xung quanh, xong ta bấm MODE tới phần có 3 hệ SD | REG | BASE thì ta chọn BASE (đây là hệ chuyển đổi bit) OK
Với máy FX570MS thì ta bấm MODE rồi chọn BASE luôn ko phải chuyển hệ, với các máy cao cấp hơn cũng tương tự
Vì code của chúng ta dùng mã HEX lên ta sẽ chuyển đổi BIN(nhị phân) sang HEX(hệ 16)
Nút log = BIN, nút ^ = HEX, nút x2 = DEC(hệ thập phân)
Nhấn nút "log" để nhập mã nhị phân 8 bit: VD: 11011010 nhấn nút "=" xong nhấn nút "^" để chuyển sang mã HEX ta được 11011010 = DA (viết trong trình biên dịch keilC là 0xDA) thế là xong phần chuyển đồi ta bắt đầu vào viết chương trình
Lắm rõ hơn bạn lên xem lại các bài 1,2,3
CODE:
#include <REGX51.H>
void delay(unsigned char t){
//Chuong trinh tao tre 50ms
unsigned char i;
for(i=0;i<t;i++){
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(!TF0);
TF0=TR0=0;
}
}
unsigned char w; //khai bao bien
unsigned char m1[8]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; //mang bit
void lan_luot(){//ctr con nhay lan luot
P0=P2=0xff; //tat ca tat
delay(20);
for(w=0;w<8;w++){ //Vong lap for
P0=m1[w]; //xuat mang m1 ra P0 chieu thuan
delay(10); //0.5s
}
for(w=0;w<8;w++){
P2=m1[w]; //xuat mang m1 ra P2 chieu thuan
delay(10); //0.5s
}
for(w=0;w<8;w++){
P2=m1[7-w]; //xuat mang m1 ra P2 chieu nguoc
delay(10); //0.5s
}
for(w=0;w<8;w++){
P0=m1[7-w]; //xuat mang m1 ra P0 chieu nguoc
delay(10); //0.5s
}
}
void xen_ke(){//ctr con nhay xen ke
P0=P2=0xff; //tat ca tat
delay(20);
for(w=0;w<10;w++){
P0=P2=0xAA; // 0xAA = 01010101
delay(10);
P0=P2=0x55; // 0x55 = 10101010
delay(10);
}
}
void nhap_nhay(){//ctr con nhap nhay
P0=P2=0xff; //tat ca tat
delay(20);
//Nhap nhay tat ca 15 lan
for(w=0;w<15;w++){
P0=P2=0x00; //sang
delay(10);
P0=P2=0xff; //tat
delay(10);
}
}
void nhay_chu(){
P0=P2=0xff; //tat ca tat
delay(20);
/*Chu HAPPY o P0 co ma sang la 0xE0 = 1110 0000
Chu NEW o P0 co ma sang la 0x1F = 0001 1111
Chu YEAR o P2 co ma sang la 0xF0 = 1111 0000
Chu 2014 o P2 co ma sang la 0x0F = 0000 1111 */
P0=0xe0; //chu happy sang
delay(20);
P0=0x1F; //chu new sang
delay(20);
P0=0xff; //Tat P0 dong thoi
P2=0xF0; //chu year sang
delay(20);
P2=0x0F; //chu 2014 sang
delay(20);
P2=0xff; //tat P2
}
//Code by vuthai - SangTaoClub.Net
/*Chu Happy New Year 2014 co tat ca 16 ky tu
dung P0 va P2 de dieu khien chu vi 8x2=16
Dung muc logic 0 de lam chu sang*/
void main(){ //Chuong trinh chinh
P0=P2=0x00; //Tat ca sang
delay(20); //Tre 1s do 20x50=1000ms=1s
TMOD=0x01;
while(1){
lan_luot(); //Goi ctr con nhay lan luot
xen_ke(); //Goi ctr con nhay xen ke
nhap_nhay(); //Goi ctr con nhap nhay
nhay_chu(); //Goi ctr con nhay chu
//.............co the viet them.........
}
}
Mạch nguyên lý:
Toàn bộ code và mô phỏng trên proteus 7.8: http://www.mediafire.com/?rj75dtf8bb5v9rg
Lưu ý: mô phỏng ko có điện trở hạn dòng còn khi mắc thực tế phải có trở cho led, nếu mắc nhiều bóng thì dùng Tranzito PNP (do mức logic 0 output) để kích dòng, công suất cho nhiều LED có thể dùng TIP42
Bài viết sửa lúc 13-01-2014, 19:59 bởi Vũ Văn Thái