PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 11-12-2011, 11:11 AM   #1
fan.pic
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Nơi Cư Ngụ: Khoa: Cơ khí - Trường Đại học Bách khoa Đà Nẳng
Bài gửi: 27
:
Send a message via Yahoo to fan.pic
không hiểu buffer trong code led matrix

minh có đoạn code này, đã mô phỏng thành công
////////////////////////////////////////////////////////////////
//-----------------------LED Matrix 8x48----------------------//
// Phan cung: PIC 16F877 - Crystal 20MHz //
// IC chot dich 74HC595 //
// IC dem dong ULN2803 //
// Copy right: http://www.k43ddk.net //
////////////////////////////////////////////////////////////////

/*-------------------------------------------------------------*/
/*-------------------Khai bao cac thu vien---------------------*/
/*-------------------------------------------------------------*/
#include<16f877a.h>
#include<font5x7.c>
#use delay(clock=20m)

#byte portb = 0x06
#byte portd = 0x08
#byte trisb = 0x86
#byte trisd = 0x88
#byte led_data = portb

#bit clock = Portd.5
#bit latch = portd.6
#bit data = portd.7
/*-------------------------------------------------------------*/
/*----------------------Khai bao cac bien----------------------*/
/*-------------------------------------------------------------*/
int1 array[48];
char Ram[48];//
char display_buffer[48];//4led matran
char font_buffer[6]={0xff,0xff,0xff,0xff,0xff,0xff};//
char const string1[]="abcdefgh";
char addr,size=48,str_len,ky_tu,vi_tri;
/*-------------------------------------------------------------*/
/*---------------------Khai bao mau cac ham--------------------*/
/*-------------------------------------------------------------*/
void HC595_(char);
void leng_str(void);
void coppy_font(void);
void display_R_L(void);
//void display_T_B(void);
/*-------------------------------------------------------------*/
/*------------------------Ngat timer 0-------------------------*/
/*-------------------------------------------------------------*/
#int_timer0
void quet_led(void){//sau 5ms thi thay doi led sang
set_timer0(6);//cai dat gia tri ban dau cho timer0
led_data=0xff;
HC595_(addr);
led_data=display_buffer[addr];
addr++;
if(addr==size){
addr=0;
}
}
/*-------------------------------------------------------------*/
/*----------------------Chuong trinh chinh---------------------*/
/*-------------------------------------------------------------*/
void main(void){
char k;
trisd=0x0; trisb=0x0;
portb=0x0; portd=0x0;

for(k=0;k<size;k++){
display_buffer[k]=0xff;
}

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); //tan so timer0 = precase/32
set_timer0(6); //Dat gia tri ban dau cho RTC
enable_interrupts(global); //Cho phep ngat toan cuc
enable_interrupts(int_rtcc); // Cho phep ngat dem vach

leng_str(); //Lay do dai cua xau can hien thi

