Ðăng Nhập

View Full Version : pic 16f877a và hiển thị led matran


friend_1990
10-05-2011, 09:23 PM
chào các bác!!!!!!!!!11
mình đang làm đề tài quang báo hiển thị led matran vấn đề mình gặp phải chưa giải quyết được là khi từ máy tính đẩy một chuỗi dữ liệu xuống thì làm sao xử lý chuỗi đó hiển thị led matran(ở đây mình đã làm hiển thị được ký tự rồi nhưng xử lý chuỗi từ pc xuống vẫn chưa được)
vd :truyền chuỗi từ pc xuống pic là"*picvietnam.com#"
khi pic nhận dc ký tự # rồi thì sẽ xử lý chuỗi vậy làm sao mình lấy từng ký tự hiển thị led matran(mình nghĩ lấy từng ký tự tra mảng rồi hiển thị nhưng vẫn không biết tách từng ký tự trong 1 chuỗi như thế nào)
mong bác nào đã làm qua có thể chỉ mình cách viết được không...........cám ơn các bác

tanbka
10-05-2011, 09:34 PM
Từ máy tình truyền nối tiếp xuống xuống PIC mà, bạn chỉ lấy từng byte từ bộ đệm ra thôi. Không bít có đúng ý bạn muốn hỏi không?

friend_1990
10-05-2011, 10:31 PM
nhưng cách lấy mình lấy như thế nào mình muốn hỏi là vậy
một chuỗi là vậy nhưng lấy 1 ký tự hiện thì mình vẫn chưa làm được
bạn biết cách lấy ko chỉ mỉnh dc không?

stupid11
10-05-2011, 10:33 PM
cái này bạn chỉ việc trong hàm ngắt nhận bạn đưa data vào 1 mảng.Sau đó bạn lấy từng byte trong mảng đem tham chiếu vào bảng mã Font =>Quét hiển thị lên led ma trận

Trong hàm ngắt bạn viết như sau:

#int_RDA
void ngat()
{
data=getc()
if(data='#')
{
index=0;
}
else
{
mangdata[index]=data;
index++;
}
}

friend_1990
10-05-2011, 10:36 PM
vậy bạn stupid xử lý chuỗi pic hiển thị lên như thế nào để lấy từng ký tự ra rồi xuất lên led matrix

friend_1990
10-05-2011, 10:41 PM
mong các bạn đóng góp ý kiến giúp mình làm đồ án tốt nghiệp
nếu làm xong thì mình sẽ post len toàn bộ cho bạn nào chưa làm hay muốn nghiên cứu về led matran
mong các bác pro nào đã từng làm chỉ giáo giúp mình.........thanks


..............**********Học thầy không tày học bạn*********...............
..............******ở nhà nhờ ba mẹ,ra đường nhờ bạn bè******..............

friend_1990
11-05-2011, 10:43 AM
sao không ai giúp thế nhỉ?

tdm
11-05-2011, 11:47 AM
mong các bạn đóng góp ý kiến giúp mình làm đồ án tốt nghiệp
nếu làm xong thì mình sẽ post len toàn bộ cho bạn nào chưa làm hay muốn nghiên cứu về led matran
mong các bác pro nào đã từng làm chỉ giáo giúp mình.........thanks


..............**********Học thầy không tày học bạn*********...............
..............******ở nhà nhờ ba mẹ,ra đường nhờ bạn bè******..............
một gợi ý cho bạn:
vd bạn nhận được một chuỗi là :pic#
bạn lưu nó vào vùng luu_chuỗi[]
đọc luu_chuỗi[] so sánh nếu không phải là kí tự #
so sánh xem nó là kí tự gì rồi lấy font kí tự đó lưu vào vùng nhớ :hien_thị[]
lúc này chỉ cần lấy data từ vùng nhớ:hien_thị[] đưa ra matrix là xong.

friend_1990
11-05-2011, 04:46 PM
mình đã nghĩ tới phương pháp đó nhưng viết mãi vẫn không lấy ký tự ra được
bạn có thể post 1 đoạn chương trình làm vd được không

mong bạn giúp mình nha!!!!!!!!!!!

...........********Những điều ta biết là 1 hạt cát*********..............
...........******những điều ta chưa biết là cả 1 sa mạc*****.............

tdm
11-05-2011, 04:58 PM
mình đã nghĩ tới phương pháp đó nhưng viết mãi vẫn không lấy ký tự ra được
bạn có thể post 1 đoạn chương trình làm vd được không

mong bạn giúp mình nha!!!!!!!!!!!

...........********Những điều ta biết là 1 hạt cát*********..............
...........******những điều ta chưa biết là cả 1 sa mạc*****.............
bạn gởi file mô phỏng lên đây.

friend_1990
11-05-2011, 06:09 PM
mình gửi cả file mo phỏng và code lên mình chỉ mới hiển thị được ký tự mặc định thôi chứ chưa lấy dc ký tự bất ký bạn xem và chỉ giúp mình nha

cám ơn tdm nha!!!!!!!!!!!!!!!

friend_1990
11-05-2011, 06:12 PM
nếu ai làm được thì post lên diễn đàn mọi người cùng tham khảo và cùng làm nha
cám ơn mọi người đã xem qua!!!!!!!!!!!!!!!!!!!!!!

friend_1990
11-05-2011, 10:16 PM
sao ko thấy ai trả lời dùm hết vậy ta
a admin giúp dùm em đi!!!!!!!!!!!!!

tdm
12-05-2011, 10:53 AM
sao ko thấy ai trả lời dùm hết vậy ta
a admin giúp dùm em đi!!!!!!!!!!!!!
một đọan code cho bạn ,bạn tìm hiểu thêm rồi phát triển thêm nhé.
hi vọng nó có ích cho bạn.

//lay mang du lieu so sanh voi font luu font vao vung nho hien thi
//mo phong proteus 7.6 ps2 OK
#include <16f877a.h>
#fuses nowdt,noprotect,nolvp,hs,put
#use delay(clock=20000000)
#use fast_io(b)
#byte portb=0x06
#bit b0=portb.0
#bit b1=portb.1
#bit b2=portb.2
#bit b3=portb.3
#bit b4=portb.4
#bit b5=portb.5
void lay_font(char * textptr);
unsigned char a,bi,temp,chieu_dai=0;
unsigned char hien_thi[64];
char du_lieu[] = "tdm_16f877a#";//
const BYTE TEXT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x03, 0x00, 0x03, 0x00, // "
0x14, 0x3E, 0x14, 0x3E, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x43, 0x33, 0x08, 0x66, 0x61, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x50, 0x30, 0x00, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x04, 0x02, 0x7F, 0x00, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x3E, 0x41, 0x59, 0x55, 0x5E, // @
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x49, 0x3A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x30, 0x40, 0x40, 0x40, 0x3F, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x02, 0x04, 0x08, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
0x7F, 0x09, 0x09, 0x09, 0x76};// R

const BYTE TEXT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x7F, 0x20, 0x10, 0x20, 0x7F, // W
0x41, 0x22, 0x1C, 0x22, 0x41, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20, // \
0x00, 0x00, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // `
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x44, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x44, // c
0x38, 0x44, 0x44, 0x44, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x04, 0x04, 0x7E, 0x05, 0x05, // f
0x08, 0x54, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x14, 0x7C, // q
0x00, 0x7C, 0x08, 0x04, 0x04, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x04, 0x3F, 0x44, 0x44, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x41, // {
0x00, 0x00, 0x7F, 0x00, 0x00, // |
0x41, 0x41, 0x36, 0x08, 0x00, // }
0x02, 0x01, 0x02, 0x04, 0x02};// ~


int8 i,x=0,y,z,m,t;
int8 n;
void dich(void);
void xuat(unsigned char bi);
void main()
{
set_tris_b(0b00000000);
set_tris_d(0b00000000);
lay_font(du_lieu); // Write character set to matrix
while(1)
{
for(t=0;t<=100;t++)
{
b1=1;
b0=1;
b2=1;
b0=0;
b2=0;
x=0;
for(m=0;m<=63;m++)
{
n=hien_thi[m];
n=~n;
xuat(n);
delay_us(1000);
dich();
}
}
}
}

void dich()
{
b1=0;
b0=1;
b0=0;
b2=1;
b2=0;
}
void xuat(unsigned char temp)
{
#bit flag_bit = temp.7
b4=0;
for(i=0;i<=7;i++)
{
if(flag_bit)
{b4=1;}
else
{b4=0;}
b3=1;
b3=0;
temp<<=1;
}
b5=1;
b5=0;
}
void lay_font(char * textptr)
{
int i, j;//
BYTE pixelData[5]; // Stores character data

for(i=0; textptr[i] != '\0'; ++i ) // Loop through the passed string
{
if(textptr[i] == '#')
break;
if(textptr[i] < 'S') // Checks if the letter is in the first text array
memcpy(pixelData, TEXT[textptr[i]-' '], 5);
else if(textptr[i] <= '~') // Check if the letter is in the second array
memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);
else
memcpy(pixelData, TEXT[0], 5); // Default to space
for(j=0;j<=4;j++)
{
hien_thi[chieu_dai]=(pixelData[j]);
chieu_dai++;
}

}
}

friend_1990
12-05-2011, 11:16 AM
cám ơn tdm nhiều lắm nha
giúp mình lần nữa nha đoạn code lấy font sao mình đọc khó hiểu quá bạn có thể giải thích từng dòng bằng tiếng việt được không
với lại mình lấy bài bạn mô phỏng sao chỉ hiển thị mà khong dịch được vậy tdm xem lại dùm mình chỗ đó nữa nha

thanks tdm nhiều nha mong bạn giúp mình
mail bạn là gì vậy có gì mình trao đổi qua đó cho tiện
của mình là namcddt0811b@gmail.com
mong nhận được sự trả lời sớm nhất bạn thanks

friend_1990
12-05-2011, 11:47 AM
void lay_font(char * textptr);????????? dòng này khai báo trong ngặoc là gì vậy bạn


for(m=0;m<=63;m++)
{
n=hien_thi[m];
n=~n;??????????????????? toán tử ~ là gì nhỉ?
xuat(n);
delay_us(1000);

}




giải thích tiếng việt dùm mình void lấy font dc ko bạn những lệnh dưới mình chưa sử dung bao giờ nên đọc không hiểu cho lắm


void lay_font(char * textptr)
{
int i, j;//
BYTE pixelData[5]; // Stores character data

for(i=0; textptr[i] != '\0'; ++i ) // Loop through the passed string
{
if(textptr[i] == '#')
break;
if(textptr[i] < 'S') // Checks if the letter is in the first text array
memcpy(pixelData, TEXT[textptr[i]-' '], 5);
else if(textptr[i] <= '~') // Check if the letter is in the second array
memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);
else
memcpy(pixelData, TEXT[0], 5); // Default to space
for(j=0;j<=4;j++)
{
hien_thi[chieu_dai]=(pixelData[j]);
chieu_dai++;
}

}
}

[/code][/QUOTE]

friend_1990
12-05-2011, 03:59 PM
void lay_font(char * textptr)
{
int i, j;//
BYTE pixelData[5]; // Stores character data

for(i=0; textptr[i] != '\0'; ++i ) // Loop through the passed string
{
if(textptr[i] == '#')//textptr khai bao vi tri con tro
break;
if(textptr[i] < 'S') //ky tu nam o mang text
memcpy(pixelData, TEXT[textptr[i]-' '], 5);//copy 5 byte gia tri text[textptr[i]-'' vao pixeldata
else if(textptr[i] <= '~') // ky tu nam o mang text2
memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);//copy 5 byte gia tri text2[textptr[i]-'s' vao pixeldata
else
memcpy(pixelData, TEXT[0], 5); // khoang trang
for(j=0;j<=4;j++)
{
hien_thi[chieu_dai]=(pixelData[j]);//hien thi 5 byte da copy
chieu_dai++;




mình giải thích vậy hợp lý không tdm
còn 1 dòng mình không hiểu là
BYTE pixelData[5]; // Stores character data
nghĩa là gì vậy tdm

với khai báo char * textptr nghĩa là gì vậy

tdm
12-05-2011, 09:41 PM
void lay_font(char * textptr)
{
int i, j;//
BYTE pixelData[5]; // Stores character data

for(i=0; textptr[i] != '\0'; ++i ) // Loop through the passed string
{
if(textptr[i] == '#')//textptr khai bao vi tri con tro
break;
if(textptr[i] < 'S') //ky tu nam o mang text
memcpy(pixelData, TEXT[textptr[i]-' '], 5);//copy 5 byte gia tri text[textptr[i]-'' vao pixeldata
else if(textptr[i] <= '~') // ky tu nam o mang text2
memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);//copy 5 byte gia tri text2[textptr[i]-'s' vao pixeldata
else
memcpy(pixelData, TEXT[0], 5); // khoang trang
for(j=0;j<=4;j++)
{
hien_thi[chieu_dai]=(pixelData[j]);//hien thi 5 byte da copy
chieu_dai++;




mình giải thích vậy hợp lý không tdm
còn 1 dòng mình không hiểu là
BYTE pixelData[5]; // Stores character data
nghĩa là gì vậy tdm

với khai báo char * textptr nghĩa là gì vậy
[code]
BYTE pixelData[5]; // Stores character data
khai báo mảng chứa font lấy được
hien_thi[chieu_dai]=(pixelData[j]);//
lưumảng pixelData vào mảng hien_thi
char * textptr khai báo dang con trỏ
n=~n;??????????????????? toán tử ~ là gì nhỉ? [đảo byte]

friend_1990
12-05-2011, 10:30 PM
vậy mình muốn cho dịch chữ chạy mình dùng ngắt rda phải không bạn?
for(i=0; textptr[i] != '\0'; ++i ) lệnh này nghĩa là gì vậy tdm tetprt[i]!='\0' là gì mình đọc không hiểu?

mình muốn chử chạy cuộn tròn vậy viết như thế nào bạn gợi ý dùm mình nha

tm có yahoo ko co cho mình nha?tiện việc trao đổi
phongvu_1232002 nick của mình mong được sự chỉ giáo của bạn

thanks bác nhiều!!!!!!!!!!!!

friend_1990
13-05-2011, 04:15 PM
Tdm giúp mình với mình đang làm nhiệt độ sao hiển thị lên được rồi nhưng khống chế nó hiển thị laị không được
vd:nó hiển thị 78 thì nó phải hiển thị mãi 78 cho đến khi thay đổi giá trị lm 35 thì mới hiển thị số khác đằng này số 78 cứ hiển thị ra thêm 3 số 78 phía sau nữa mình khống chế nó mãi mà vẫn không được mong bạn giúp mình nha
ak mình muốn cho số 78 đó cuộn tròn trên 8 led matrix thì làm sao nhỉ mong được sự giúp đỡ từ tdm nha
cám ơn tdm nhiều!!!!!!!!!!!!!!!!!!!!!!!!

dưới là code mình đã hiển thị nhưng không khống chế được các bác down về xem dùm nha!!!!!!!!!!!!
thanks mọi người

do đề tài gần phải nộp cho thầy mong được sự giúp đõ từ mọi người!!!!!!!!!!!!!!!!!!

friend_1990
13-05-2011, 08:31 PM
giúp mình với tdm ơi

tdm
13-05-2011, 09:50 PM
giúp mình với tdm ơi
xóa mảng hiển thị trước khi cập nhập nhiệt độ .

friend_1990
13-05-2011, 10:43 PM
anh tdm có thể nói cụ thể hơn được không xóa hiển thị như thế nào ạk
em làm mãi nó vẫn cứ hiển thị như vậy àk
anh cũng đã down về chắc cungthay61ay61 được chỗ sai của em rồi mong a chỉ ngay vị trí đó dc không anh
cám ơn anh nhiều!!!!!!!!!!!!!
xong cái này em còn phải cho nó dịch và hiển thị ngày tháng năm giờ phút giây nữa em mong anh sẽ chỉ giúp em biết chỗ cần phải sữa là ở vị trí nào đi anh!!!!!!!!!!!!!!!

àk anh tên gì vậy?anh co yahoo cho em với
mong dc sự trả lời sớm từ anh!!!!!!!!!!!!!!
thanks anh

friend_1990
13-05-2011, 11:57 PM
xóa mảng hiển thị trước khi cập nhập nhiệt độ .



em biết anh rất bận nhưng em mong sẽ chỉ giúp em làm luận văn tốt nghiệp này em lang thang trên mạng hỏi ở nhiều diễn đàn nhưng có mỗi a giúp em,em mong anh sẽ tiếp tục chỉ giúp em hoàn thành khóa luận văn cuối cùng này để em có thể ra trường và tìm việc làm
anh hướng dẫn em từ đầu giờ anh mà bỏ em cũng như đưa em tới giữa dòng sông rồi đạp em xuống em không biết bơi chỉ có chết đuối thôi anh ơi!!!!!!!!!!!
em gần phải nộp rồi do kiến thức làm bài em còn yếu kém nên không hiểu hết ý của anh chỉ giáo cho em em mong anh đừng chê cười khi em hỏi những câu hỏi ngớ ngấn
e cũng có thầy hướng dẫn nhưng thầy chỉ em khó hiểu quá với thầy lúc nào bận rộn nên thời gian chỉ em không nhiều giờ chỉ có anh là giúp được em thôi àk
mỗi tối a có thể dành ít thời gian chỉ em những điều em chưa thông được không anh
a co yahoo ko cho em đi em trao đổi cho tiện em sẽ không làm phiên anh nhiều đâu
mong anh chỉ giúp ạk!!!!!!!!!!!!!!!!1
chân thành cám ơn anh!!!!!!!!!!!!!!!!!!!
yahoo em là phongvu_1232002

tdm
14-05-2011, 09:42 AM
em biết anh rất bận nhưng em mong sẽ chỉ giúp em làm luận văn tốt nghiệp này em lang thang trên mạng hỏi ở nhiều diễn đàn nhưng có mỗi a giúp em,em mong anh sẽ tiếp tục chỉ giúp em hoàn thành khóa luận văn cuối cùng này để em có thể ra trường và tìm việc làm
anh hướng dẫn em từ đầu giờ anh mà bỏ em cũng như đưa em tới giữa dòng sông rồi đạp em xuống em không biết bơi chỉ có chết đuối thôi anh ơi!!!!!!!!!!!
em gần phải nộp rồi do kiến thức làm bài em còn yếu kém nên không hiểu hết ý của anh chỉ giáo cho em em mong anh đừng chê cười khi em hỏi những câu hỏi ngớ ngấn
e cũng có thầy hướng dẫn nhưng thầy chỉ em khó hiểu quá với thầy lúc nào bận rộn nên thời gian chỉ em không nhiều giờ chỉ có anh là giúp được em thôi àk
mỗi tối a có thể dành ít thời gian chỉ em những điều em chưa thông được không anh
a co yahoo ko cho em đi em trao đổi cho tiện em sẽ không làm phiên anh nhiều đâu
mong anh chỉ giúp ạk!!!!!!!!!!!!!!!!1
chân thành cám ơn anh!!!!!!!!!!!!!!!!!!!
yahoo em là phongvu_1232002
của em đây:

#include <16f877a.h>
#device 16f877*=16 ADC=10
#include <stdlib.h>
#include <string.h>
#fuses nowdt,noprotect,nolvp,hs,put
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#bit b0=portb.0
#bit b1=portb.1
#bit b2=portb.2
#bit b3=portb.3
#bit b4=portb.4
#bit b5=portb.5

void doc_adc();
void lay_font(char * textptr);
unsigned char bi,temp,chieu_dai=0;
unsigned char hien_thi[64];
char string[5];
char string1[5];
const BYTE TEXT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x03, 0x00, 0x03, 0x00, // "
0x14, 0x3E, 0x14, 0x3E, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x43, 0x33, 0x08, 0x66, 0x61, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x50, 0x30, 0x00, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x04, 0x02, 0x7F, 0x00, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x3E, 0x41, 0x59, 0x55, 0x5E, // @
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x49, 0x3A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x30, 0x40, 0x40, 0x40, 0x3F, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x02, 0x04, 0x08, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
0x7F, 0x09, 0x09, 0x09, 0x76};// R

const BYTE TEXT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x7F, 0x20, 0x10, 0x20, 0x7F, // W
0x41, 0x22, 0x1C, 0x22, 0x41, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20, // \
0x00, 0x00, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // `
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x44, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x44, // c
0x38, 0x44, 0x44, 0x44, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x04, 0x04, 0x7E, 0x05, 0x05, // f
0x08, 0x54, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x14, 0x7C, // q
0x00, 0x7C, 0x08, 0x04, 0x04, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x04, 0x3F, 0x44, 0x44, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x41, // {
0x00, 0x00, 0x7F, 0x00, 0x00, // |
0x41, 0x41, 0x36, 0x08, 0x00, // }
0x02, 0x01, 0x02, 0x04, 0x02};// ~

int8 i,m,t;
int8 n;
void dich(void);
void xuat(unsigned char bi);
void xoa_hien_thi(void);//viết thêm hàm này
void main()
{int x=0;
int dv,chuc;
enable_interrupts(int_rda);
enable_interrupts(global);
set_tris_b(0b00000000);
set_tris_d(0b00000000);
set_tris_a(0b000001);
doc_adc();

while(1)
{

doc_adc();
x=read_adc();
x=x/2.049;


dv=x%10;
chuc=x/10;

itoa(dv,10,string);//gan dv vao string
itoa(chuc,10,string1);//gan chuc vao string1
strcat(string1,string);//ket hop string1 va string hien thi la string1
xoa_hien_thi();//xóa vùng nhớ hien_thi trước khi cập nhập dữ liệu mới.
lay_font(string1); // Write character set to matrix
b1=1;
b0=1;

b2=1;
b0=0;
b2=0;

for(m=0;m<=63;m++)
{
n=hien_thi[m];

n=~n;
xuat(n);
delay_us(1000);

dich();
}

}
}
void doc_adc()
{
setup_ADC(ADC_clock_internal);
setup_ADC_ports(AN0);
set_ADC_channel(0);
delay_us(1000);
}

void dich()
{
b1=0;
b0=1;
b0=0;
b2=1;
b2=0;
}
void xuat(unsigned char temp)
{
#bit flag_bit = temp.7
b4=0;
for(i=0;i<=7;i++)
{
if(flag_bit==1)
{b4=1;}
else
{b4=0;}
b3=1;
b3=0;
temp<<=1;
}
b5=1;
b5=0;
}
void lay_font(char * textptr)
{
int i, j;//
BYTE pixelData[5]; // Stores character data

for(i=0; textptr[i] != '\0'; ++i ) // Loop through the passed string
{
if(textptr[i] == '#')//textptr khai bao vi tri con tro
break;
if(textptr[i] < 'S') //ky tu nam o mang text
memcpy(pixelData, TEXT[textptr[i]-' '], 5);//copy 5 byte gia tri text[textptr[i]-'' vao pixeldata
else if(textptr[i] <= '~') // ky tu nam o mang text2
memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);//copy 5 byte gia tri text2[textptr[i]-'s' vao pixeldata
else
memcpy(pixelData, TEXT[0], 5); // khoang trang
for(j=0;j<=4;j++)
{
hien_thi[chieu_dai]=(pixelData[j]);//hien thi tung ky tu
chieu_dai++;

}

}
}
void xoa_hien_thi(void)
{
chieu_dai=0;
for(m=0;m<=63;m++)
{
hien_thi[m]=0x00;//
}
}em cứ trao đổi với anh và mọi người trên diễn đàn. biết đâu còn có ích cho các bạn khác .

friend_1990
14-05-2011, 10:44 AM
cám ơn anh tdm nhiều lắm ak!!!!!!!!!!!!!!
nều giờ em làm 16 con led thành 2 hàng trên 8 con dưới 8 con cho chữ chạy ở giữa 8 con trên và 8 con dưới vậy font e tạo sẽ là font 16 phải không anh?

anh có font 16 con chạy 2 hàng không cho em với thực tức đồ án em làm là 16con led chia làm 2 hàng cho chay chữ giữa 2 hàng đó vậy có khác lắm so với chạy 1 hàng led 8 con ko anh..............

em nghi xuất dữ liệu sẽ 16 lần còn cột thì mình quét cùng lúc 2 hàng mỗi hàng 64 cột hay là mình quét trực tiếp 128 cột lun anh.........

hihi cho em hỏi cái này nữa nghe e học lập trình chưa nhiều nên lệnh này sao em đọc mãi không hiểu anh giải thik dùm em
for(i=0; textptr[i] != '\0'; ++i ) cái tetptr[i] !='\0' là gì anh nhỉ?
void xoa_hien_thi(void) cái chữ (void) nằm trong ngoac có tác dụng gì anh nếu mình không dùng dc ko anh?
const BYTE TEXT2[44][5] khai báo mảng này là 44 hàng 5 cột vậy đây là mảng 1 chiều hay 2 chiều vậy anh?và dữ liệu trong mảng anh tạo là tích cực mức thấp hay cao vậy anh?nếu thấp sao mình lại dùng thêm toán tử n=~n làm gì ạk?(n=~n là đảo toàn bộ byte vd 0011 sẽ đảo lại là 1100 em hiểu vậy không biết đúng không anh?


cám ơn anh đã xem qua và mong dc sự trả lời từ anh và các bạn!!!!!!!!!

tdm
14-05-2011, 11:42 AM
cám ơn anh tdm nhiều lắm ak!!!!!!!!!!!!!!
nều giờ em làm 16 con led thành 2 hàng trên 8 con dưới 8 con cho chữ chạy ở giữa 8 con trên và 8 con dưới vậy font e tạo sẽ là font 16 phải không anh?

anh có font 16 con chạy 2 hàng không cho em với thực tức đồ án em làm là 16con led chia làm 2 hàng cho chay chữ giữa 2 hàng đó vậy có khác lắm so với chạy 1 hàng led 8 con ko anh..............

em nghi xuất dữ liệu sẽ 16 lần còn cột thì mình quét cùng lúc 2 hàng mỗi hàng 64 cột hay là mình quét trực tiếp 128 cột lun anh.........

hihi cho em hỏi cái này nữa nghe e học lập trình chưa nhiều nên lệnh này sao em đọc mãi không hiểu anh giải thik dùm em
for(i=0; textptr[i] != '\0'; ++i ) cái tetptr[i] !='\0' là gì anh nhỉ?
void xoa_hien_thi(void) cái chữ (void) nằm trong ngoac có tác dụng gì anh nếu mình không dùng dc ko anh?
const BYTE TEXT2[44][5] khai báo mảng này là 44 hàng 5 cột vậy đây là mảng 1 chiều hay 2 chiều vậy anh?và dữ liệu trong mảng anh tạo là tích cực mức thấp hay cao vậy anh?nếu thấp sao mình lại dùng thêm toán tử n=~n làm gì ạk?(n=~n là đảo toàn bộ byte vd 0011 sẽ đảo lại là 1100 em hiểu vậy không biết đúng không anh?


cám ơn anh đã xem qua và mong dc sự trả lời từ anh và các bạn!!!!!!!!!
font 16 em phải tự viết thôi(tìm RTB4.0 về nghiên cứu)
bây giờ matrix người ta quét hàng chứ không quét cột
void xoa_hien_thi() viết như này cũng được
const BYTE TEXT2[44][5] //mảng 2 chiều
font đó tích cực mức cao
matrix của em tích cực mức thấp lên phải đảo lại .

friend_1990
14-05-2011, 12:02 PM
vậy em nên quét theo hàng hả anh?
chương trình 8 con led anh đã chỉnh sửa cho em là quét cot phải không anh?
dữ liệu mình xuất ra hàng sao đó mình đưa dữ liệu ra cột
từ trước tới giờ em toan quét cột dữ liệu ra hàng không biết cột quét phức tạp nhiều hơn không nữa :(

ak anh co em hỏi về ngắt nhận từ pc nếu từ pc truyền chuỗi xuống pic pic sẽ lưu vào mảng phụ sao khi nhận ký tự ký tự kết thúc # chẳng hạn thì pic bắt đầu lấy chuỗi và bắt đầu xử lý và đẩy chuỗi ra led matrix vậy khi nhận dữ liệu xong thì mình xuất như thế nào tại vì code lay_font() là lấy chuỗi ký tự

nhưng chuỗi pic nhận dc thì mình phải tra từng ký tự rồi mới lấy ra xuất ra led matrix
vd:
#int_rda
void ngat()
{
mang[dem]=getc();
if(mang[dem]=='#')
{
flag=1;//co ngat
dem=0;
}

else
dem++;
}

while(flag==1)
{
trong đây mình sẽ xử lý font như thế nào cho hợp lý vậy anh và cách lấy ký tự trong chuỗi nhận dc như thế nào anh(e đã nghĩ 3 ngày nay rồi vẫn ko tìm dc hướng giải quyết
}

chương trình trên pc là em viết bằng vb 6 em cũng đã viết xong rồi truyền cũng dc rồi nhưng khi pic nhận dc chuỗi ký tự em lại không biết cách lấy ra đưa lên led matrix

mong anh chỉ em dum chỗ này nữa ạk?

cám ơn anh nhiều!!!!!!!!!!!!!!!!!!!!!!

tdm
14-05-2011, 12:17 PM
vậy em nên quét theo hàng hả anh?
chương trình 8 con led anh đã chỉnh sửa cho em là quét cot phải không anh?
dữ liệu mình xuất ra hàng sao đó mình đưa dữ liệu ra cột
từ trước tới giờ em toan quét cột dữ liệu ra hàng không biết cột quét phức tạp nhiều hơn không nữa :(

ak anh co em hỏi về ngắt nhận từ pc nếu từ pc truyền chuỗi xuống pic pic sẽ lưu vào mảng phụ sao khi nhận ký tự ký tự kết thúc # chẳng hạn thì pic bắt đầu lấy chuỗi và bắt đầu xử lý và đẩy chuỗi ra led matrix vậy khi nhận dữ liệu xong thì mình xuất như thế nào tại vì code lay_font() là lấy chuỗi ký tự

nhưng chuỗi pic nhận dc thì mình phải tra từng ký tự rồi mới lấy ra xuất ra led matrix
vd:
#int_rda
void ngat()
{
mang[dem]=getc();
if(mang[dem]=='#')
{
flag=1;//co ngat
dem=0;
}

else
dem++;
}

while(flag==1)
{
trong đây mình sẽ xử lý font như thế nào cho hợp lý vậy anh và cách lấy ký tự trong chuỗi nhận dc như thế nào anh(e đã nghĩ 3 ngày nay rồi vẫn ko tìm dc hướng giải quyết
}

chương trình trên pc là em viết bằng vb 6 em cũng đã viết xong rồi truyền cũng dc rồi nhưng khi pic nhận dc chuỗi ký tự em lại không biết cách lấy ra đưa lên led matrix

mong anh chỉ em dum chỗ này nữa ạk?

cám ơn anh nhiều!!!!!!!!!!!!!!!!!!!!!!
while(flag==1)
{
lay_font(mang);//
trong đây mình sẽ xử lý font như thế nào cho hợp lý vậy anh và cách lấy ký tự trong chuỗi nhận dc như thế nào anh(e đã nghĩ 3 ngày nay rồi vẫn ko tìm dc hướng giải quyết
}

friend_1990
14-05-2011, 02:02 PM
while(flag==1)
{
lay_font(mang);//
trong đây mình sẽ xử lý font như thế nào cho hợp lý vậy anh và cách lấy ký tự trong chuỗi nhận dc như thế nào anh(e đã nghĩ 3 ngày nay rồi vẫn ko tìm dc hướng giải quyết
}

sao em lấy vẫn không được vậy anh!!!!!!!!!!!!!!
anh xem e viet bi sai cho nao khong ạk?

#include <16f877a.h>
#device 16f877*=16 ADC=10
#include <stdlib.h>
#include <string.h>
#fuses nowdt,noprotect,nolvp,hs,put
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#use rs232(baud=9600,parity=n,xmit=pin_c6,rcv=pin_c7)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#bit b0=portb.0
#bit b1=portb.1
#bit b2=portb.2
#bit b3=portb.3
#bit b4=portb.4
#bit b5=portb.5

void doc_adc();
void lay_font(char * textptr);
unsigned char bi,temp,chieu_dai=0;
unsigned char hien_thi[64];
char string[5];
char string1[5];
char string2[5];
char string3[10];
const BYTE TEXT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x03, 0x00, 0x03, 0x00, // "
0x14, 0x3E, 0x14, 0x3E, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x43, 0x33, 0x08, 0x66, 0x61, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x50, 0x30, 0x00, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x04, 0x02, 0x7F, 0x00, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x3E, 0x41, 0x59, 0x55, 0x5E, // @
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x49, 0x3A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x30, 0x40, 0x40, 0x40, 0x3F, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x02, 0x04, 0x08, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
0x7F, 0x09, 0x09, 0x09, 0x76};// R

const BYTE TEXT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x7F, 0x20, 0x10, 0x20, 0x7F, // W
0x41, 0x22, 0x1C, 0x22, 0x41, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20, // \
0x00, 0x00, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // `
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x44, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x44, // c
0x38, 0x44, 0x44, 0x44, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x04, 0x04, 0x7E, 0x05, 0x05, // f
0x08, 0x54, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x14, 0x7C, // q
0x00, 0x7C, 0x08, 0x04, 0x04, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x04, 0x3F, 0x44, 0x44, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x41, // {
0x00, 0x00, 0x7F, 0x00, 0x00, // |
0x41, 0x41, 0x36, 0x08, 0x00, // }
0x02, 0x01, 0x02, 0x04, 0x02};// ~

int8 i,m,t,flag,dem;
int8 n;
char mang[];
void dich(void);
void xuat(unsigned char bi);
void xoa_hien_thi();
#INT_RDA
void ngat()
{
mang[dem]=getc();
if(mang[dem]=='#')
{
flag=1;//co ngat
dem=0;
}

else
dem++;

while(flag==1)
{
lay_font(mang);
}
}
void main()
{int x=0;
int dv,chuc,tram;
enable_interrupts(int_rda);
enable_interrupts(global);
set_tris_b(0b00000000);
set_tris_d(0b00000000);
set_tris_a(0b000001);
doc_adc();

while(1)
{

doc_adc();
x=read_adc();
x=x/2.049;

dv=x%10;
chuc=(x%100)/10;
tram=x/100;

itoa(dv,10,string);//gan dv vao string
itoa(chuc,10,string1);//gan chuc vao string1
strcat(string1,string);//ket hop string1 va string hien thi la string1
itoa(tram,10,string2);//gan tram vao string2
strcat(string2,string1);//ghepstring1 va string2 hien thi string2
strcpy(string3,"nhiet do ");
strcat(string3,string2);
xoa_hien_thi();//xóa vùng nho hien thi truoc khi cap nhat nhiet do
lay_font(string3); // Write character set to matrix

b1=1;
b0=1;

b2=1;
b0=0;
b2=0;

for(m=0;m<=63;m++)
{
n=hien_thi[m];

n=~n;
xuat(n);
delay_us(1000);

dich();
}

}
}
void doc_adc()
{
setup_ADC(ADC_clock_internal);
setup_ADC_ports(AN0);
set_ADC_channel(0);
delay_us(1000);
}

void dich()
{
b1=0;
b0=1;
b0=0;
b2=1;
b2=0;
}
void xuat(unsigned char temp)
{
#bit flag_bit = temp.7
b4=0;
for(i=0;i<=7;i++)
{
if(flag_bit==1)
{b4=1;}
else
{b4=0;}
b3=1;
b3=0;
temp<<=1;
}
b5=1;
b5=0;
}
void lay_font(char * textptr)
{
int i, j;//
BYTE pixelData[5]; // Stores character data

for(i=0; textptr[i] != '\0'; ++i ) // Loop through the passed string
{
if(textptr[i] == '#')//textptr khai bao vi tri con tro
break;
if(textptr[i] < 'S') //ky tu nam o mang text
memcpy(pixelData, TEXT[textptr[i]-' '], 5);//copy 5 byte gia tri text[textptr[i]-'' vao pixeldata
else if(textptr[i] <= '~') // ky tu nam o mang text2
memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);//copy 5 byte gia tri text2[textptr[i]-'s' vao pixeldata
else
memcpy(pixelData, TEXT[0], 5); // khoang trang
for(j=0;j<=4;j++)
{
hien_thi[chieu_dai]=(pixelData[j]);//hien thi tung ky tu
chieu_dai++;

}

}
}
void xoa_hien_thi(void)
{
chieu_dai=0;
for(m=0;m<=63;m++)
{
hien_thi[m]=0x00;//
}
}



phía dưới là code vb6 em viết đấy ạk anh xem dùmm e lun nha

Private Sub truyen_Click()
Dim data As String
data = Text1.Text
MSComm1.Output = "*"
MSComm1.Output = data
MSComm1.Output = "#"
End Sub

Private Sub exit_Click()
MsgBox "thoat"
End
End Sub

Private Sub Form_Load()
'cai dat thong so cho cong com...." COMFIG FOR COM PORT "

With MSComm1
.CommPort = 2 'cong COM 2
.Settings = "9600,N,8,1" 'Baudrate=9600,Ko KT chan le,frame 8 bit,1 bit stop
.InBufferSize = 1024 'Bo dem 1024 byte thi day
.InputLen = 0 'Doc toan bo gia tri bo dem
.RThreshold = 1 'Cho phep ngat khi su kien Receiver o MSCOMM
.SThreshold = 0 'Ko cho phep ngat khi su kien Send o MMSCOMM
.OutBufferSize = 512
.InputMode = comInputModeText
.PortOpen = True 'Mo cong COM
End With
End Sub

friend_1990
14-05-2011, 02:05 PM
e đã thử cách của anh và nhiều cách trên diễn đàn nhưng vẫn không hiển thị được khi dùng ngắt hichic mong anh giup em!!!!!!!!!!!!1
các bạn ai biết chỉ giúp mình lun nha!!!!!!!!!!!!

thanks tất cả mọi người!!!!!!!!!!!!!!!!

tdm
14-05-2011, 09:20 PM
e đã thử cách của anh và nhiều cách trên diễn đàn nhưng vẫn không hiển thị được khi dùng ngắt hichic mong anh giup em!!!!!!!!!!!!1
các bạn ai biết chỉ giúp mình lun nha!!!!!!!!!!!!

thanks tất cả mọi người!!!!!!!!!!!!!!!!
em viết như vậy thì matrix luôn luôn hiển thị giá trị trong string3.
em bỏ code vào trong thẻ cho dễ nhìn.
hãy kiểm tra từng phần một.
viết thử một ct đưa dữ liệu từ pc xuống xem matrix hiển thi đúng hay chưa.
http://www.youtube.com/watch?v=uMCZBRYTnog

tanbka
14-05-2011, 10:17 PM
Trong CCS dã xây dựng sẵn hàm truyền nhận nối tiếp, theo chuẩn RS485. Bạn vào đường dẫn cài thư mục, tìm file RS485.c. Trong đó người ta đã xây dựng đủ các hàm truyền nhận, có chống xung đột khi truyền theo mạng 485. Bạn chỉ cần khai báo bộ đệm(một mảng số liệu), sau đó mỗi khi có số liệu, bạn chỉ cần lôi từng thằng trong mảng ra để xử lý. Cái này Tây nó làm, chạy ngon lắm rồi, mình cũng đã dùng nó với thằng PIC6F877, chạy mạng 485 đa điểm. Very good.

friend_1990
14-05-2011, 11:01 PM
Trong CCS dã xây dựng sẵn hàm truyền nhận nối tiếp, theo chuẩn RS485. Bạn vào đường dẫn cài thư mục, tìm file RS485.c. Trong đó người ta đã xây dựng đủ các hàm truyền nhận, có chống xung đột khi truyền theo mạng 485. Bạn chỉ cần khai báo bộ đệm(một mảng số liệu), sau đó mỗi khi có số liệu, bạn chỉ cần lôi từng thằng trong mảng ra để xử lý. Cái này Tây nó làm, chạy ngon lắm rồi, mình cũng đã dùng nó với thằng PIC6F877, chạy mạng 485 đa điểm. Very good.


bạn nói khó hiểu quá có vd nào cụ thể dễ hiễu được không?
mình chỉ sử dụng rs 232 thôi không cần dùng 485 đâu
mình truyền dữ liệu từ pc xuống pic rồi pic hiển thị thôi ak
bạn biết chỉ giúp mình nghe!!!!!!!!!!!
thanks!!!!!!!!11

friend_1990
14-05-2011, 11:03 PM
em viết như vậy thì matrix luôn luôn hiển thị giá trị trong string3.
em bỏ code vào trong thẻ cho dễ nhìn.
hãy kiểm tra từng phần một.
viết thử một ct đưa dữ liệu từ pc xuống xem matrix hiển thi đúng hay chưa.
http://www.youtube.com/watch?v=uMCZBRYTnog


phần mềm anh đang sử dụng là gì vậy ak sao em down về không giống cái của anh ạk
khi mình down phần mềm đó về rồi có cần phải cài thông số gì không anh hay sử dụng trực tiếp ạk,chỉ viết chương trình nhận phía dưới pic thôi hả anh?

tdm
14-05-2011, 11:49 PM
phần mềm anh đang sử dụng là gì vậy ak sao em down về không giống cái của anh ạk
khi mình down phần mềm đó về rồi có cần phải cài thông số gì không anh hay sử dụng trực tiếp ạk,chỉ viết chương trình nhận phía dưới pic thôi hả anh?
Anh dùng cái này và phần mềm com ảo để làm việc đó.
phải khai báo tốc độ baud=9600,parity=n

friend_1990
15-05-2011, 12:47 AM
cái đọc từ pc này để em nghiên cứu từ từ đã
truyền mãi không dc bực chit dc

àk anh ơi em muốn chữ dịch sang trái thì em phải dùng vòng lặp như thế nào anh?
cho em gợi ý nhe anh!!!!!!!!!!!!!!!!!!

mong bạn tanbka chỉ giúp mình nữa nha !!!!!!!!!!!!!

thanks anh và tanbka nhiều!!!!!!!!!!!!

friend_1990
15-05-2011, 01:32 AM
Anh dùng cái này và phần mềm com ảo để làm việc đó.
phải khai báo tốc độ baud=9600,parity=n



sao em cài rồi mà vẫn không hiển thị được ký tự anh có viết thay đổi chương trình chỗ nào không anh!!!!!!!!!!!!!! hay anh vẫn giữ nguyên chương trình cũ ạk

tdm
15-05-2011, 09:12 AM
sao em cài rồi mà vẫn không hiển thị được ký tự anh có viết thay đổi chương trình chỗ nào không anh!!!!!!!!!!!!!! hay anh vẫn giữ nguyên chương trình cũ ạk

hãy kiểm tra từng phần một.
viết thử một ct đưa dữ liệu từ pc xuống xem matrix hiển thi đúng hay chưa.
anh viết lại chỉ để kiểm tra đưa dữ liệu từ pc xuống xem matrix hiển thi đúng hay chưa.

friend_1990
15-05-2011, 09:30 AM
sao cả buổi tối ngồi em đã tìm được cái sai của mình mong anh cho em hướng giải quyết ạk!!!!!!!!!!!!1

vấn đề sai ở chỗ là:
#INT_RDA
void ngat()
{
mang[dem]=getc();
if(mang[dem]=='#')
{
flag=1;//co ngat
dem=0;
}

else
dem++;

while(flag==1)
{
lay_font(mang);
}
}

khi em khai báo char mang[]=""; thì nó hiểu nhưng khi em khai báo mang[]=""; thì nó không hiểu để xuất ra led matran vậy mình nên khai báo như thế nào để cho nó hiểu mảng là char mang[]="" để lúc đó flag==1 thì nó sẽ xuất ra led ak

và giờ em muồn cho chữ cuộn tròn (dịch trái )thì mình nên thêm vòng lặp như thế nào anh nhỉ?

tdm
15-05-2011, 10:13 AM
sao cả buổi tối ngồi em đã tìm được cái sai của mình mong anh cho em hướng giải quyết ạk!!!!!!!!!!!!1

vấn đề sai ở chỗ là:
#INT_RDA
void ngat()
{
mang[dem]=getc();
if(mang[dem]=='#')
{
flag=1;//co ngat
dem=0;
}

else
dem++;

while(flag==1)
{
lay_font(mang);
}
}

khi em khai báo char mang[]=""; thì nó hiểu nhưng khi em khai báo mang[]=""; thì nó không hiểu để xuất ra led matran vậy mình nên khai báo như thế nào để cho nó hiểu mảng là char mang[]="" để lúc đó flag==1 thì nó sẽ xuất ra led ak

và giờ em muồn cho chữ cuộn tròn (dịch trái )thì mình nên thêm vòng lặp như thế nào anh nhỉ?
khai báo char mang[20]//khai báo như vậy là được .[20] có thể thay đổi nhưng <=96.
code dich trái:
khai báo lại mảng unsigned char hien_thi[96];

while(1)
{
int dich_chu=0,toc_do_chay=0;
for(dich_chu=0;dich_chu<=32;dich_chu++)//pic 16f877a không đủ ram nên chỉ dịch được 32 cột.
{
for(toc_do_chay=0;toc_do_chay<=2;toc_do_chay++)
{
b1=1;
b0=1;

b2=1;
b0=0;
b2=0;
for(m=0;m<=63;m++)
{
n=hien_thi[m+dich_chu];
n=~n;
xuat(n);
delay_us(1000);
dich();
}
}
}
}

friend_1990
15-05-2011, 11:25 AM
khai báo char mang[20]//khai báo như vậy là được .[20] có thể thay đổi nhưng <=96.
code dich trái:
khai báo lại mảng unsigned char hien_thi[96];

while(1)
{
int dich_chu=0,toc_do_chay=0;
for(dich_chu=0;dich_chu<=32;dich_chu++)//pic 16f877a không đủ ram nên chỉ dịch được 32 cột.
{
for(toc_do_chay=0;toc_do_chay<=2;toc_do_chay++)
{
b1=1;
b0=1;

b2=1;
b0=0;
b2=0;
for(m=0;m<=63;m++)
{
n=hien_thi[m+dich_chu];
n=~n;
xuat(n);
delay_us(1000);
dich();
}
}
}
}



sao em đã thêm vào nhưng nó chỉ chạy được 1 lần sang lần thứ 2 thì nó chạy sai cập nhật nhiệt độ không được
sao hiển thị phải nhỏ hon 96 vậy anh?
file em đã thêm ở dưới có thêm phần của anh nữa nhưng vẫn chạy sai anh xem dùm em!!!!!!!!!!!!!!!
cám ơn anh!!!!!!!!!!!!!!

friend_1990
15-05-2011, 11:27 AM
khai báo char mang[20]//khai báo như vậy là được .[20] có thể thay đổi nhưng <=96.
code dich trái:
khai báo lại mảng unsigned char hien_thi[96];

while(1)
{
int dich_chu=0,toc_do_chay=0;
for(dich_chu=0;dich_chu<=32;dich_chu++)//pic 16f877a không đủ ram nên chỉ dịch được 32 cột.
{
for(toc_do_chay=0;toc_do_chay<=2;toc_do_chay++)
{
b1=1;
b0=1;

b2=1;
b0=0;
b2=0;
for(m=0;m<=63;m++)
{
n=hien_thi[m+dich_chu];
n=~n;
xuat(n);
delay_us(1000);
dich();
}
}
}
}

dưới là code em đã thêm phần của anh vào ạk
e đã thêm vào nhưng chạy được 1 lần nhưng nhiêt độ cũng bị cập nhật sai anh ơi sang lần 2 nó bị lỗi ko hiển thị được nữa]
vì sao hiển thị phải nhỏ hơn 96 vậy anh lớn hơn sao ko anh?
a down về xem dùm em!!!!!!!!!!!!!!!!
cám ơn anh nhiều ạk!!!!!!!!!!!

tdm
15-05-2011, 04:06 PM
dưới là code em đã thêm phần của anh vào ạk
e đã thêm vào nhưng chạy được 1 lần nhưng nhiêt độ cũng bị cập nhật sai anh ơi sang lần 2 nó bị lỗi ko hiển thị được nữa]
vì sao hiển thị phải nhỏ hơn 96 vậy anh lớn hơn sao ko anh?
a down về xem dùm em!!!!!!!!!!!!!!!!
cám ơn anh nhiều ạk!!!!!!!!!!!
pic 16f chỉ cho khai báo một mảng ram dài tối đa 96 byte.
thường thì matrix phải liên tục cập nhập dữ liệu người ta dùng thêm ram ngoài.

#include <16f877a.h>
#device 16f877a*=16 ADC=10
#include <stdlib.h>
#include <string.h>
#fuses nowdt,noprotect,nolvp,hs,put
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use rs232(baud=9600,parity=N,xmit=pin_c6,rcv=pin_c7)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
#bit b0=portb.0
#bit b1=portb.1
#bit b2=portb.2
#bit b3=portb.3
#bit b4=portb.4
#bit b5=portb.5

int dich_chu=0,toc_doc_chay=0;
void doc_adc();
void lay_font(char * textptr);
unsigned char bi,temp,chieu_dai=0;
unsigned char hien_thi[96];
char string[5];
char string1[5];
char string2[5];
char string3[10]="nhiet do:#";
const BYTE TEXT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x03, 0x00, 0x03, 0x00, // "
0x14, 0x3E, 0x14, 0x3E, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x43, 0x33, 0x08, 0x66, 0x61, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x50, 0x30, 0x00, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x04, 0x02, 0x7F, 0x00, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x3E, 0x41, 0x59, 0x55, 0x5E, // @
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x49, 0x3A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x30, 0x40, 0x40, 0x40, 0x3F, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x02, 0x04, 0x08, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
0x7F, 0x09, 0x09, 0x09, 0x76};// R

const BYTE TEXT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x7F, 0x20, 0x10, 0x20, 0x7F, // W
0x41, 0x22, 0x1C, 0x22, 0x41, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20, // \
0x00, 0x00, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // `
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x44, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x44, // c
0x38, 0x44, 0x44, 0x44, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x04, 0x04, 0x7E, 0x05, 0x05, // f
0x08, 0x54, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x14, 0x7C, // q
0x00, 0x7C, 0x08, 0x04, 0x04, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x04, 0x3F, 0x44, 0x44, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x41, // {
0x00, 0x00, 0x7F, 0x00, 0x00, // |
0x41, 0x41, 0x36, 0x08, 0x00, // }
0x02, 0x01, 0x02, 0x04, 0x02};// ~

int8 i,m,t,flag,dem;

int8 n;
char mang[];
void dich(void);
void xuat(unsigned char bi);
void xoa_hien_thi();
#INT_RDA
void ngat()
{
mang[dem]=getc();
if(mang[dem]=='#')
{
flag=1;//co ngat
dem=0;
}
else{
dem++;
}
}
void main()
{int x=0;
int dv,chuc,tram;
enable_interrupts(INT_RDA);
enable_interrupts(global);
set_tris_b(0b00000000);
set_tris_d(0b00000000);
set_tris_a(0b000001);
int dich_chu=0,toc_do_chay=0;
while(1)
{
doc_adc();
x=read_adc();
x=x/2.049;
dv=x%10;
chuc=x/10;
itoa(dv,10,string);//gan dv vao string
itoa(chuc,10,string1);//gan chuc vao string1
strcat(string1,string);//ket hop string1 va string hien thi la string1
xoa_hien_thi();//xóa vùng nho hien thi truoc khi cap nhat nhiet do
lay_font(string3); // Write character set to matrix
lay_font(string1); // Write character set to matrix
for(dich_chu=0;dich_chu<=32;dich_chu++)
{
for(toc_do_chay=0;toc_do_chay<=2;toc_do_chay++)
{
b1=1;
b0=1;

b2=1;
b0=0;
b2=0;

for(m=0;m<=63;m++)
{
n=hien_thi[m+dich_chu];

n=~n;
xuat(n);
delay_us(1000);

dich();
}
}
}
}
}
void doc_adc()
{
setup_ADC(ADC_clock_internal);
setup_ADC_ports(AN0);
set_ADC_channel(0);
delay_us(1000);
}

void dich()
{
b1=0;
b0=1;
b0=0;
b2=1;
b2=0;
}
void xuat(unsigned char temp)
{
#bit flag_bit = temp.7
b4=0;
for(i=0;i<=7;i++)
{
if(flag_bit==1)
{b4=1;}
else
{b4=0;}
b3=1;
b3=0;
temp<<=1;
}
b5=1;
b5=0;
}
void lay_font(char * textptr)
{
int i, j;//
BYTE pixelData[5]; // Stores character data

for(i=0; textptr[i] != '\0'; ++i ) // Loop through the passed string
{
if(textptr[i] == '#')//textptr khai bao vi tri con tro
break;
if(textptr[i] < 'S') //ky tu nam o mang text
memcpy(pixelData, TEXT[textptr[i]-' '], 5);//copy 5 byte gia tri text[textptr[i]-'' vao pixeldata
else if(textptr[i] <= '~') // ky tu nam o mang text2
memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);//copy 5 byte gia tri text2[textptr[i]-'s' vao pixeldata
else
memcpy(pixelData, TEXT[0], 5); // khoang trang
for(j=0;j<=4;j++)
{
hien_thi[chieu_dai]=(pixelData[j]);//hien thi tung ky tu
chieu_dai++;

}

}
}
void xoa_hien_thi(void)
{
chieu_dai=0;
for(m=0;m<=96;m++)
{
hien_thi[m]=0x00;
}
}

friend_1990
15-05-2011, 05:06 PM
pic 16f chỉ cho khai báo một mảng ram dài tối đa 96 byte.
thường thì matrix phải liên tục cập nhập dữ liệu người ta dùng thêm ram ngoài.

#include <16f877a.h>
#device 16f877a*=16 ADC=10
#include <stdlib.h>
#include <string.h>
#fuses nowdt,noprotect,nolvp,hs,put
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use rs232(baud=9600,parity=N,xmit=pin_c6,rcv=pin_c7)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
#bit b0=portb.0
#bit b1=portb.1
#bit b2=portb.2
#bit b3=portb.3
#bit b4=portb.4
#bit b5=portb.5

int dich_chu=0,toc_doc_chay=0;
void doc_adc();
void lay_font(char * textptr);
unsigned char bi,temp,chieu_dai=0;
unsigned char hien_thi[96];
char string[5];
char string1[5];
char string2[5];
char string3[10]="nhiet do:#";
const BYTE TEXT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x03, 0x00, 0x03, 0x00, // "
0x14, 0x3E, 0x14, 0x3E, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x43, 0x33, 0x08, 0x66, 0x61, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x50, 0x30, 0x00, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x04, 0x02, 0x7F, 0x00, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x3E, 0x41, 0x59, 0x55, 0x5E, // @
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x49, 0x3A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x30, 0x40, 0x40, 0x40, 0x3F, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x02, 0x04, 0x08, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
0x7F, 0x09, 0x09, 0x09, 0x76};// R

const BYTE TEXT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x7F, 0x20, 0x10, 0x20, 0x7F, // W
0x41, 0x22, 0x1C, 0x22, 0x41, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20, // \
0x00, 0x00, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // `
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x44, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x44, // c
0x38, 0x44, 0x44, 0x44, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x04, 0x04, 0x7E, 0x05, 0x05, // f
0x08, 0x54, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x14, 0x7C, // q
0x00, 0x7C, 0x08, 0x04, 0x04, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x04, 0x3F, 0x44, 0x44, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x41, // {
0x00, 0x00, 0x7F, 0x00, 0x00, // |
0x41, 0x41, 0x36, 0x08, 0x00, // }
0x02, 0x01, 0x02, 0x04, 0x02};// ~

int8 i,m,t,flag,dem;

int8 n;
char mang[];
void dich(void);
void xuat(unsigned char bi);
void xoa_hien_thi();
#INT_RDA
void ngat()
{
mang[dem]=getc();
if(mang[dem]=='#')
{
flag=1;//co ngat
dem=0;
}
else{
dem++;
}
}
void main()
{int x=0;
int dv,chuc,tram;
enable_interrupts(INT_RDA);
enable_interrupts(global);
set_tris_b(0b00000000);
set_tris_d(0b00000000);
set_tris_a(0b000001);
int dich_chu=0,toc_do_chay=0;
while(1)
{
doc_adc();
x=read_adc();
x=x/2.049;
dv=x%10;
chuc=x/10;
itoa(dv,10,string);//gan dv vao string
itoa(chuc,10,string1);//gan chuc vao string1
strcat(string1,string);//ket hop string1 va string hien thi la string1
xoa_hien_thi();//xóa vùng nho hien thi truoc khi cap nhat nhiet do
lay_font(string3); // Write character set to matrix
lay_font(string1); // Write character set to matrix
for(dich_chu=0;dich_chu<=32;dich_chu++)
{
for(toc_do_chay=0;toc_do_chay<=2;toc_do_chay++)
{
b1=1;
b0=1;

b2=1;
b0=0;
b2=0;

for(m=0;m<=63;m++)
{
n=hien_thi[m+dich_chu];

n=~n;
xuat(n);
delay_us(1000);

dich();
}
}
}
}
}
void doc_adc()
{
setup_ADC(ADC_clock_internal);
setup_ADC_ports(AN0);
set_ADC_channel(0);
delay_us(1000);
}

