Welcome & Happy Holidays!
Trang 1 của 7 123 ... CuốiCuối
Kết quả 1 đến 10 của 63
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    LED MATRIX CHẠY CHỮ - PIC16F877A

    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:


    Mã nguồn PHP:
    [COLOR=#000000]
    [/COLOR][COLOR=#FF8000]//==============================================================================// 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 [/COLOR][COLOR=#0000BB]unsigned int8 next[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]lengh_STR[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]unsigned char count[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]unsigned char welcome[/COLOR][COLOR=#007700][]=[/COLOR][COLOR=#DD0000]" http://************* "[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]unsigned char [/COLOR][COLOR=#007700]*[/COLOR][COLOR=#0000BB]str[/COLOR][COLOR=#007700];[/COLOR][COLOR=#FF8000]#int_timer0[/COLOR][COLOR=#0000BB]void ngat_time0[/COLOR][COLOR=#007700]() { [/COLOR][COLOR=#0000BB]set_timer0[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]8[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]++; if([/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]==[/COLOR][COLOR=#0000BB]25[/COLOR][COLOR=#007700]){ [/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]next[/COLOR][COLOR=#007700]++; if([/COLOR][COLOR=#0000BB]next[/COLOR][COLOR=#007700]>=[/COLOR][COLOR=#0000BB]lengh_STR[/COLOR][COLOR=#007700])[/COLOR][COLOR=#0000BB]next[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; } } [/COLOR][COLOR=#0000BB]void Ic74595_Write[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]char data[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]char ic[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]char bits[/COLOR][COLOR=#007700]) { [/COLOR][COLOR=#0000BB]signed char count[/COLOR][COLOR=#007700]; if([/COLOR][COLOR=#0000BB]ic[/COLOR][COLOR=#007700]==[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) { for([/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]bits[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]>=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]--) { if((( [/COLOR][COLOR=#0000BB]data[/COLOR][COLOR=#007700]>>[/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000BB]0x01[/COLOR][COLOR=#007700]) ==[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]output_high[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_data1[/COLOR][COLOR=#007700]); else [/COLOR][COLOR=#0000BB]output_low[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_data1[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]output_high[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_sclk1[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]output_low[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_sclk1[/COLOR][COLOR=#007700]); } [/COLOR][COLOR=#0000BB]output_high[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_lclk1[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]output_low[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_lclk1[/COLOR][COLOR=#007700]); } if([/COLOR][COLOR=#0000BB]ic[/COLOR][COLOR=#007700]==[/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) { for([/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]bits[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]>=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]--) { if((( [/COLOR][COLOR=#0000BB]data[/COLOR][COLOR=#007700]>>[/COLOR][COLOR=#0000BB]count[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000BB]0x01[/COLOR][COLOR=#007700]) ==[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]output_high[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_data2[/COLOR][COLOR=#007700]); else [/COLOR][COLOR=#0000BB]output_low[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_data2[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]output_high[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_sclk2[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]output_low[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_sclk2[/COLOR][COLOR=#007700]); } [/COLOR][COLOR=#0000BB]output_high[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_lclk2[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]output_low[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ic595_lclk2[/COLOR][COLOR=#007700]); } } [/COLOR][COLOR=#0000BB]void Run_str_RtoL[/COLOR][COLOR=#007700]() { [/COLOR][COLOR=#0000BB]lengh_str[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]strlen[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]str[/COLOR][COLOR=#007700])*[/COLOR][COLOR=#0000BB]6[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]unsigned char j[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]temp_font[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]Ic74595_Write[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]); for([/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]next[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]<[/COLOR][COLOR=#0000BB]32[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#0000BB]next[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]++){ [/COLOR][COLOR=#0000BB]Temp_font[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]font[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]str[/COLOR][COLOR=#007700][([/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]%[/COLOR][COLOR=#0000BB]lengh_STR[/COLOR][COLOR=#007700])/[/COLOR][COLOR=#0000BB]With_of_font[/COLOR][COLOR=#007700]] -[/COLOR][COLOR=#0000BB]32[/COLOR][COLOR=#007700]][[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]%[/COLOR][COLOR=#0000BB]With_of_font[/COLOR][COLOR=#007700]]; [/COLOR][COLOR=#0000BB]Ic74595_Write[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]temp_font[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]8[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]delay_us[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]500[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]Ic74595_Write[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]); } } [/COLOR][COLOR=#0000BB]void main [/COLOR][COLOR=#007700](){ [/COLOR][COLOR=#0000BB]TRISB[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]0x00[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]enable_interrupts[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]int_timer0[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]setup_timer_0[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]RTCC_INTERNAL[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]RTCC_DIV_256[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]enable_interrupts[/COLOR][COLOR=#007700](global); [/COLOR][COLOR=#0000BB]set_timer0[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]8[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]str[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]welcome[/COLOR][COLOR=#007700]; while([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]){ [/COLOR][COLOR=#0000BB]Run_str_RtoL[/COLOR][COLOR=#007700](); }}[/COLOR] 
    DEMO PROTEUS 7.10sp0


    [IMG]http://*************/attachments/11402/[/IMG]

    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

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    có hướng dẫn làm bảng led này không anh

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Có code có mô phỏng bạn còn muốn hướng dẫn gì nữa?

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ý em là làm bảng led 32x8 đó anh

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    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.

  6. #6
    Ngày tham gia
    Oct 2015
    Bài viết
    0
    quet 5 con thi phai nhu the nao a. e moi hoc dien nen khong biet mong cac a chi voi

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kumock
    quet 5 con thi phai nhu the nao a. e moi hoc dien nen khong biet mong cac a chi voi
    sao hok thấy ai viết bằng chương trình ASM hết dzậy nà.....help me.....

  8. #8
    Ngày tham gia
    Apr 2016
    Bài viết
    24
    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 ?

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kakaducsy
    ý em là làm bảng led 32x8 đó anh
    Chắc mua rẻ hơn, và chuyên nghiệp hơn bạn à. Tuy nhiên tự mình cũng làm được, nhưng chắc đắt hơn và không đẹp bằng. Có một cái hơn là tự hào vì tự tay mình làm ra nó.:-q

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi bioman
    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

 

 
Trang 1 của 7 123 ... CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 05:37 AM. Diễn đàn sử dụng vBulletin® Phiên bản 4.2.5.
Bản quyền của 2018 vBulletin Solutions, Inc. Tất cả quyền được bảo lưu.
Ban quản trị không chịu trách nhiệm về nội dung do thành viên đăng.