ĐẠI HỌC QUỐC GIA TPHCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
1
ĐỀ BÀI: CHẠY CHỮ TRÊN MA TRẬN LED
GVHD: THẦY ĐOÀN THẾ THẢO
SVTH:
STT
Họ và tên
MSSV
1
Hoàng Đình Trung
21204123
2
Phạm Đình Ngự
21202484
3
Phạm Minh Sang
21203102
4
Phạm Đức Thiện
21203589
I. Tổng quan:
2
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í.
II. Hiện chữ trên LED
3
1. Nguyên tắc quét LED
• 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.
II. Phương án quét led
4
2. Chọn phương án quét LED
• 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.
II. Phương án quét led
Start
5
3. Lưu đồ giải thuật:
Lấy mẫu dữ liệu
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
i=1
Xuất dữ liệu của cả
cột i ra 74HC595
i = i+1
i>8
III. Giới thiệu dụng cụ:
1. Led ma trận 8x8
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.
6
III. Giới thiệu dụng cụ:
1. Led ma trận 8x8
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.
7
2. IC74HC595:
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ở.
8
2. IC74HC595:
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
9
IV. Lưu đồ giải thuật:
10
Start
1.
Chương
trình
chính:
2.
Chương
trình
con:
Next
Xuất giá trị 32 cột
bắt đầu từ next
S
Next ++
Giá trị cần
xuất
Xuất mức cao hoặc
mức thấp IC1 chạy
Interrupts timer0
Next > độ dài
chuổi
Start
Đ
Next =0
Xuất giá trị cho IC2
cấp mức điện dáp
cho từng hàng
V. Code chương trình:
#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
11
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;
}
}
IV. Code chương trình:
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);
}
12
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);
}
}
V. Code chương trình:
13
void chaychu()
void main (){
{
TRISB=0x00;
lengh_str=strlen(str)*6;
enable_interrupts(int_timer0);
unsigned char j,temp_font;
Ic74595_Write(1,1,1);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
for(j=next;j<32+next;j++)
enable_interrupts(global);
{
set_timer0(0);
Temp_font=font[str[(j%lengh_STR)/With_of_font]
str=welcome;
-32][j%With_of_font];
while(true){
Ic74595_Write(temp_font,2,8);
chaychu();
delay_us(500);
}
Ic74595_Write(0,1,1);
}
}
}
VI: Mã hóa các chữ trong bài:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
#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
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
VI: Mã hóa các chữ trong bài:
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
15
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
VI: Mã hóa các chữ trong bài:
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
16
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};
VI. Mô phỏng proteus:
17
VII. Chạy
18