while(true){
ky_tu=0;
while(ky_tu<str_len+1){
display_R_L();
delay_ms(50);
}
}
}
/*-------------------------------------------------------------*/
/*---------------------------Cac ham---------------------------*/
/*-------------------------------------------------------------*/
// Ham nap data vao 74HC595
void HC595_(char colum){
char ii=0;
while(ii<colum){
data=0; // Dua bit 0 vao 74HC595
clock=1; // Tao 1 xung o chan clock cua 595 de dua data vao thanh ghi dich
clock=0;
ii++;
}
data=1; // Dua bit 1 vao vi tri cot can hien thi
clock=1; // Tao 1 xung o chan clock cua 595 de dua data vao thanh ghi dich
clock=0;
ii=colum+1;
while(ii<size){
data=0; // Tiep tuc dua bit 0 vao 74HC595
clock=1; // Tao 1 xung o chan clock cua 595 de dua data vao thanh ghi dich
clock=0;
ii++;
}
latch=1; // Sau khi dua du 48 bit vao
latch=0; // Tao 1 xung o chan Latch cua 595 de day data ra
}
// Ham dem do dai chuoi ky tu
void leng_str(void){
str_len=0;
while((string1[str_len])!=0){
str_len++;
if(str_len==255)
break;//Hien thi 255 Ki tu
}
}
// Ham copy font chu vao bo dem
void coppy_font(void){
char jj;
for(jj=0;jj<5;jj++){
font_buffer[jj]=font[(string1[ky_tu]-32)].b[jj];//coppy ma font (5byte) tu ky tu can hien thi vao bo dem buffer_font
}
}
// Ham hien thi
void display_R_L(void){
char kk;
for(kk=0;kk<size;kk++){
display_buffer[kk]=display_buffer[kk+1];
}
display_buffer[size-1]=font_buffer[vi_tri];
vi_tri++;
if(vi_tri>5){//copy het cac byte du lieu tu font_buffer
vi_tri=0;
coppy_font();
ky_tu++;
}
}
/*-------------------------------------------------------------*/
/*--------------------------THE END----------------------------*/
/*-------------------------------------------------------------*
tại sao ở display_buffer là 48 mà không phai la số khác, mình thay lại 32 hoặc 40 thi thấy mô phong không chạy dược ???????????
__________________
------------------Tham gia diễn đàn với tinh thần: HỌC HỎI LÀ CHÍNH----------------------
fan.pic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-12-2011, 07:52 PM   #2
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
Ma trận của bạn là 8x48 như vậy sẽ có 48 cột. display_buffer của bạn sẽ có tương ứng 48 phần tử, mỗi phần tử là 8 bit (khai báo char mà).
Như vậy sẽ là 8 bit x 48 phần tử, tương ứng với 8 dòng x 48 cột led.
nhanh0112 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-12-2011, 07:53 PM   #3
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
Ma trận của bạn là 8x48 như vậy sẽ có 48 cột. display_buffer của bạn sẽ có tương ứng 48 phần tử, mỗi phần tử là 8 bit (khai báo char mà).
Như vậy sẽ là 8 bit x 48 phần tử sẽ tương ứng với 8x48 led
Hic... mạng bị lag. Post 2 bài liên. Mod xóa giùm

thay đổi nội dung bởi: nhanh0112, 13-12-2011 lúc 07:59 PM.
nhanh0112 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-12-2011, 03:46 PM   #4
fan.pic
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Nơi Cư Ngụ: Khoa: Cơ khí - Trường Đại học Bách khoa Đà Nẳng
Bài gửi: 27
:
Send a message via Yahoo to fan.pic
nhưng tại sao trong file mô phỏng protues chỉ có 4 led matrix. Nếu như vậy thì phải là 4x8=32 cột mới đúng chứ bạn. không biết 48-32=16 cột còn lại là cái gì ??? Mình vẫn chưa hiểu lắm !
__________________
------------------Tham gia diễn đàn với tinh thần: HỌC HỎI LÀ CHÍNH----------------------
fan.pic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-12-2011, 10:29 PM   #5
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
Trích:
Nguyên văn bởi fan.pic View Post
nhưng tại sao trong file mô phỏng protues chỉ có 4 led matrix. Nếu như vậy thì phải là 4x8=32 cột mới đúng chứ bạn. không biết 48-32=16 cột còn lại là cái gì ??? Mình vẫn chưa hiểu lắm !
Đó là việc mở rộng thêm led, bạn thử lắp thêm vài led nữa xem sao, chắc vẫn chạy thôi. Nếu bạn muốn giảm giá trị của phần tử mạng buffer thì bạn phải giảm nhiều vấn đề khác tương ứng.
nhanh0112 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-12-2011, 11:52 PM   #6
fan.pic
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Nơi Cư Ngụ: Khoa: Cơ khí - Trường Đại học Bách khoa Đà Nẳng
Bài gửi: 27
:
Send a message via Yahoo to fan.pic
cảm ơn bạn nhiều nghen !
__________________
------------------Tham gia diễn đàn với tinh thần: HỌC HỎI LÀ CHÍNH----------------------
fan.pic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-12-2011, 03:11 AM   #7
fan.pic
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Nơi Cư Ngụ: Khoa: Cơ khí - Trường Đại học Bách khoa Đà Nẳng
Bài gửi: 27
:
Send a message via Yahoo to fan.pic
bạn ơi ! mình không hiểu biến addr có khai báo nhưng không gán giá trị ban đầu mà lại gọi hàm HC595_(addr) ???????????
Giải thích giùm mình chổ này với
__________________
------------------Tham gia diễn đàn với tinh thần: HỌC HỎI LÀ CHÍNH----------------------
fan.pic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-12-2011, 02:52 PM   #8
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
Trích:
Nguyên văn bởi fan.pic View Post
bạn ơi ! mình không hiểu biến addr có khai báo nhưng không gán giá trị ban đầu mà lại gọi hàm HC595_(addr) ???????????
Giải thích giùm mình chổ này với
Người viết code ko khởi tạo biến này cũng là một thiếu sót, nhưng thường thì biến khởi tạo có giá trị là 0. Và như đoạn code dưới thì addr sẽ chạy từ 0-size (trường hợp này khai báo ban đầu là size=48). và khi addr=48 thì được thiết lập trở lại addr=0.
Trong tình huống này người viết code này muốn đẩy giá trị ra 595 tương ứng với cột muốn quét đây mà.
**
HC595_(addr);
led_data=display_buffer[addr];
addr++;
if(addr==size){
addr=0;
**
nhanh0112 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-12-2011, 12:26 AM   #9
fan.pic
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Nơi Cư Ngụ: Khoa: Cơ khí - Trường Đại học Bách khoa Đà Nẳng
Bài gửi: 27
:
Send a message via Yahoo to fan.pic
cảm ơn bạn nhiều lăm, bây gio thi minh hiểu bản chất của code rồi.
__________________
------------------Tham gia diễn đàn với tinh thần: HỌC HỎI LÀ CHÍNH----------------------
fan.pic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-03-2012, 11:34 PM   #10
cutieo
Nhập môn đệ tử
 
Tham gia ngày: Apr 2011
Bài gửi: 4
:
void leng_str(void){
str_len=0;
while((string1[str_len])!=0){
str_len++;
if(str_len==255)
break;//Hien thi 255 Ki tu
}
}
máy bạn giai thich dum minh cách lấy đô dài của code như thế nào vậy
cutieo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-04-2012, 12:07 AM   #11
cutieo
Nhập môn đệ tử
 
Tham gia ngày: Apr 2011
Bài gửi: 4
:
vơi lai minh không biết khi nào thi chuong trình con void HC595_(char colum) dược gọi ra nhỉ
cutieo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-04-2012, 10:31 PM   #12
cutieo
Nhập môn đệ tử
 
Tham gia ngày: Apr 2011
Bài gửi: 4
:
minh ko dùng ngắt time mà chuyen sang dùng delay thì phải sửa lại ntn nhỉ
cutieo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:41 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam