Nguyên văn bởi nghaiha
Xem bài viết
Thông báo
Collapse
No announcement yet.
Tutorial: Led ma trận bằng hình ảnh (completed)
Collapse
This is a sticky topic.
X
X
-
cái file đính kèm orcad bị lỗi rùi anh ạ. trên diễn dàn có anh nào vẽ lại rồi post lên cho em với. em đang cần gấp các pác ạ
-
em đã làm bảng led với bài lập trình này .chạy chữ rất ok!không xảy ra tình trạng bóng mờ hay mất xung gì cả.
Leave a comment:
-
hix!! bài lập trình của bác phamngoc lằng nhằng quá!!
em có cách viết như thế này không cần dùng SPI luôn. các bác xem thử và đóng góp ý kiến
/************************************************** ***
LEDMATRIX 16X48
Chip type : ATmega32
Program type : Application
Clock frequency : 11.059200 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 512
************************************************** ***/
#include <mega32.h>
#include <delay.h>
/************************************************** ***/
#define SCK PORTB.0
#define DATA PORTB.1
#define SCL PORTB.2
/************************************************** ***/
#define A PORTA.0
#define B PORTA.1
#define C PORTA.2
#define OE PORTA.3
/************************************************** ***/
unsigned char i,j;
unsigned char m=0,n;
unsigned char k;
bit tmp;
/************************************************** ***/
unsigned char Led[16][12]={
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 56, 224, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 198, 24, 3, 0, 0, 0, 0, 0, 0,
0, 199, 1, 1, 5, 4, 128, 225, 129, 227, 191, 79,
224, 56, 2, 1, 2, 4, 192, 57, 226, 228, 63, 71,
16, 69, 4, 1, 0, 4, 224, 25, 114, 40, 39, 71,
8, 130, 4, 1, 0, 4, 208, 25, 115, 0, 7, 71,
8, 128, 4, 2, 0, 2, 200, 225, 112, 0, 7, 71,
8, 128, 2, 4, 0, 1, 252, 27, 115, 0, 7, 71,
16, 64, 1, 8, 128, 0, 192, 25, 114, 0, 7, 71,
32, 160, 0, 16, 64, 0, 192, 25, 98, 8, 7, 71,
64, 80, 0, 32, 32, 0, 224, 243, 225, 4, 7, 71,
128, 40, 0, 64, 16, 0, 0, 0, 192, 131, 15, 62,
0, 21, 0, 128, 8, 0, 0, 0, 0, 0, 0, 0,
0, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0
};
/************************************************** ***/
void xuatdata(char data) {
for(k=0;k<8;k++) { //1 biến kiểu unsigned char có 8bit
if (data & 0x80) //kiểm tra xem bit thứ 8 là 0 hay 1
DATA = 0; //nếu bằng 1 thì DATA=0;
else DATA = 1; //nếu bằng 0 thi DATA=1;
data = data << 1; //dịch qua phải 1 bit
// bỏ đi thứ 8 vừa đẩy chân 595 và đưa bit thứ 7 vào chỗ bit thứ 8
//bit đầu tiên gán giá tri bằng 0 (cái này ko cần quan tâm)
//lần lược xuất data của 8 bit
SCK = 0;
SCK = 1;
}
}
/************************************************** ***/
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
for(n=6;n>0;n--) //48 cột = 6*8 led (xem như là "6 led" mỗi led 8 led đơn)
xuatdata(Led[m][n-1]); //ta chỉ đưa data của "6 led" thôi(bằng phần cứng)
SCL=0;
SCL=1;
PORTA=m; //quét hàng từ 0 đến 15
m++ ;
if (m==16) m=0;
}
/************************************************** ***/
void main(void)
{
DDRA=0xFF;
DDRB=0xFF;
DDRD=0xFF;
TCCR0=0x03; //
TCNT0=0x00; //
OCR0=0x5A; //tinh tan so quet
TIMSK=0x02;
ACSR=0x80;
SFIOR=0x00;
#asm("sei")
SCK=1;
SCL=1;
/*********** CHAY CHU TU TRAI QUA PHAI **********/
while(1)
{
for(i=0;i<16;i++) //16 hàng
{
tmp=Led[i][0]&0x01;
//dùng biến tmp để lưu gía trị của bit đầu tiên của con led đầu tiên
for(j=1;j<12;j++)
{
if(Led[i][j]&0x01) //lấy bit đầu tiên của led thứ i gán cho bit thứ 8 của led i-1
Led[i][j-1]=(Led[i][j-1]>>1)|0x80;
else
Led[i][j-1]=Led[i][j-1]>>1;
}
if(tmp) //nếu tmp =1 thì gán cho bit thứ 8 của led cuối cùng
Led[i][11]=(Led[i][11]>>1)|0x80;
else //nếu tmp =0 thì chỉ cần dịch trái 1 bit
Led[i][11]=Led[i][11]>>1;
}
delay_ms(100);
};
}
Leave a comment:
-
Em đang làm bảng led 16*64, phần hiển thị led em đã làm xong rồi. Anh nghaiha có kinh nghiệm làm led ma trận xin giúp đỡ em phần mạch điều khiển với, em thây mạch ĐK của anh làm rất pro nên mong anh giúp đỡ em sơ đồ nguyên lý + layout mạch ĐK. Đây là ơ đồ led của em:
Sơ đồ này là module 2 led mở rộng được.Attached Files
Leave a comment:
-
Xin chào mọi người.Mình đang làm bài tâp lớn về ma trận led.nhưng mà phần chữ dịch phải trái vẫn chưa làm dc.ai xem hộ mình viết trong chương trình chính thì phần while(1) phải viết thế nào nha.Mình làm y hệt bài của bác Nghaiha mà.
for (k=0;k<=7;k++){
delay_ms(10);
}
for (i=0;i<=23;i++){
DMem[i]>>=1;
}
}
mình ko hiểu bác Haiha dịch bít trước như thế nào.mình chỉ thấy chữ dịch dc 1 ít thôi rồi mất luôn.bác Haiha và mọi người giúp đỡ mình với...please!!!!
Leave a comment:
-
-
/************************************************** ***
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :LED MATRIX 8x32 ,quet hang
Version :
Date : 4/7/2009
Author :
Company :
Comments: 74259+2803 quet hang(K) ,74595 xuat data ra cot(A) ,2 mau (neu muon them mau nua thi cho red=0;blue=0),dung 2 bo dem de hien thi man hinh
Chip type : ATmega8
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega8.h>
#include <delay.h>
#define DATA PORTB.3
#define SCL PORTB.4
#define SCK PORTB.5
#define blue PORTD.0
#define red PORTD.1
//Bang ma chu so tu 0 den 9 luu vao flash
unsigned char flash bang[]={
0,0,0,0,112, 0,0,0,0,137, 0,0,0,0,138, 0,0,0,0,136, 0,0,0,0,136, 0,0,0,0,136, 0,0,0,0,115, 0,0,0,0,0,
0,0,0,112,135, 0,0,0,137,136, 0,0,0,138,136, 0,0,0,136,129, 0,0,0,136,134, 0,0,0,136,136, 0,0,0,115,239, 0,0,0,0,0,
0,0,112,135,62, 0,0,137,136,130, 0,0,138,136,140, 0,0,136,129,2, 0,0,136,134,34, 0,0,136,136,34, 0,0,115,239,156, 0,0,0,0,0,
0,112,135,62,131, 0,137,136,130,130, 0,138,136,140,139, 0,136,129,2,136, 0,136,134,34,250, 0,136,136,34,10, 0,115,239,156,9, 0,0,0,0,0,
112,135,62,131,225, 137,136,130,130,2, 138,136,140,139,196, 136,129,2,136,39, 136,134,34,250,40, 136,136,34,10,40, 115,239,156,9,199, 0,0,0,0,0,
135,62,131,225,62, 136,130,130,2,2, 136,140,139,196,4, 129,2,136,39,8, 134,34,250,40,136, 136,34,10,40,136, 239,156,9,199,8, 0,0,0,0,0,
62,131,225,62,113, 130,130,2,2,138, 140,139,196,4,138, 2,136,39,8,113, 34,250,40,136,136, 34,10,40,136,136, 156,9,199,8,113, 0,0,0,0,0,
131,225,62,113,192, 130,2,2,138,32, 139,196,4,138,32, 136,39,8,113,192, 250,40,136,136,64, 10,40,136,136,128, 9,199,8,113,0, 0,0,0,0,0,
225,62,113,192,0, 2,2,138,32,0, 196,4,138,32,0, 39,8,113,192,0, 40,136,136,64,0, 40,136,136,128,0, 199,8,113,0,0, 0,0,0,0,0,
62,113,192,0,0, 2,138,32,0,0, 4,138,32,0,0, 8,113,192,0,0, 136,136,64,0,0, 136,136,128,0,0, 8,113,0,0,0, 0,0,0,0,0,
113,192,0,0,0, 138,32,0,0,0, 138,32,0,0,0, 113,192,0,0,0, 136,64,0,0,0, 136,128,0,0,0, 113,0,0,0,0, 0,0,0,0,0,
192,0,0,0,0, 32,0,0,0,0, 32,0,0,0,0, 192,0,0,0,0, 64,0,0,0,0, 128,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0};
//Khai bao 2 bo dem de hien thi man hinh
unsigned char manhinh_1[32];
unsigned char manhinh_2[32];
//khai bao 5 byte de chua ma
unsigned char byte1,byte2,byte3,byte4,byte5;
//khai bao 4 bien de tang so dem
unsigned int a=0;
//khai bao bien de dich bit
unsigned char n=0,j=0;
unsigned int k=0;
void bodem_1(void)
{
unsigned int i;
n++;
for(i=0;i<8;i++)
{
//lay du lieu tu bang ma trong flash
byte1=bang[i*5+0+a];
byte2=bang[i*5+1+a];
byte3=bang[i*5+2+a];
byte4=bang[i*5+3+a];
byte5=bang[i*5+4+a];
// tao 4 byte moi bang cach dich bit roi luu vao man hinh 1
manhinh_1[i*4+0] = (byte1<<n)|(byte2>>8-n);
manhinh_1[i*4+1] = (byte2<<n)|(byte3>>8-n);
manhinh_1[i*4+2] = (byte3<<n)|(byte4>>8-n);
manhinh_1[i*4+3] = (byte4<<n)|(byte5>>8-n);
}
}
void bodem_2(void)
{
unsigned int i;
n++;
for(i=0;i<8;i++)
{
//lay du lieu tu bang ma
byte1=bang[i*5+0+a];
byte2=bang[i*5+1+a];
byte3=bang[i*5+2+a];
byte4=bang[i*5+3+a];
byte5=bang[i*5+4+a];
// tao 4 byte moi
manhinh_2[i*4+0] = (byte1<<n)|(byte2>>8-n);
manhinh_2[i*4+1] = (byte2<<n)|(byte3>>8-n);
manhinh_2[i*4+2] = (byte3<<n)|(byte4>>8-n);
manhinh_2[i*4+3] = (byte4<<n)|(byte5>>8-n);
}
if(n==8)
{
n=0;
a=a+40;
if(a==520)
{
a=0;
red=~red;
blue=~blue;
}
}
}
void spi(unsigned char CDATA)
{
unsigned char i;
for(i=0;i<8;i++)
{
DATA = (CDATA<<i)&0x80;
SCK=1; SCK=0;
}
}
void display_1(void)
{
spi(manhinh_1[k*4]);
spi(manhinh_1[k*4+1]);
spi(manhinh_1[k*4+2]);
spi(manhinh_1[k*4+3]);
}
void display_2(void)
{
spi(manhinh_2[k*4]);
spi(manhinh_2[k*4+1]);
spi(manhinh_2[k*4+2]);
spi(manhinh_2[k*4+3]);
}
void main(void)
{
DDRB=0xFF;
DDRC=0xFF;
DDRD=0xFF;
PORTB=0x00;
PORTC=0x00;
blue=1;
red=0;
//Khoi tao time1 ngat mode CTC COMPA
TCNT1=0x00;
TCCR1B=0x09;
OCR1A=16000;
TIMSK=0x10;
#asm("sei")
bodem_1();
while(1)
{
//hien thi man hinh 1 ,layman hinh 2
bodem_2();
while(j<10);
bodem_1();
while(j>10);
}
}
//Trinh ngat tran timer1
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
if(blue)
{
if(j<10)
{
display_1();
// hien thi
red=1;
SCL=1; SCL=0;
PORTC=k;
red=0;
k++;
if(k==8)
{
k=0;
j++;
if(j==10) j=11;
}
}
else
{
display_2();
// hien thi
red=1;
SCL=1; SCL=0;
PORTC=k;
red=0;
k++;
if(k==8)
{
k=0;
j++;
if(j==20) j=0;
}
}
}
else
{
if(j<10)
{
display_1();
// hien thi
blue=1;
SCL=1; SCL=0;
PORTC=k;
blue=0;
k++;
if(k==8)
{
k=0;
j++;
if(j==10) j=11;
}
}
else
{
display_2();
// hien thi
blue=1;
SCL=1; SCL=0;
PORTC=k;
blue=0;
k++;
if(k==8)
{
k=0;
j++;
if(j==20) j=0;
}
}
}
}//ket thuc chuong trinhLast edited by phamngoc; 29-04-2009, 16:22.
Leave a comment:
-
AVR cho người mới bắt đầu
Em mới bắt đầu học AVR nên có thể nói là chưa biết gì cả.
Em muốn hỏi các anh là: AVR có những ưu, nhược điểm, thế mạnh, kiến trúc phần cứng như thế nào so với 8051.
Mong các anh giới thiệu rõ hơn về cả Tập thanh ghi của nó nữa để cho những người mới học như em được hiểu rõ hơn.
Cảm ơn các tiền bối.
Leave a comment:
-
Bạn HÀ ơi. Bạn có thể chỉ rõ hỏn về cách bạn dùng FET 4A với IC đệm 74245 dc ko? Với lại bạn có thể tính thử giúp mình phần công suất nếu mình làm bảng quang báo 2x12 led ma trận, dựa theo cách thiết kể dùng FET va IC đệm của bạn. Cảm ơn bạn nhìu.
Leave a comment:
-
Em cũng đang tập tành làm led ma trận. Em mới kiếm được phần mềm tạo mã cho led ma trận, không biết các bác có cần ko nhưng em thấy dùng rất nhanh, đỡ tốn công tính toán nên em cứ đưa lên đây
:
http://www.mediafire.com/download.php?yywtyjhwcnm
Leave a comment:
-
Mỗi chân 595 có 1 con trở mà bạn. Dòng qua mỗi led khoảng 10-15mA, loại led bầu dục này tuổi thọ cao lắm, ko dễ chết đâu...
Leave a comment:
-
@hightech_uc: Cái module này đảm bảo nó tốn điện ác bác nhỉ? bác có gì đo thử dòng trung bình (phía 220VAC) khi thắp sáng khoảng 10 module không.
Bác có module đó kiểm tra cho em chỗ này. Nguồn cung cấp của bác sẽ là 5V. Qua 595 cấp nguồn cho led cũng 5V. Nếu không quét mà cấp nguồn luôn thế này thì led chắc là chóng die. Vậy cái phần hạ áp xuống cho led nằm ở đâu hả bác?
Cám ơn bác.
Leave a comment:
-
Nó đây này. Bạn đếm xem có đủ 32 con 595 không...
http://www.maxup.vn/tai-ve/dlyce40fj...00001.jpg.html
http://www.maxup.vn/tai-ve/lmxawtt2u...00002.jpg.html
http://www.maxup.vn/tai-ve/hcvjvw0kd...00003.jpg.html
http://www.maxup.vn/tai-ve/1krcudsmb...00004.jpg.htmlLast edited by hightech_uc; 19-03-2009, 08:46.
Leave a comment:
-
Mấy module như thế này chỗ em có nhiều lắm, bác cho em xem làm gì. Em đang cần bác chứng minh điều bác nói cơ.Nguyên văn bởi hightech_uc Xem bài viếtKhông phải là 16x32 pixels đâu, là 8x16 pixels, kích cỡ vật lí mới là 16x32cm, như vậy mặt sau nó có 32 con 595 thôi. Và 32 con 595 này nắm trên một mạch in khoảng 2 dm2 cắm lên trên bo hàn led. Để tôi đưa video của nó lên cho bạn xem.
http://www.easy-share.com/1904061582/Led_Module.mp4
Leave a comment:
Bài viết mới nhất
Collapse
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
Hôm qua, 18:05 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
Hôm qua, 18:04 -
-
bởi bqvietDiễn đàn vốn vắng, muốn vào viết bài trả lời chút nhưng cứ thấy luồng nào thành viên này mở thì cũng đồng thời xuất hiện ở Otofun, thế là chùn tay ... Thôi thì dientuvietnam không thể so sánh được về độ phổ cập, biết thân biết phận vậy.
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 17:49 -
-
bởi chinhnguyen9So sánh sóng 2 mạch nguồn Push-pull
· Sóng vuông giửa 2 cực D của mạch Pushpull trong module inverter 24-220V sine giả của TQ. Mạh điện này khá đặc biêt ở chổ, không thấy mạch snubber mà hiêu quả triêt sóng hài quá tốt dù hoạt...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 14:27 -
-
bởi chinhnguyen9Mạch điên bếp tù gộm 2 khối:
Khối điêu khiển:
-Thiết lập công suất nấu
-Thiết lập thời gian nấu
-Kiểm tra có đặt nồi hay không, đúng loại hay không?
-Có quá nhiệt không?
Khối công suất:
- Nắn+ lọc điên AC ra 310VDC +loọc nhiểu...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 14:05 -
-
bởi ittcHi các bác, sau khi được vài lời khuyên thì em có vào lướt web để xem vài mẫu máy, thì ở phần thông số kỹ thuật của máy, thấy họ để vài thông số sau thì em không rành lắm, nhờ các bác giải thích hộ em được không, cụ thể như hình...
-
Channel: Điện tử gia dụng
15-03-2026, 18:34 -




. em mong các bác giúp em nhé

Leave a comment: