Kết quả 1 đến 10 của 63
Chủ đề: LED MATRIX CHẠY CHỮ - PIC16F877A
-
10-25-2012, 04:19 AM #1
Junior Member
- 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]
[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: ProjectView more random threads:
- LED MATRIX CHẠY CHỮ - PIC16F877A
- mini kit pic 16f877a
- mạch cảm biến ánh sáng
- PID điều khiên tốc độ động cớ DC
- Timer và cách tính thông số cài đặt cho timer.
- Code dọc ADC hiện LCD vi điều khiển PIC và mô phỏng trong Proteus
- led matran 8x8 sd pic16f887
- GIÚP EM MẠCH ĐO NHIỆT ĐỘ DÙNG PIC 16F877A VS LM 35
- anh chị nào biết về lập trinh vi xử lí trong pic16f877a giúp e với?
- Led quay
-
12-21-2012, 08:41 PM #2
Junior Member
- 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
-
12-22-2012, 04:04 AM #3
Junior Member
- 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?
-
12-22-2012, 08:04 AM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
ý em là làm bảng led 32x8 đó anh
-
12-22-2012, 08:41 AM #5
Junior Member
- 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.
-
12-27-2012, 02:41 AM #6
Silver member
- 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
-
12-27-2012, 04:13 AM #7
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi kumock
-
03-31-2013, 05:06 PM #8
Silver member
- 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 ?
-
03-31-2013, 05:38 PM #9
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi kakaducsy
-
04-08-2013, 10:30 PM #10
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi bioman
Quà tặng sinh nhật ý nghĩa cho...
Hôm nay, 06:48 PM in Rao vặt tổng hợp