Em đi thẳng vào vấn đề luôn nhé.
Em có chương trình hiện thị chữ bằng ma trận led 8x8 (Lấy từ http://lab3i.com/). Tuy nhiên có vài dòng lệnh em chưa hiểu đựơc. Rất mong các bác trên diễn đàn giải thích chi tiết giúp em. Trình độ về VDK của em vẫn còn rất kém, tuy nhiên thấy Code viết hay quá (ngắn hơn rất nhiều so với những cái em đã từng gặp) nên cố gắng tìm hiểu .
Những dòng em chưa hiểu em viết chữ màu đỏ.
#include <REGX52.H>
#include <string.h>
//******************BANG MA ASCII on LED matrix font 5x7 ****************
unsigned char code code_Tab[97][6]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE 0
0xFF,0xFF,0xA0,0xFF,0xFF,0xFF,//! 1
0xFF,0xFF,0xF8,0xF4,0xFF,0xFF,//' 2
0xEB,0x80,0xEB,0x80,0xEB,0xFF,//# 3
0xDB,0xD5,0x80,0xD5,0xED,0xFF,//$ 4
0xD8,0xEA,0x94,0xAB,0x8D,0xFF,//% 5
0xC9,0xB6,0xA9,0xDF,0xAF,0xFF,//& 6
0xFF,0xFF,0xF8,0xF4,0xFF,0xFF,//' 7
0xFF,0xE3,0xDD,0xBE,0xFF,0xFF,//( 8
0xFF,0xBE,0xDD,0xE3,0xFF,0xFF,//) 9
0xD5,0xE3,0x80,0xE3,0xD5,0xFF,//* 10
0xF7,0xF7,0xC1,0xF7,0xF7,0xFF,//+ 11
0xFF,0xA7,0xC7,0xFF,0xFF,0xFF,//, 12
0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,//- 13
0xFF,0x9F,0x9F,0xFF,0xFF,0xFF,//x 14
0xFF,0xC9,0xC9,0xFF,0xFF,0xFF,// / 15
0xC1,0xAE,0xB6,0xBA,0xC1,0xFF,//0 16
0xFF,0xBD,0x80,0xBF,0xFF,0xFF,//1 17
0x8D,0xB6,0xB6,0xB6,0xB9,0xFF,//2 18
0xDD,0xBE,0xB6,0xB6,0xC9,0xFF,//3 19
0xE7,0xEB,0xED,0x80,0xEF,0xFF,//4 20
0xD8,0xBA,0xBA,0xBA,0xC6,0xFF,//5 21
0xC3,0xB5,0xB6,0xB6,0xCF,0xFF,//6 22
0xFE,0x8E,0xF6,0xFA,0xFC,0xFF,//7 23
0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,//8 24
0xF9,0xB6,0xB6,0xD6,0xE1,0xFF,//9 25
0xFF,0xC9,0xC9,0xFF,0xFF,0xFF,//: 26
0xFF,0xA4,0xC4,0xFF,0xFF,0xFF,//// 27
0xF7,0xEB,0xDD,0xBE,0xFF,0xFF,//< 28
0xEB,0xEB,0xEB,0xEB,0xEB,0xFF,//= 29
0xFF,0xBE,0xDD,0xEB,0xF7,0xFF,//> 30
0xFD,0xFE,0xAE,0xF6,0xF9,0xFF,//? 31
0xCD,0xB6,0x8E,0xBE,0xC1,0xFF,//@ 32
0x83,0xF5,0xF6,0xF5,0x83,0xFF,//A 33
0xBE,0x80,0xB6,0xB6,0xC9,0xFF,//B 34
0xC1,0xBE,0xBE,0xBE,0xDD,0xFF,//C 35
0xBE,0x80,0xBE,0xBE,0xC1,0xFF,//D 36
0x80,0xB6,0xB6,0xB6,0xBE,0xFF,//E 37
0x80,0xF6,0xF6,0xFE,0xFE,0xFF,//F 38
0xC1,0xBE,0xB6,0xB6,0xC5,0xFF,//G 39
0x80,0xF7,0xF7,0xF7,0x80,0xFF,//H 40
0xFF,0xBE,0x80,0xBE,0xFF,0xFF,//I 41
0xDF,0xBF,0xBE,0xC0,0xFE,0xFF,//J 42
0x80,0xF7,0xEB,0xDD,0xBE,0xFF,//K 43
0x80,0xBF,0xBF,0xBF,0xFF,0xFF,//L 44
0x80,0xFD,0xF3,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,0xDE,0xA1,0xFF,//Q 49
0x80,0xF6,0xE6,0xD6,0xB9,0xFF,//R 50
0xD9,0xB6,0xB6,0xB6,0xCD,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
0xC0,0xBF,0xCF,0xBF,0xC0,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,0x80,0xBE,0xBE,0xFF,0xFF,//[ 59
0xFD,0xFB,0xF7,0xEF,0xDF,0xFF,//\ 60
0xFF,0xBE,0xBE,0x80,0xFF,0xFF,//] 61
0xFB,0xFD,0xFE,0xFD,0xFB,0xFF,//^ 92
0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,//_ 63
0xFF,0xFF,0xF8,0xF4,0xFF,0xFF,//' 64
0xDF,0xAB,0xAB,0xAB,0xC7,0xFF,//a 65
0x80,0xC7,0xBB,0xBB,0xC7,0xFF,//b 66
0xFF,0xC7,0xBB,0xBB,0xBB,0xFF,//c 67
0xC7,0xBB,0xBB,0xC7,0x80,0xFF,//d 68
0xC7,0xAB,0xAB,0xAB,0xF7,0xFF,//e 69
0xF7,0x81,0xF6,0xF6,0xFD,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
0xDF,0xBF,0xBB,0xC2,0xFF,0xFF,//j 74
0xFF,0x80,0xEF,0xD7,0xBB,0xFF,//k 75
0xFF,0xBE,0x80,0xBF,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,0x83,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
0xF3,0xAF,0xAF,0xAF,0xC3,0xFF,//y 89
0xBB,0x9B,0xAB,0xB3,0xBB,0xFF,//z 90
0xFB,0xE1,0xE0,0xE1,0xFB,0xFF,//^ 62
0xE3,0xE3,0xC1,0xE3,0xF7,0xFF,//-> 93
0xF7,0xE3,0xC1,0xE3,0xE3,0xFF,//<- 94
0xEF,0xC3,0x83,0xC3,0xEF,0xFF,// 95
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//BLANK CHAR 96
};
unsigned char code KT_la[1][8]={0xC3,0xAD,0x5A,0x5E,0x5A,0xAD,0xC3,0 }; //ma ky tu: mat cuoi
//0xB6,0x80,0xB6,0xBE,0xC1,0xFF, //ma ky tu: DD
sbit SDA = P2^0; //Dau vao du lieu noi tiep
sbit SCL = P2^1; // Dau vao xung clock
sbit STR = P2^2; //Dau vao chot du lieu
sfr DataPort = 0x90; // P1 (dieu khien hang)
//-------------------------------------------
//-------------------------------------------
unsigned char *String_input ="HAPPY BIRTH DAY TO YOU!";
// Ghi chuoi ky tu can hien thi
unsigned int Pos=0,lengh_STR; // Khai bao cac bien
unsigned char Tic=0; // Khai bao bien Tic: Thoi gian hien thi cac ky tu
#define With_of_font 6
wait(unsigned int N){while(N--);} // Ham tre
void main ()
{
unsigned char Temp_code;
unsigned int j;
TMOD=0x01; //Timer0 o che do dem 16bit
TR0=1; //Cho phep Timer0 chay
ET0=1; //Cho phep ngat Timer0
lengh_STR = strlen(String_input)*6; // Em ko hiểu dòng này
EA=1; //Cho phep ngat toan cuc
while(1)
{
SDA=1; //Cho SDA len 1 ==> san sang de quet cot(Cot la Anot cua led)
for(j=Pos;j<32+Pos;j++) //Quet 32 cot
{
Temp_code=code_Tab[ String_input[(j%lengh_STR)/With_of_font] -32][j%With_of_font]; //Em ko hiểu dòng này
DataPort=0xFF; // Cho hang cua matrix len 1 ==> Ma trix tat het (hang la Catot cua led)
SCL=1; // Xuat 1bit vao 74hc595 (bit nay co gia tri 1)
SCL=0;
STR=1; // Xuat bit ra de quet cot dau tien
STR=0;
DataPort = Temp_code; // Gia tri cua hang
SDA=0; // Cho SDA =0 de san sang cho chu ky tiep theo
wait(60); //Tre 60us.
}
}
}
void INT_Timer0()interrupt 1 // Ham ngat Timer0
{
Tic++; // Tang bien Tic len 1
if(Tic==4)
{ //Neu Tic==2 thi gan Tic=0
Tic=0;
Pos++; //Tang Poc len 1
if(Pos>=lengh_STR)Pos=0; //Neu chay het chu thi quay lai tu dau.
}
}
Còn đây là chương trình mô phỏng:
http://www.mediafire.com/?97kitxt6h1xb4qp
Em có chương trình hiện thị chữ bằng ma trận led 8x8 (Lấy từ http://lab3i.com/). Tuy nhiên có vài dòng lệnh em chưa hiểu đựơc. Rất mong các bác trên diễn đàn giải thích chi tiết giúp em. Trình độ về VDK của em vẫn còn rất kém, tuy nhiên thấy Code viết hay quá (ngắn hơn rất nhiều so với những cái em đã từng gặp) nên cố gắng tìm hiểu .
Những dòng em chưa hiểu em viết chữ màu đỏ.
#include <REGX52.H>
#include <string.h>
//******************BANG MA ASCII on LED matrix font 5x7 ****************
unsigned char code code_Tab[97][6]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE 0
0xFF,0xFF,0xA0,0xFF,0xFF,0xFF,//! 1
0xFF,0xFF,0xF8,0xF4,0xFF,0xFF,//' 2
0xEB,0x80,0xEB,0x80,0xEB,0xFF,//# 3
0xDB,0xD5,0x80,0xD5,0xED,0xFF,//$ 4
0xD8,0xEA,0x94,0xAB,0x8D,0xFF,//% 5
0xC9,0xB6,0xA9,0xDF,0xAF,0xFF,//& 6
0xFF,0xFF,0xF8,0xF4,0xFF,0xFF,//' 7
0xFF,0xE3,0xDD,0xBE,0xFF,0xFF,//( 8
0xFF,0xBE,0xDD,0xE3,0xFF,0xFF,//) 9
0xD5,0xE3,0x80,0xE3,0xD5,0xFF,//* 10
0xF7,0xF7,0xC1,0xF7,0xF7,0xFF,//+ 11
0xFF,0xA7,0xC7,0xFF,0xFF,0xFF,//, 12
0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,//- 13
0xFF,0x9F,0x9F,0xFF,0xFF,0xFF,//x 14
0xFF,0xC9,0xC9,0xFF,0xFF,0xFF,// / 15
0xC1,0xAE,0xB6,0xBA,0xC1,0xFF,//0 16
0xFF,0xBD,0x80,0xBF,0xFF,0xFF,//1 17
0x8D,0xB6,0xB6,0xB6,0xB9,0xFF,//2 18
0xDD,0xBE,0xB6,0xB6,0xC9,0xFF,//3 19
0xE7,0xEB,0xED,0x80,0xEF,0xFF,//4 20
0xD8,0xBA,0xBA,0xBA,0xC6,0xFF,//5 21
0xC3,0xB5,0xB6,0xB6,0xCF,0xFF,//6 22
0xFE,0x8E,0xF6,0xFA,0xFC,0xFF,//7 23
0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,//8 24
0xF9,0xB6,0xB6,0xD6,0xE1,0xFF,//9 25
0xFF,0xC9,0xC9,0xFF,0xFF,0xFF,//: 26
0xFF,0xA4,0xC4,0xFF,0xFF,0xFF,//// 27
0xF7,0xEB,0xDD,0xBE,0xFF,0xFF,//< 28
0xEB,0xEB,0xEB,0xEB,0xEB,0xFF,//= 29
0xFF,0xBE,0xDD,0xEB,0xF7,0xFF,//> 30
0xFD,0xFE,0xAE,0xF6,0xF9,0xFF,//? 31
0xCD,0xB6,0x8E,0xBE,0xC1,0xFF,//@ 32
0x83,0xF5,0xF6,0xF5,0x83,0xFF,//A 33
0xBE,0x80,0xB6,0xB6,0xC9,0xFF,//B 34
0xC1,0xBE,0xBE,0xBE,0xDD,0xFF,//C 35
0xBE,0x80,0xBE,0xBE,0xC1,0xFF,//D 36
0x80,0xB6,0xB6,0xB6,0xBE,0xFF,//E 37
0x80,0xF6,0xF6,0xFE,0xFE,0xFF,//F 38
0xC1,0xBE,0xB6,0xB6,0xC5,0xFF,//G 39
0x80,0xF7,0xF7,0xF7,0x80,0xFF,//H 40
0xFF,0xBE,0x80,0xBE,0xFF,0xFF,//I 41
0xDF,0xBF,0xBE,0xC0,0xFE,0xFF,//J 42
0x80,0xF7,0xEB,0xDD,0xBE,0xFF,//K 43
0x80,0xBF,0xBF,0xBF,0xFF,0xFF,//L 44
0x80,0xFD,0xF3,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,0xDE,0xA1,0xFF,//Q 49
0x80,0xF6,0xE6,0xD6,0xB9,0xFF,//R 50
0xD9,0xB6,0xB6,0xB6,0xCD,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
0xC0,0xBF,0xCF,0xBF,0xC0,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,0x80,0xBE,0xBE,0xFF,0xFF,//[ 59
0xFD,0xFB,0xF7,0xEF,0xDF,0xFF,//\ 60
0xFF,0xBE,0xBE,0x80,0xFF,0xFF,//] 61
0xFB,0xFD,0xFE,0xFD,0xFB,0xFF,//^ 92
0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,//_ 63
0xFF,0xFF,0xF8,0xF4,0xFF,0xFF,//' 64
0xDF,0xAB,0xAB,0xAB,0xC7,0xFF,//a 65
0x80,0xC7,0xBB,0xBB,0xC7,0xFF,//b 66
0xFF,0xC7,0xBB,0xBB,0xBB,0xFF,//c 67
0xC7,0xBB,0xBB,0xC7,0x80,0xFF,//d 68
0xC7,0xAB,0xAB,0xAB,0xF7,0xFF,//e 69
0xF7,0x81,0xF6,0xF6,0xFD,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
0xDF,0xBF,0xBB,0xC2,0xFF,0xFF,//j 74
0xFF,0x80,0xEF,0xD7,0xBB,0xFF,//k 75
0xFF,0xBE,0x80,0xBF,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,0x83,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
0xF3,0xAF,0xAF,0xAF,0xC3,0xFF,//y 89
0xBB,0x9B,0xAB,0xB3,0xBB,0xFF,//z 90
0xFB,0xE1,0xE0,0xE1,0xFB,0xFF,//^ 62
0xE3,0xE3,0xC1,0xE3,0xF7,0xFF,//-> 93
0xF7,0xE3,0xC1,0xE3,0xE3,0xFF,//<- 94
0xEF,0xC3,0x83,0xC3,0xEF,0xFF,// 95
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//BLANK CHAR 96
};
unsigned char code KT_la[1][8]={0xC3,0xAD,0x5A,0x5E,0x5A,0xAD,0xC3,0 }; //ma ky tu: mat cuoi
//0xB6,0x80,0xB6,0xBE,0xC1,0xFF, //ma ky tu: DD
sbit SDA = P2^0; //Dau vao du lieu noi tiep
sbit SCL = P2^1; // Dau vao xung clock
sbit STR = P2^2; //Dau vao chot du lieu
sfr DataPort = 0x90; // P1 (dieu khien hang)
//-------------------------------------------
//-------------------------------------------
unsigned char *String_input ="HAPPY BIRTH DAY TO YOU!";
// Ghi chuoi ky tu can hien thi
unsigned int Pos=0,lengh_STR; // Khai bao cac bien
unsigned char Tic=0; // Khai bao bien Tic: Thoi gian hien thi cac ky tu
#define With_of_font 6
wait(unsigned int N){while(N--);} // Ham tre
void main ()
{
unsigned char Temp_code;
unsigned int j;
TMOD=0x01; //Timer0 o che do dem 16bit
TR0=1; //Cho phep Timer0 chay
ET0=1; //Cho phep ngat Timer0
lengh_STR = strlen(String_input)*6; // Em ko hiểu dòng này
EA=1; //Cho phep ngat toan cuc
while(1)
{
SDA=1; //Cho SDA len 1 ==> san sang de quet cot(Cot la Anot cua led)
for(j=Pos;j<32+Pos;j++) //Quet 32 cot
{
Temp_code=code_Tab[ String_input[(j%lengh_STR)/With_of_font] -32][j%With_of_font]; //Em ko hiểu dòng này
DataPort=0xFF; // Cho hang cua matrix len 1 ==> Ma trix tat het (hang la Catot cua led)
SCL=1; // Xuat 1bit vao 74hc595 (bit nay co gia tri 1)
SCL=0;
STR=1; // Xuat bit ra de quet cot dau tien
STR=0;
DataPort = Temp_code; // Gia tri cua hang
SDA=0; // Cho SDA =0 de san sang cho chu ky tiep theo
wait(60); //Tre 60us.
}
}
}
void INT_Timer0()interrupt 1 // Ham ngat Timer0
{
Tic++; // Tang bien Tic len 1
if(Tic==4)
{ //Neu Tic==2 thi gan Tic=0
Tic=0;
Pos++; //Tang Poc len 1
if(Pos>=lengh_STR)Pos=0; //Neu chay het chu thi quay lai tu dau.
}
}
Còn đây là chương trình mô phỏng:
http://www.mediafire.com/?97kitxt6h1xb4qp
Comment