void dich()
{
b1=0;
b0=1;
b0=0;
b2=1;
b2=0;
}
void xuat(unsigned char temp)
{
#bit flag_bit = temp.7
b4=0;
for(i=0;i<=7;i++)
{
if(flag_bit==1)
{b4=1;}
else
{b4=0;}
b3=1;
b3=0;
temp<<=1;
}
b5=1;
b5=0;
}
void lay_font(char * textptr)
{
int i, j;//
BYTE pixelData[5]; // Stores character data

for(i=0; textptr[i] != '\0'; ++i ) // Loop through the passed string
{
if(textptr[i] == '#')//textptr khai bao vi tri con tro
break;
if(textptr[i] < 'S') //ky tu nam o mang text
memcpy(pixelData, TEXT[textptr[i]-' '], 5);//copy 5 byte gia tri text[textptr[i]-'' vao pixeldata
else if(textptr[i] <= '~') // ky tu nam o mang text2
memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);//copy 5 byte gia tri text2[textptr[i]-'s' vao pixeldata
else
memcpy(pixelData, TEXT[0], 5); // khoang trang
for(j=0;j<=4;j++)
{
hien_thi[chieu_dai]=(pixelData[j]);//hien thi tung ky tu
chieu_dai++;

}

}
}
void xoa_hien_thi(void)
{
chieu_dai=0;
for(m=0;m<=96;m++)
{
hien_thi[m]=0x00;
}
}



char string3[10]="nhiet do:#"; sao mình phải thêm ký tự # vậy anh khi em bỏ lại xuất hiện ký tự khác vậy anhh?
trong lúc đang chạy sao nhiệt độ khi mình thay đồi con lm 35 nó không thay đổi theo vậy anh!!!!!!!!!!!vấn đề nằm ở đâu anh nhỉ?(nó chỉ dịch được 32 cột xong thì nhiệt độ mới cập nhật tiếp dc em muốn là nó đang chạy khi mình chỉnh lm35 thì nhiệt độ thay đổi theo vậy mình chỉnh dc ko anh)
nếu mình dùng ram ngoài mình nên dùng ram dung lượng là bao nhiêu vậy anh?
và mảng mình khai báo dùng ram ngoài thì được bao nhiêu byte vậy anh?
em chưa sử dụng ram ngoài lần nào anh gợi ý hay 1 vd cho em ạk?
em cám ơn anh nhiều !!!!!!!!!!!!!!

tdm
15-05-2011, 08:39 PM
char string3[10]="nhiet do:#"; sao mình phải thêm ký tự # vậy anh khi em bỏ lại xuất hiện ký tự khác vậy anhh?
trong lúc đang chạy sao nhiệt độ khi mình thay đồi con lm 35 nó không thay đổi theo vậy anh!!!!!!!!!!!vấn đề nằm ở đâu anh nhỉ?(nó chỉ dịch được 32 cột xong thì nhiệt độ mới cập nhật tiếp dc em muốn là nó đang chạy khi mình chỉnh lm35 thì nhiệt độ thay đổi theo vậy mình chỉnh dc ko anh)
nếu mình dùng ram ngoài mình nên dùng ram dung lượng là bao nhiêu vậy anh?
và mảng mình khai báo dùng ram ngoài thì được bao nhiêu byte vậy anh?
em chưa sử dụng ram ngoài lần nào anh gợi ý hay 1 vd cho em ạk?
em cám ơn anh nhiều !!!!!!!!!!!!!!

sao mình phải thêm ký tự # vậy anh khi em bỏ lại xuất hiện ký tự khác vậy anhh?

em để ý trong hàm ( lay_font ) anh viết khi gặp kí tự # thoát khỏi hàm.

em muốn là nó đang chạy khi mình chỉnh lm35 thì nhiệt độ thay đổi theo vậy mình chỉnh dc ko anh)

hoàn toàn được.

void main()
{int x=0;
int dv,chuc,tram;
enable_interrupts(INT_RDA);
enable_interrupts(global);
set_tris_b(0b00000000);
set_tris_d(0b00000000);
set_tris_a(0b000001);
int dich_chu=0,toc_do_chay=0;
while(1)
{
doc_adc();
for(dich_chu=0;dich_chu<=32;dich_chu++)
{
for(toc_do_chay=0;toc_do_chay<=2;toc_do_chay++)
{
b1=1;
b0=1;

b2=1;
b0=0;
b2=0;
x=read_adc();
x=x/2.049;
dv=x%10;
chuc=x/10;
itoa(dv,10,string);//gan dv vao string
itoa(chuc,10,string1);//gan chuc vao string1
strcat(string1,string);//ket hop string1 va string hien thi la string1
xoa_hien_thi();//xóa vùng nho hien thi truoc khi cap nhat nhiet do
lay_font(string3); // Write character set to matrix
lay_font(string1); // Write character set to matrix
for(m=0;m<=63;m++)
{
n=hien_thi[m+dich_chu];

n=~n;
xuat(n);
delay_us(1000);

dich();
}
}
}
}
}
em có thể dùng pic18f ram lớn hơn phù hợp với ứng dụng của em.

friend_1990
15-05-2011, 09:12 PM
dạ em biết là sử dụng con 18f sẽ đủ nhưng đề tài thầy giao cho em là phải dùng con 16f877a anh ơi!!!!!!!hic
em có lên mạng tìm hiểu về cách đọc ram ngoài thấy người ta sử dụng con 6264 em đọc datasheet nó em không hiểu cho lắm liệu em dùng con này đủ dung lượng chương trình em không anh (sau này em còn viết ngày giờ phút giây tháng năm nữa)
em thấy phía trước ram ngoài lúc nào người ta cũng dùng con ic chốt 74153 ở phía trước nó ngõ ra pic nối vào ic chốt ngõ ra ic chốt nối vào ram ngoài vậy em có nên dùng ic chốt phía trước không anh hay cho dữ liệu đổ từ pic vào ram lun anh!!!!!!!!!!!

và chương trình viết copy font vào ram có khó không anh em đọc thấy người ta viết có cái em đọc hiểu có cái em vẫn chưa rõ anh viết 1 đoạn code nhỏ làm vd minh họa cho em hiểu nhe anh!!!!!!!!!!!!!

và dữ liệu ram ngoài thì mảng mình chứa bao nhiêu byte vậy anh(vd :em muốn làm 14 con led hay hơn thì mình dịch vẫn được đúng hok anh?)

còn 1 điều nữa anh nghĩ nó không quan trọng với anh nhưng em thấy nó quan trọng với em hi đơn giản thôi àk em muốn biết tên anh là gì để dễ xưng hô thôi ạk
tại a đã giúp em nhiều mà em lại hok biết dc anh tên gì thì kỳ lắm hihi

e rất vui vì được quen anh và nhậ được sự giúp đỡ từ anh
cám ơn anh nhiều nhều lắm ạk!!!!!!!!!!!!!:)

tdm
15-05-2011, 09:24 PM
dạ em biết là sử dụng con 18f sẽ đủ nhưng đề tài thầy giao cho em là phải dùng con 16f877a anh ơi!!!!!!!hic
em có lên mạng tìm hiểu về cách đọc ram ngoài thấy người ta sử dụng con 6264 em đọc datasheet nó em không hiểu cho lắm liệu em dùng con này đủ dung lượng chương trình em không anh (sau này em còn viết ngày giờ phút giây tháng năm nữa)
em thấy phía trước ram ngoài lúc nào người ta cũng dùng con ic chốt 74153 ở phía trước nó ngõ ra pic nối vào ic chốt ngõ ra ic chốt nối vào ram ngoài vậy em có nên dùng ic chốt phía trước không anh hay cho dữ liệu đổ từ pic vào ram lun anh!!!!!!!!!!!

và chương trình viết copy font vào ram có khó không anh em đọc thấy người ta viết có cái em đọc hiểu có cái em vẫn chưa rõ anh viết 1 đoạn code nhỏ làm vd minh họa cho em hiểu nhe anh!!!!!!!!!!!!!

và dữ liệu ram ngoài thì mảng mình chứa bao nhiêu byte vậy anh(vd :em muốn làm 14 con led hay hơn thì mình dịch vẫn được đúng hok anh?)

còn 1 điều nữa anh nghĩ nó không quan trọng với anh nhưng em thấy nó quan trọng với em hi đơn giản thôi àk em muốn biết tên anh là gì để dễ xưng hô thôi ạk
tại a đã giúp em nhiều mà em lại hok biết dc anh tên gì thì kỳ lắm hihi

e rất vui vì được quen anh và nhậ được sự giúp đỡ từ anh
cám ơn anh nhiều nhều lắm ạk!!!!!!!!!!!!!:)
ram 6264 có dung lượng 8k như vậy là đủ cho ứng dụng của em.
dùng con ic chốt 74ls573 để chốt d/c thấp (mục đích tiết kiệm chân vdk)
anh tên là:Minh

friend_1990
15-05-2011, 09:43 PM
hi cám ơn anh Minh nha!!!!!

vậy mình phải dùng con chốt để tiết kiệm port vdk vậy mình phải dùng 1 port để điều khiển copy ram hả anh?

vậy phần cứng mình phải thiết kế thế nào anh Minh( theo em thì từ vdk nối vào ic chốt sao đó từ ic chốt nối vào ram ngoài )
vậy từ ram ngoài mình có cần nối vào ic ghi dich 595 nua không anh hay mình cho dữ liệu ra trực tiếp

em nghĩ nếu cho dữ liệu ra trực tiếp thì code sẽ phải viết lại từ đầu,nếu dùng 595 phía sau thì mình phải dùng 1 con ic chuyển đổi từ song song ra nối tiếp nữa đúng hok anh Minh tại ram ngoài dữ liệu ra song song mà

em nghĩ vậy không biết đúng hok a chỉnh giùm em nha!!!!!!!!!!!!

àk còn vấn đề em thắc mắc nữa là ram ngoài đó mình chỉ chứa font hay còn phải chứa gì nữa không anh?

cám ơn anh Minh nhiều ạk!!!!!!!!!!!!!

tanbka
16-05-2011, 01:15 AM
Hinh nhu cac ban dang lam 1 bang dien tu cho ngan hang hay sao ay ma phai dung them RAM ngoai...Do an cua ban dinh quet bao nhieu cot. Minh nghi trong khuon kho mot do an cua ban thi dung 1 con 16F887 la thua suc roi.
Mình đã từng làm, với một mảng n phần tử, thì bạn quyét được n cột, mảng 40 phần tử bạn đã quyét được 40 cột rồi.
Ngày trước mình dùng con 8051 để quyét 3 module led, dịch trái, phải, lên, xuống, còn thừa sức mà. Vấn đề cơ bản là bạn sắp xếp chương trình như thế nào cho hợp lý
Không nên phức tạp vấn đề quá lên bạn ơi...

friend_1990
16-05-2011, 01:45 AM
Hinh nhu cac ban dang lam 1 bang dien tu cho ngan hang hay sao ay ma phai dung them RAM ngoai...Do an cua ban dinh quet bao nhieu cot. Minh nghi trong khuon kho mot do an cua ban thi dung 1 con 16F887 la thua suc roi.
Mình đã từng làm, với một mảng n phần tử, thì bạn quyét được n cột, mảng 40 phần tử bạn đã quyét được 40 cột rồi.
Ngày trước mình dùng con 8051 để quyét 3 module led, dịch trái, phải, lên, xuống, còn thừa sức mà. Vấn đề cơ bản là bạn sắp xếp chương trình như thế nào cho hợp lý
Không nên phức tạp vấn đề quá lên bạn ơi...



vấn đề là pic 16f dung lương ram ko đủ bạn ơi mình ko làm 8051 nên ko rõ nữa đề tài mình bắt buộc dùng pic 16f mà nên mình mới cần sự giúp đỡ của bạn cũng như của mọi người để mình hoàn thành luận văn cuối cùng này

mong bạn giúp đỡ mình
thanks bạn!!!!!!!!!!!!!!!!

friend_1990
16-05-2011, 10:51 AM
ram 6264 có dung lượng 8k như vậy là đủ cho ứng dụng của em.
dùng con ic chốt 74ls573 để chốt d/c thấp (mục đích tiết kiệm chân vdk)
anh tên là:Minh


anh Minh ơi em tìm hiểu cả buổi tối nhưng em không biết kết nối ngõ ra ram ngoài như thế nào cho phù hợp với phần mềm mình đã viết hết anh giúp em nha

dưới là protuse e đã vẽ nhưng còn ngõ ra ram ngoài thì em không biết kết nối với 595 như thế nào hết ák

anh có kinh nghiệm chỉ em với!!!!!!!!!!!!!

em chỉ kết nối với 8 con led trên thôi nha anh còn 8 con dưới thì khỏi nhe anh!!!!!!!!!!!!

em cám ơn anh!!!!!!

tdm
16-05-2011, 10:12 PM
anh Minh ơi em tìm hiểu cả buổi tối nhưng em không biết kết nối ngõ ra ram ngoài như thế nào cho phù hợp với phần mềm mình đã viết hết anh giúp em nha

dưới là protuse e đã vẽ nhưng còn ngõ ra ram ngoài thì em không biết kết nối với 595 như thế nào hết ák

anh có kinh nghiệm chỉ em với!!!!!!!!!!!!!

em chỉ kết nối với 8 con led trên thôi nha anh còn 8 con dưới thì khỏi nhe anh!!!!!!!!!!!!

em cám ơn anh!!!!!!
phần cứng nó chẳng liên quan gì đến 595 cả.
em nên coi tài liệu liên quan đến sram 6264 để biết cách đọc và ghi nó.
đây là cách cơ bản để kết nối sram 6264 với pic.

friend_1990
16-05-2011, 10:19 PM
như vậy dữ liệu mình đổ vào chạy vẫn như cũ hả anh?

em nghĩ dữ liệu mình copy vào ram là 8bit sao mình không dùng từ A0 tới A7 thôi mà phải dùng cả A8 trở xuống nữa hả anh?mình bỏ được không anh nó có tác dụng gì anh nhỉ?

chân data chan chốt chan clk 595 mình vẫn mắc như cũ hay có phải thay đổi gì không anh Minh?

àk nếu mình dùng ram ngoài khi mất điện thì sẽ bị xóa và phải nạp lại chương trình đúng hok anh?

khi mình dùng ngắt rda truyên dữ liệu từ pc xuống pic mình cần phải lưu vào eprom trong pic liệu dung lương pic 16f rom chứa đủ dữ liệu từ máy tính truyền xuống không anh hay phải dùng rom ngaòi nữa anh?

tanbka
16-05-2011, 11:17 PM
Oh ý mình nói là con 8051 còn dư RAM thì con PIC 16F chắc chắn thừa vì nó còn nhìu ram hơn mà hix hix...

tanbka
16-05-2011, 11:25 PM
16F877 có 256bytes rom cơ mà, bạn liệu đã dùng hết chưa mà đã nghĩ đến chuyện lắp rom ngoại.
Nếu giả sử có thiếu nữa, thì bạn dùng pic16F877A ấy, loại này bạn có thể lưu dữ liệu lên Flash nữa, thoải mái nhé.
À còn về RAM nữa, con này có những 368 bytes RAM, gấp 3 lần con 8051 đó bạn. Mình nghĩ là quá thoải mái để bạn làm một đồ án.
Chúc bạn thành công.

friend_1990
16-05-2011, 11:25 PM
Oh ý mình nói là con 8051 còn dư RAM thì con PIC 16F chắc chắn thừa vì nó còn nhìu ram hơn mà hix hix...


sr tại mình ko hiểu ý bạn đùng bùn nhe!!!!!!!!!!

mình dùng nhiều thứ khác nữa nên thiếu rồi bạn ơi!!!!!!!!
bạn có yahoo chứ nếu có mình với bạn có thể trao đổi cho nhau dc chứ

của mình là phongvu_1232002

friend_1990
17-05-2011, 12:28 AM
phần cứng nó chẳng liên quan gì đến 595 cả.
em nên coi tài liệu liên quan đến sram 6264 để biết cách đọc và ghi nó.
đây là cách cơ bản để kết nối sram 6264 với pic.


anh Minh ơi giờ mình muốn dịch cả 64 cột hay lớn hơn thì biện pháp mình làm là gì hả anh?nó liên quan đến việc mở rộng ram ngoài không anh?
thanks anh!!!!!!!!!!!!!!!

tdm
17-05-2011, 10:05 PM
16F877 có 256bytes rom cơ mà, bạn liệu đã dùng hết chưa mà đã nghĩ đến chuyện lắp rom ngoại.
Nếu giả sử có thiếu nữa, thì bạn dùng pic16F877A ấy, loại này bạn có thể lưu dữ liệu lên Flash nữa, thoải mái nhé.
À còn về RAM nữa, con này có những 368 bytes RAM, gấp 3 lần con 8051 đó bạn. Mình nghĩ là quá thoải mái để bạn làm một đồ án.
Chúc bạn thành công.
368 bytes RAM nó chia ra làm nhiều bank
với pic 16f ccs c chỉ cho phép khai báo một mảng sram dài tối đa là 96 byte.
bạn có thể cho một đoạn code để mọi người tham khảo.
làm led matrix quan trọng tốc độ ghi đọc dữ liệu phải nhanh.

tdm
17-05-2011, 10:30 PM
anh Minh ơi giờ mình muốn dịch cả 64 cột hay lớn hơn thì biện pháp mình làm là gì hả anh?nó liên quan đến việc mở rộng ram ngoài không anh?
thanks anh!!!!!!!!!!!!!!!
theo anh đề tài của em yêu cầu cập nhập nhiệt độ và hiển thị thời gian thực
thì dữ liệu đưa ra bảng matrix cũng khá nhiều.em nên dùng ram ngoài(đây chỉ là ý kiến của anh thôi nhé)
anh cũng làm matrix chán rồi tìm đủ mọi cách tận dụng hết tài nguyên của pic
nhưng tốc độ đọc ghi của Flash,eeprom mất nhiều time quá.

friend_1990
17-05-2011, 10:30 PM
vâng em cũng là sẽ dùng ram ngoài anh ạk
nhưng để viết chương trình đọc ram em vẫn chưa hiểu anh có thể viết code để em hiểu hơn dc ko anh chứ em tìm trên mạng nói mong lung với không đúng phần em cần nên em ko biết viết như thế nào mong anh giúp em phần này anh ơi!

em vẫn chưa hiểu là dùng ram để chứa font thôi hay là còn làm việc gì khác nữa không anh?

còn dịch 64 cột hoặc hơn thì mình làm cho hien_thi như thế nào lớn hơn 96 vậy anh?

mong anh giải thích em biết ạk!!!!!
thanks anh !!!!!!!!!

tanbka
17-05-2011, 11:56 PM
Mình Không hiểu các bạn dùng nhiều RAM như thế để làm gì, có phải ghi thông tin hiển thị k?
Theo mình thì thông tin hiển thị mình ít khi thay đổi, nên ghi vào enhanced Flash, bộ nhớ thoải mái.
Còn RAM chỉ làm bộ đệm hiển thị ma trận thôi, bảng matrix của mình có bao nhiêu cột thì dùng mảng có độ dài bấy nhiêu, và một số ít biến chương trình nữa, chắc chắn đủ.
Đó là phương pháp mình đã làm, tương đối đơn giản, không phải kết nối thêm ROM, RAM gì hết ấy (à ghi chú mình chưa làm bảng nào to như ở ngân hàng hihi...).
Bạn nào đồng ý với mình, thanks cái còn bit hihhi...

friend_1990
18-05-2011, 12:26 AM
Mình Không hiểu các bạn dùng nhiều RAM như thế để làm gì, có phải ghi thông tin hiển thị k?
Theo mình thì thông tin hiển thị mình ít khi thay đổi, nên ghi vào enhanced Flash, bộ nhớ thoải mái.
Còn RAM chỉ làm bộ đệm hiển thị ma trận thôi, bảng matrix của mình có bao nhiêu cột thì dùng mảng có độ dài bấy nhiêu, và một số ít biến chương trình nữa, chắc chắn đủ.
Đó là phương pháp mình đã làm, tương đối đơn giản, không phải kết nối thêm ROM, RAM gì hết ấy (à ghi chú mình chưa làm bảng nào to như ở ngân hàng hihi...).
Bạn nào đồng ý với mình, thanks cái còn bit hihhi...



ở đây mình làm khoảng 16 con led matrix dùng để hiển thị nhiệt độ giờ phút giây ngày tháng năm mình nghĩ dung lượng ram ko đủ tai mình đang làm hiển thị nhiệt độ không thôi chiếm dung lượng ram 50% rồi và còn nhiều cái khác mình vẫn chưa hoàn thành nên mình nghĩ sẽ không đủ

bạn đã từng làm quang báo vậy thì có kinh nghiệm chỉ mình dc chứ ?
bạn có làm hiển thị ngày giờ không dùng pic 16f ấy nếu có chia sẻ mình với mọi người cùng tham khảo,dc chứ ?

thanks ban nhiều!!!!!!!!!!!!!

tanbka
18-05-2011, 10:29 AM
Oh bạn ko hiểu ý mình rồi, ý mình là ko cần thiết phải dùng RAM ngoài. Ý tưởng về chương trình thì mình đã viết phía trên rồi mà.

friend_1990
18-05-2011, 10:48 AM
Oh bạn ko hiểu ý mình rồi, ý mình là ko cần thiết phải dùng RAM ngoài. Ý tưởng về chương trình thì mình đã viết phía trên rồi mà.



cám ơn thái đã góp ý kiến cho mình!!!!!!!!!!!!
thái có thể nói cụ thể hơn về ds 1307 dc ko?mình vẫn chưa rõ về con này lắm mong thái chỉ mình và mọi người cùng tham khảo
thanks thái nha!!!!!!!!!!

friend_1990
18-05-2011, 09:47 PM
theo anh đề tài của em yêu cầu cập nhập nhiệt độ và hiển thị thời gian thực
thì dữ liệu đưa ra bảng matrix cũng khá nhiều.em nên dùng ram ngoài(đây chỉ là ý kiến của anh thôi nhé)
anh cũng làm matrix chán rồi tìm đủ mọi cách tận dụng hết tài nguyên của pic
nhưng tốc độ đọc ghi của Flash,eeprom mất nhiều time quá.


chỉ em cách viết ram ngoài đi anh Minh ơi hic em đọc mãi vẫn không viết dc?
với ram ngoài chủ yếu mình làm gì anh dùng luu7 font chữ thôi hả anh?
mong anh giúp em.......................
thanks anh Minh nhiều !!!!!!!!!!!!!!!!!!!

tdm
18-05-2011, 11:24 PM
chỉ em cách viết ram ngoài đi anh Minh ơi hic em đọc mãi vẫn không viết dc?
với ram ngoài chủ yếu mình làm gì anh dùng luu7 font chữ thôi hả anh?
mong anh giúp em.......................
thanks anh Minh nhiều !!!!!!!!!!!!!!!!!!!
bài viết cũng đã nhiều anh nghĩ em lên trọn cho mình một thiết kế tối ưu nhất sau khi tham khảo ý kiến mọi người trên diễn đàn.sau đó tập chung viết code cho nó từng phần một.
hiện tại em đã có phần cứng chưa.
em đã có thể viết được những gì rồi.
vài lời góp ý cho em kẻo tẩu hỏa nhập ma.

friend_1990
18-05-2011, 11:55 PM
bài viết cũng đã nhiều anh nghĩ em lên trọn cho mình một thiết kế tối ưu nhất sau khi tham khảo ý kiến mọi người trên diễn đàn.sau đó tập chung viết code cho nó từng phần một.
hiện tại em đã có phần cứng chưa.
em đã có thể viết được những gì rồi.
vài lời góp ý cho em kẻo tẩu hỏa nhập ma.


theo hướng dẫn anh thì em đã làm được hiển thị nhiệt độ và phần cứng rồi

cụ thể em sẽ trao đổi với anh qua mail nha anh cả phần cứng code!!!!!!!!!!

thanks anh Minh nhiều lắm ạk!!!!!!!!

tanbka
20-05-2011, 10:10 AM
Oh sao đang ma trận lại chuyển sang DS1307 vậy. đang có luồng về con này thì phải. Con này xem datasheet của nó đủ mà, phần mềm thì trên mạng có rồi, mình cũng down về, chỉnh sửa 1 chút, chạy ngon lành đó.

friend_1990
20-05-2011, 11:32 AM
Oh sao đang ma trận lại chuyển sang DS1307 vậy. đang có luồng về con này thì phải. Con này xem datasheet của nó đủ mà, phần mềm thì trên mạng có rồi, mình cũng down về, chỉnh sửa 1 chút, chạy ngon lành đó.


đọc để hiểu là 1 vấn đề áp dụng cái hiểu đó để viết chương trình lại là khác do kỹ năng lập trình mình rất yếu học vxl chỉ có 45 tiết lý thuyết trên lớp nên để viết và lập trình cho 1 con gì ddoi6169 với mình thì là cả 1 vấn đề cậu nên viết 1 chương trình ngắn làm vd chứ nói khơi khơi như vậy thì rất khó cho mọi người có thể hình dung dc đặt biệt là những người mới chập chững lập trình như mình đây
thanks thái đã góp ý kiến cho mình!!!!!!!!!!!!

tanbka
22-05-2011, 01:28 AM
Bác mình bảo đã có luồng nói về cái này rùi mà, mới đây nhất bác tdm cũng đã up cả code lên rồi đó, bạn chỉ cần down về là xong mà.

friend_1990
30-05-2011, 06:13 PM
Bác mình bảo đã có luồng nói về cái này rùi mà, mới đây nhất bác tdm cũng đã up cả code lên rồi đó, bạn chỉ cần down về là xong mà.

cám ơn bác đã cho ý kiến giờ tui đã làm chạy giờ phút giây nhưng khi chay thực tế thì không đúng không hiểu sao nữa nếu ai đã làm xin cho ý kiến với


mình dung ds1307 giao tiep i2c với pic 16f877a mong dc sự chỉ giáo từ các bạn!!!!!!!!!

tritamkute123
24-01-2013, 05:34 PM
anh co chương trinh chay chu a tren led matrix dung pic 16f877a k cho e xin dia chi mail em la tritamvip@gmail.com