Các led đơn trong cùng một hàng thì được nối chung anot catot còn trong cùng một cột thì được nối chung catot anot.. • Tại một thời điểm ta không thể hiển thị một kí tự với trên 2 hàng 2
Trang 1ĐẠI HỌC QUỐC GIA TPHCM
1 Hoàng Đình Trung 21204123
ĐỀ BÀI: CHẠY CHỮ TRÊN MA TRẬN LED
GVHD: THẦY ĐOÀN THẾ THẢO
SVTH:
Trang 2I Tổng quan:
Với sự phát triển rất nhanh của công nghệ ngày nay, việc lập trình
vi điều khiển trong các ứng dụng cuộc sống ngày càng phổ biến.
Dòng vi điều khiển PIC sản xuất bởi Microchip có nhiều tính năng đặc biệt, tốc độ cao, ổn định và nhiều công cụ cũng như nhiều thư viện hổ trợ
PIC được ứng dụng trong các dự án điều khiển tự động trong dân dụng, sản xuất, nghiên cứu và đo lường.
Ứng dụng PIC chạy chữ trên led ma trận rất phổ biến trong cuộc sống như làm biển quảng cáo, biển báo hay có thể dung làm trang trí.
Trang 3II Hiện chữ trên LED 3
• Led ma trận gồm các led xếp thành hàng và cột Các led đơn trong cùng một hàng thì được nối chung anot (catot) còn trong cùng một cột thì được nối chung catot (anot).
• Tại một thời điểm ta không thể hiển thị một kí tự (với trên 2 hàng 2 cột) trên ma trận Do đó để có thể hiển thị một kí tự trên led ma
trận thì ta phải lợi dụng hiện tượng lưu ảnh trên võng mạc Ta phải
để cho từng hàng (cột) của kí tự lần lượt kiện thị trên led ma trận với tần số cao
• Ta xác định mức logic rồi cấp nguồn cho hàng (cột) và cột (hàng) tương ứng đề led sáng theo mức logic ta xác định từ trước.
1 Nguyên tắc quét LED
Trang 4II Phương án quét led 4
• Trong bài tập lớn này chọn quét led theo cột.
• Led ma trận dùng là 8x8 vì vậy mỗi cột có 8 led Để mã hóa dữ liệu cho 1 cột ta dùng 1 byte.
• Ta lưu dữ liệu đã mã hóa vào 1 file để dùng khi lập trình.
• Độ rộng mỗi kí tự là 5 cột và byte cuối cùng là byte dữ liệu trống
để tạo khoảng cách giữa 2 kí tự Vậy có 6 byte để lưu dữ liệu xuất cho 1 kí tự
• Ta sử dụng IC 74HC595 để dịch bit.
2 Chọn phương án quét LED
Trang 53 Lưu đồ giải thuật: 5
Lấy mẫu dữ liệu
i = 1
Xuất dữ liệu của cả cột i ra 74HC595
i = i+1
i>8
B1: Lấy mẫu dữ liệu : lấy các dữ liệu
về mức logic cần cấp cho các cột
(hàng) của ma trận
B2: Bắt đầu với cột i=1.
B3: Cấp nguồn cho cột i
B4: Xuất dữ liệu tương ứng với cột
đó ( đã được lấy mẫu từ trước) để
cấp nguồn cho các hàng của ma
trận
B5: i=i+1 ; quay lại bước 2 nếu i>8
,nếu không thì quay lại bước 3
Trang 6III Giới thiệu dụng cụ:
Led ma trận bao gồm các led đơn
được xếp thành hàng và cột Các
led đơn trong cùng một hàng thì
được nối chung anot (catot) còn
trong cùng một cột thì được nối
chung catot (anot).
Để các led có thể sáng ta phải cấp
nguồn cho led như sau : cấp mức
cao (thấp) cho hàng và mức thấp
(cao) cho cột.
Trang 7III Giới thiệu dụng cụ:
Với cách sắp xếp như trên tại một
thời điểm ta không thể hiển thị một
kí tự (với trên 2 hàng 2 cột) trên ma
trận Do đó để có thể hiển thị một kí
tự trên led ma trận thì ta phải lợi
dụng hiện tượng lưu ảnh trên võng
mạc.
Ta phải để cho từng hàng (cột) của
kí tự lần lượt kiện thị trên led ma
trận với tần số cao
Trang 82 IC74HC595: 8
IC 74HC595 là ic ghi dịch kết hợp chốt dữ liệu, đầu
vào nối tiếp đầu ra song song.
Chân Q0 tới Q7: đầu ra dữ liệu song song.
Chân DS: chân đầu vào dữ liệu nối tiếp.
Chân VCC và GND: 2 chân cấp nguồn.
Chân OE (13): chân cho phép tích cực ở mức thấp
Khi chân này ở mức cao tất cả các đầu ra trở về trạng
thái cao trở.
Trang 92 IC74HC595:
9
Chân Q7’: chân dữ liệu nối tiếp.
Chân SH_CP: chân vào xung clock Khi có xung tích
cực sườn dương thì 1 bit được dịch vào ic.
Chân ST_CP: chân xung clock chốt dữ liệu Khi có
xung tích cực sườn dương thì xuất dữ liệu lên các
chân output
Chân MR: khi chân này xuống mức 0 thì dữ liệu trên
ic bị xóa
Trang 10IV Lưu đồ giải thuật:
10
Start
Xuất giá trị 32 cột bắt đầu từ next
Interrupts timer0
Next > độ dài chuổi
Đ
S
Next
Next =0
Next ++
Start
Giá trị cần xuất
Xuất mức cao hoặc mức thấp IC1 chạy
Xuất giá trị cho IC2 cấp mức điện dáp cho từng hàng
1
Chương
trình
chính:
2
Chương trình
con:
Trang 11V Code chương trình: 11
#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 "font.c"
#include <trung.h>
#define ic595_sck1 PIN_B0
#define ic595_data1 PIN_B1
#define ic595_lcl1 PIN_B2
#define ic595_sck2 PIN_B3
#define ic595_data2 PIN_B4
#define ic595_lcl2 PIN_B5
unsigned int8 next=0,lengh_STR;
unsigned char count=0;
unsigned char welcome[]=" DHBK CK12CD Trung Ngu Sang Thien ";
unsigned char *str;
#int_timer0 void ngat_time0() {
set_timer0(0);
count++;
if(count==25){
count=0;
next++;
if(next>lengh_STR) next=0;
} }
Trang 12IV Code chương trình: 12
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_sck1);
output_low(ic595_sck1);
}
output_high(ic595_lcl1);
output_low(ic595_lcl1);
}
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_sck2);
output_low(ic595_sck2);
} output_high(ic595_lcl2);
output_low(ic595_lcl2);
} }
Trang 13V Code chương trình: 13
void chaychu()
{
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(0);
str=welcome;
while(true){
chaychu();
} }
Trang 14VI: Mã hóa các chữ trong bài:
14
• #define With_of_font 6
• const char font[97][6]={
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
• 0xFF,0xFF,0xA0,0xFF,0xFF,0xFF,//! 1
• 0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,//' 2
• 0xEB,0x80,0xEB,0x80,0xEB,0xFF,//# 3
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//$ 4
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//% 5
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//& 6
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,,//' 7
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//( 8
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//) 9
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//* 10
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//+ 11
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//, 12
• 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//- 13
• 0xFF,0x9F,0x9F,0xFF,0xFF,0xFF,//x 14
0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,// / 15 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//0 16 0xBB,0xBD,0x80,0xBF,0xBF,0xFF,//1 17 0x8D,0xB6,0xB6,0xB6,0xB9,0xFF,//2 18 0xB6,0xB6,0xB6,0xB6,0xC9,0xFF,//3 19 0xE7,0xEB,0xED,0x80,0xEF,0xFF,//4 20 0xB0,0xB6,0xB6,0xB6,0xCE,0xFF,//5 21 0xC1,0xB6,0xB6,0xB6,0xCD,0xFF,//6 22 0xBE,0xDE,0xEE,0xF6,0xF8,0xFF,//7 23 0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,//8 24 0xB9,0xB6,0xB6,0xB6,0xC1,0xFF,//9 25 0xFF,0xC9,0xC9,0xFF,0xFF,0xFF,//: 26 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//// 27 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//< 28 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//= 29 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//> 30
Trang 15VI: Mã hóa các chữ trong bài:
15
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//? 31
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//@ 32
0x83,0xF5,0xF6,0xF5,0x83,0xFF,//A 33
0x80,0xB6,0xB6,0xB6,0xC9,0xFF,//B 34
0xE3,0xDD,0xBE,0xBE,0xDD,0xFF,//C 35
0x80,0xBE,0xBE,0xBE,0xC1,0xFF,//D 36
0x80,0xB6,0xB6,0xB6,0xB6,0xFF,//E 37
0x80,0xF6,0xF6,0xF6,0xF6,0xFF,//F 38
0xC1,0xBE,0xBE,0xAE,0x8D,0xFF,//G 39
0x80,0xF7,0xF7,0xF7,0x80,0xFF,//H 40
0xBE,0xBE,0x80,0xBE,0xBE,0xFF,//I 41
0xBE,0xBE,0xC0,0xFE,0xFE,0xFF,//J 42
0x80,0xF7,0xEB,0xDD,0xBE,0xFF,//K 43
0x80,0xBF,0xBF,0xBF,0xBF,0xFF,//L 44
0x80,0xFD,0xFB,0xFD,0x80,0xFF,//M 45
0x80,0xFD,0xFB,0xF7,0x80,0xFF,//N 46
0xC1,0xBE,0xBE,0xBE,0xC1,0xFF,//O 47
0x80,0xF6,0xF6,0xF6,0xF9,0xFF,//P 48 0xC1,0xBE,0xAE,0x9E,0x81,0xFF,//Q 49 0x80,0xF6,0xE6,0xD6,0xB9,0xFF,//R 50 0xB9,0xB6,0xB6,0xB6,0xCE,0xFF,//S 51 0xFE,0xFE,0x80,0xFE,0xFE,0xFF,//T 52 0xC0,0xBF,0xBF,0xBF,0xC0,0xFF,//U 53 0xE0,0xDF,0xBF,0xDF,0xE0,0xFF,//V 54 0x80,0xDF,0xEF,0xDF,0x80,0xFF,//W 55 0x9C,0xEB,0xF7,0xEB,0x9C,0xFF,//X 56 0xFC,0xFB,0x87,0xFB,0xFC,0xFF,//Y 57 0x9E,0xAE,0xB6,0xBA,0xBC,0xFF,//Z 58 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//[ 59 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//\ 60 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//] 61 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//^ 62 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//_ 63
Trang 16VI: Mã hóa các chữ trong bài:
16
0xC7,0xBB,0xBB,0xD7,0x83,0xFF,//a 65
0x81,0xB7,0xB7,0xB7,0xCF,0xFF,//b 66
0xFF,0xC7,0xBB,0xBB,0xBB,0xFF,//c 67
0xCF,0xB7,0xB7,0xB7,0x81,0xFF,//d 68
0xC7,0xAB,0xAB,0xAB,0xF7,0xFF,//e 69
0xFF,0xF7,0x83,0xF5,0xFF,0xFF,//f 70
0xF7,0xAB,0xAB,0xAB,0xC3,0xFF,//g 71
0x80,0xF7,0xFB,0xFB,0x87,0xFF,//h 72
0xFF,0xBB,0x82,0xBF,0xFF,0xFF,//i 73
0xFF,0xBF,0xBF,0xC2,0xFF,0xFF,//j 74
0xFF,0x80,0xE7,0xDB,0xBD,0xFF,//k 75
0xFF,0xFF,0x80,0xFF,0xFF,0xFF,//l 76
0x83,0xFB,0x87,0xFB,0x87,0xFF,//m 77
0x83,0xF7,0xFB,0xFB,0x87,0xFF,//n 78
0xC7,0xBB,0xBB,0xBB,0xC7,0xFF,//o 79
0x83,0xEB,0xEB,0xEB,0xF7,0xFF,//p 80
0xF7,0xEB,0xEB,0xEB,0x87,0xFF,//q 81
0x83,0xF7,0xFB,0xFB,0xF7,0xFF,//r 82 0xB7,0xAB,0xAB,0xAB,0xDB,0xFF,//s 83 0xFF,0xFB,0xC0,0xBB,0xBB,0xFF,//t 84 0xC3,0xBF,0xBF,0xDF,0x83,0xFF,//u 85 0xE3,0xDF,0xBF,0xDF,0xE3,0xFF,//v 86 0xC3,0xBF,0xCF,0xBF,0xC3,0xFF,//w 87 0xBB,0xD7,0xEF,0xD7,0xBB,0xFF,//x 88 0xBB,0xD7,0xEF,0xF7,0xFB,0xFF,//y 89 0xBB,0x9B,0xAB,0xB3,0xBB,0xFF,//z 90 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//^ 62 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//-> 93 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//<- 94 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,// 95 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//BLANK CHAR 96};
Trang 17VI Mô phỏng proteus: 17
Trang 18VII Chạy 18