Hướng dẫn LED MATRIX CHẠY CHỮ - PIC16F877A

demon52

Kỹ sư
#1
Dear all,
Buổi chiều đang ngồi buồn bị một người buzz bắt viết cái tut về led matrix :-". Tìm khắp máy mà mấy cái code ngày xưa viết không hiểu sao không chạy nữa :-s. Thôi thì cũng đang rảnh nên ngồi viết code luôn.
Project này viết với PIC 16F877A một con vô cùng cơ bản, sử dụng 4 led matrix 8*8 => Matrix LED 8*32. Code demo đã chạy ngon lành, code dịch chữ tầm 5 tới 7 dòng anh em nào chưa làm về ledmatrix đọc sẽ hiểu ngay, cực ngắn gọn và xúc tích.
CODE:
PHP:
//==============================================================================
// Ten chuong trinh : Mach Ledmatrix Run Text
// Nguoi thuc hien : demon52
// Ngay thuc hien : 24/10/2012
// Phien ban : Demo
// Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz
// : 74HC595
// : PortB dung dieu khien!
//------------------------------------------------------------------------------
// Notes:
// : dung che do Power On Reset
//==============================================================================
#include <16F877A.h>
#include <def_877a.h>
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <string.h>
#include "font.c"
 
#define ic595_sclk1 PIN_B0
#define ic595_data1  PIN_B1
#define ic595_lclk1 PIN_B2
#define ic595_sclk2 PIN_B3
#define ic595_data2  PIN_B4
#define ic595_lclk2 PIN_B5
 
unsigned int8 next=0,lengh_STR;
unsigned char count=0;
unsigned char welcome[]=" http://codientu.org  ";
unsigned char *str;
#int_timer0
void ngat_time0()
  {
  set_timer0(8);
  count++;
  if(count==25){
      count=0;
      next++;
      if(next>=lengh_STR)next=0;
      }
  }
 
void Ic74595_Write(char data,char ic,char bits)
  {
  signed char count;   
  if(ic==1)     
      {
      for(count=bits-1;count>=0;count--)
        {
        if((( data>>count) & 0x01) ==1)
            output_high(ic595_data1);
        else
            output_low(ic595_data1);
        output_high(ic595_sclk1);
        output_low(ic595_sclk1);
        }
      output_high(ic595_lclk1);
      output_low(ic595_lclk1);
      }
  if(ic==2)     
      {
      for(count=bits-1;count>=0;count--)
        {
        if((( data>>count) & 0x01) ==1)
            output_high(ic595_data2);
        else
            output_low(ic595_data2);
        output_high(ic595_sclk2);
        output_low(ic595_sclk2);
        }
      output_high(ic595_lclk2);
      output_low(ic595_lclk2);
      }
  }
 
void Run_str_RtoL()
  {
  lengh_str=strlen(str)*6;
  unsigned char j,temp_font;
  Ic74595_Write(1,1,1);
  for(j=next;j<32+next;j++){
      Temp_font=font[str[(j%lengh_STR)/With_of_font] -32][j%With_of_font];
      Ic74595_Write(temp_font,2,8);
      delay_us(500);
      Ic74595_Write(0,1,1);
      }
  }
 
void main (){
  TRISB=0x00;
  enable_interrupts(int_timer0);
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
  enable_interrupts(global);
  set_timer0(8);
  str=welcome;
    while(1){
            Run_str_RtoL();
            }
}
DEMO PROTEUS 7.10sp0
Vntech24h PIC MATRIX DEMO.jpg

Code và file mô phỏng được đính kèm.
Chú ý: Mình viết code theo kiểu lib, file font chứa mã hex các kí tự hiển thị ( viết theo bảng mã ASCII), sử dụng con trỏ để quét led vì vậy khi muốn hiển thị chữ khác các bạn chỉ cần sửa dòng unsigned char welcome[]= " http:/ / codientu. org" ; ( viết rời ra để khỏi bị bắt link tới 4rum) thành dòng cần hiển thị, hoặc add thêm biến khác và sửa ở dòng str=welcome; Cách viết này mình viết với mục đích phát triển lên giao tiếp với PC ( từ ngày xưa) nên rất tiện. Tuy nhiên đây là phiên bản public nên code mình chưa tối ưu hết cơ, có thể làm mạch thật sẽ có hiệu ứng giật, nhấp nháy led... bảng mã font ASCII mình add vào chỉ đủ hiển thị dòng chữ " http:/ / codientu. org" , nếu muốn hiển thị dòng chữ khác các bạn sẽ phải tự tạo mã cho mình. Vì mình muốn các bạn tự học tự làm nên ko public hết!
Chúc mọi người buổi tối vui vẻ :).
Link down: Project
 

demon52

Kỹ sư
#5
Làm mạch thì bạn phải tự mua led về, tạo footpint, layout, hàn mạch... trên 4rum chỉ hỗ trợ code và mô phỏng được thôi bạn ạ, mấy cái kia bạn phải tự tìm hiểu và làm thôi, vướng mắc gì post lên mọi người biết sẽ giúp.
 

kumock

Học sinh phổ thông
#6
quet 5 con thi phai nhu the nao a. e moi hoc dien nen khong biet mong cac a chi voi
 

bioman

Học sinh phổ thông
#8
Anh ơi cho em hỏi tại sao em thử tạo project với các file của anh mà nó báo mảng font chữ quá lớn là sao ạ? trong khi a vẫn compile được ?
 

demon52

Kỹ sư
#10
Anh ơi cho em hỏi tại sao em thử tạo project với các file của anh mà nó báo mảng font chữ quá lớn là sao ạ? trong khi a vẫn compile được ?
mình lưu vào flash
 

Quảng cáo Google