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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
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
 


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à 10:08 AM.


Đượ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