PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 14-01-2009, 07:15 AM   #31
longtu
Đệ tử 6 túi
 
longtu's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Send a message via Yahoo to longtu
Trích:
Nguyên văn bởi nguyennam8888 View Post
anh , em không hiểu mấy,buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT] là sao, nó có tác dụng gí
pt=&buff_mh[0][0];
j=(y/6*BITMAP_WIDTH_BIT+x);
em cũng không hiểu
mong anh chỉ em cụ thể với , em mới bắt đầu thôi mà
buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT] :mình coi ma trận led là màn hình Leds, thì đây chính là bộ đệm màn hình Leds(buffer_manhinh) đó, khi mình thay đổi dữ liệu trên bộ đệm này tức là mình đã thay đổi sự hiện thị trên màn hình Leds. Ban tìm hiểu thêm về mảng trong C nhé.

pt=&buff_mh[0][0];//Đây là cách lấy điạ chỉ cho con trỏ. Bạn tìm hiểu thêm về con trỏ trong C nhé.

Thân,
__________________
--------------------------------------------------------------------------------------
Phùng Minh Tuân
Email: tuan.phmt@gmail.com
"Cuộc đời sóng gió nuôi ta lớn
Bao lần thất bại dạy ta khôn".
longtu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2009, 09:32 AM   #32
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
lmd

[QUOTE=nguyennam8888;22125]
Trích:
Nguyên văn bởi tungtot_vl View Post

nếu như vậy là dich cả byte chứ, 4 lệnh trên em chưa biết cách sử dụng nó , trong tài liệu CCS tiếng việt cũng không nói nhiều về nó ,Bác chỉ cụ thể cho em đươc không
khi thục hiện lệnh thì nó dịch một bit.
tùy theo chuơng trình của bạn như thế nào mà bạn sử dụng nó cho thích hợp
shift_right(mang,so byte,1 hoặc 0); dich các bit trong mãng sang phải 1 bit sau đó chèn vào giá trị đầu tiên là 1 hoặc 0
shift_left(mang,so byte,1 hoặc 0)
rotate_right(mang,so byte); xoay phải các bit trong mang
rotate_left(mang,so byte);
ví dụ:
mang[2] có các bit là: 0b11110000,0b00001111;
shift_left(mang,2,1); ==>khi đó các bit trong mang là: 0b11100000,0b00011111;
shift_left(mang,2,0); ==>khi đó các bit trong mang là: 0b11100000,0b00011110;
rotate_left(mang,2);==>khi đó các bit trong mang là: 0b11100000,0b00011111;
rotate_right(mang,2);==>khi đó các bit trong mang là: 0b11111000,0b00000111;
các hàm này khi ứng dụng cho dịch trái hay phải thì còn tùy thuộc vào code bạn viết nhé
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2009, 10:08 AM   #33
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
[QUOTE=tungtot_vl;22143]
Trích:
Nguyên văn bởi nguyennam8888 View Post

khi thục hiện lệnh thì nó dịch một bit.
tùy theo chuơng trình của bạn như thế nào mà bạn sử dụng nó cho thích hợp
shift_right(mang,so byte,1 hoặc 0); dich các bit trong mãng sang phải 1 bit sau đó chèn vào giá trị đầu tiên là 1 hoặc 0
shift_left(mang,so byte,1 hoặc 0)
rotate_right(mang,so byte); xoay phải các bit trong mang
rotate_left(mang,so byte);
ví dụ:
mang[2] có các bit là: 0b11110000,0b00001111;
shift_left(mang,2,1); ==>khi đó các bit trong mang là: 0b11100000,0b00011111;
shift_left(mang,2,0); ==>khi đó các bit trong mang là: 0b11100000,0b00011110;
rotate_left(mang,2);==>khi đó các bit trong mang là: 0b11100000,0b00011111;
rotate_right(mang,2);==>khi đó các bit trong mang là: 0b11111000,0b00000111;
các hàm này khi ứng dụng cho dịch trái hay phải thì còn tùy thuộc vào code bạn viết nhé
bây giở giả sừ em có một mảng gồm 4 byte :K[4]= {0b11010101,0b01011011,0b01111000,0b11100011};
em muốn dich phai byte thứ 4 trong mảng với bít đầu tiên của byte thứ 3 trong mảng thì phải làm như thế nào
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2009, 11:13 AM   #34
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
lmd

[QUOTE=nguyennam8888;22145]
Trích:
Nguyên văn bởi tungtot_vl View Post
bây giở giả sừ em có một mảng gồm 4 byte :K[4]= {0b11010101,0b01011011,0b01111000,0b11100011};
em muốn dich phai byte thứ 4 trong mảng với bít đầu tiên của byte thứ 3 trong mảng thì phải làm như thế nào
cái này thì không thực hiện được rồi. vì hàm trên chỉ thực hiện cho số byte là hằng số và bắt đầu từ vị trí byte đầu tiên trong mãng. do đó không thể dịch riêng cho byte số 4 được mà phải dịch cho toàn bộ mãng hoặc dịch các byte đầu tiên trong mãng thì được.
do đó bạn muốn dùng các hàm này để dịch chữ cho LMD thì tốt nhất bạn nên chia mãng hiển thị chữ của bạn ra làm nhiều mãng nhỏ rồi dịch các mãng nhỏ đó
vì bạn dùng 595 để gửi data do đó mỗi data ra 595 là một byte nằm ngang của màn hình hiển thị. nên khi bạn dich byte này sang phải hay sang trái thì màn hình hiển thị sẽ dịch 1 hàng.
nếu bạn dùng LMD 8 hàng thì nên chi làm 8 mãng, mỗi mãng là 1 hàng. do đó dịch mãng 1 sang 1 bước thì các điểm ảnh của màn hình hàng 1 cũng dịch sang 1 bước. do đó khi bạn dịch cả 8 mãng sang một bước thì toàn bộ màn hình cũng dịch sang 1 bước. làm như thế thì bạn đã dịch chữ được sang một bước rồi đó hi hi. cứ như thế lập lại cho đến hết màn hình là được. đơn giản mà phải không
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2009, 12:22 PM   #35
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
em hiểu rồi, nhưng nếu với nhiều hàng thì em có thể đổi mảng data từ mảng một chiều sang mảng hai chiều cũng được phải không, như thế có ổn không anh
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2009, 05:28 PM   #36
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
toàn bộ font tôi điều dùng mãng 1 chiều cả
ví dụ chữ A chiếu 8 byte đầu tiên, chữ B chiếm 8 byte tiếp theo.. trong một mãng.
còn các màn hình hiển thị sẽ chia làm 8 mãng, mỗi mãng lá 1 hàng.
ta chỉ cần lấy data từ font lần lượt cho vào các mãng.
để lấy chữ A ta lấy: mang1[0] = font[0]; mang2[0] = font[1];.. mang8[0] = font[7]; như vậy ta đã lấy chữ A trong font ra để hiển thị trên màn hình và khi đó dùng các lệnh dịch trên để dịch các mãng 1-8 thì chữ A sẽ dịch qua. Do đó trong mãng font bạn có thể chứa bao nhiêu ký tự đã mã hóa sẳn vẫn được, chỉ cần dùng ký tự nào là ta tìm đến vị trí của ký tự đó để lấy nó ra.

thay đổi nội dung bởi: tungtot_vl, 14-01-2009 lúc 05:29 PM. Lý do: sai
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2009, 11:20 PM   #37
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
Trích:
Nguyên văn bởi tungtot_vl View Post
toàn bộ font tôi điều dùng mãng 1 chiều cả
ví dụ chữ A chiếu 8 byte đầu tiên, chữ B chiếm 8 byte tiếp theo.. trong một mãng.
còn các màn hình hiển thị sẽ chia làm 8 mãng, mỗi mãng lá 1 hàng.
ta chỉ cần lấy data từ font lần lượt cho vào các mãng.
để lấy chữ A ta lấy: mang1[0] = font[0]; mang2[0] = font[1];.. mang8[0] = font[7]; như vậy ta đã lấy chữ A trong font ra để hiển thị trên màn hình và khi đó dùng các lệnh dịch trên để dịch các mãng 1-8 thì chữ A sẽ dịch qua. Do đó trong mãng font bạn có thể chứa bao nhiêu ký tự đã mã hóa sẳn vẫn được, chỉ cần dùng ký tự nào là ta tìm đến vị trí của ký tự đó để lấy nó ra.
rotate_left(mang1[0], 1);
sao nó lại báo lỗi hả anh, báo ở chỗ số 1 ấy
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2009, 11:22 PM   #38
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
Trích:
Nguyên văn bởi longtu View Post
buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT] :mình coi ma trận led là màn hình Leds, thì đây chính là bộ đệm màn hình Leds(buffer_manhinh) đó, khi mình thay đổi dữ liệu trên bộ đệm này tức là mình đã thay đổi sự hiện thị trên màn hình Leds. Ban tìm hiểu thêm về mảng trong C nhé.

pt=&buff_mh[0][0];//Đây là cách lấy điạ chỉ cho con trỏ. Bạn tìm hiểu thêm về con trỏ trong C nhé.

Thân,
j=(y/6*BITMAP_WIDTH_BIT+x);cái hàng này em không hiểu
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-01-2009, 02:12 AM   #39
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
bác lại giúp em nha, chương trình em viết giống gợi ý mà vẫn không ổn
File Kèm Theo
File Type: rar ledmatrix.rar (19.0 KB, 50 lần tải)
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-01-2009, 07:41 AM   #40
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
lmd

Trích:
Nguyên văn bởi nguyennam8888 View Post
rotate_left(mang1[0], 1);
sao nó lại báo lỗi hả anh, báo ở chỗ số 1 ấy
nên viết là: rotate_left(mang1, 1);
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-01-2009, 12:27 PM   #41
longtu
Đệ tử 6 túi
 
longtu's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Send a message via Yahoo to longtu
Trích:
Nguyên văn bởi nguyennam8888 View Post
j=(y/6*BITMAP_WIDTH_BIT+x);cái hàng này em không hiểu
Tôi giả xử bạn có màn hình led là 16x16, khii đó bạn khai báo Buff_mh như sau:
#define BITMAP_HEIGHT_BYTE] 2
#define BITMAP_WIDTH_BIT 16
unsigned char buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT]
...
Bây giờ giả xử bạn chọn tọa độ (0,0) là điểm led tại góc trái-phía duoi màn hình led. Bây giờ bạn muốn điểm có tọa độ là (0,0) sáng lên, ban chỉ cần goi hàm point(0,0);

void point(int8 x,int8 y)
{
unsigned char *pt;
int8 mask=0b00000001;
int16 j;
mask = mask << (y%8);//xác định vi tri y:
pt=&buff_mh[0][0];
j=(y/8*BITMAP_WIDTH_BIT+x);//xác dinh vi tri x
pt+=j;
*pt|= mask;
}

Xin loi các bạn, doan code nay hom truoc mình viet nhầm hàng này:
j=(y/8*BITMAP_WIDTH_BIT+x);//chia cho 8 chứ khong phai chia 6

Thân,
__________________
--------------------------------------------------------------------------------------
Phùng Minh Tuân
Email: tuan.phmt@gmail.com
"Cuộc đời sóng gió nuôi ta lớn
Bao lần thất bại dạy ta khôn".
longtu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-01-2009, 04:48 PM   #42
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
Trích:
Nguyên văn bởi tungtot_vl View Post
toàn bộ font tôi điều dùng mãng 1 chiều cả
ví dụ chữ A chiếu 8 byte đầu tiên, chữ B chiếm 8 byte tiếp theo.. trong một mãng.
còn các màn hình hiển thị sẽ chia làm 8 mãng, mỗi mãng lá 1 hàng.
ta chỉ cần lấy data từ font lần lượt cho vào các mãng.
để lấy chữ A ta lấy: mang1[0] = font[0]; mang2[0] = font[1];.. mang8[0] = font[7]; như vậy ta đã lấy chữ A trong font ra để hiển thị trên màn hình và khi đó dùng các lệnh dịch trên để dịch các mãng 1-8 thì chữ A sẽ dịch qua. Do đó trong mãng font bạn có thể chứa bao nhiêu ký tự đã mã hóa sẳn vẫn được, chỉ cần dùng ký tự nào là ta tìm đến vị trí của ký tự đó để lấy nó ra.
bác có thể viết mẫu cho em được không, phần cứng mô phỏng trong Protus em gửi ở trên ấy, cảm ơn bác
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-01-2009, 06:22 PM   #43
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
lmd

Trích:
Nguyên văn bởi nguyennam8888 View Post
bác có thể viết mẫu cho em được không, phần cứng mô phỏng trong Protus em gửi ở trên ấy, cảm ơn bác
lần này tôi phá giới nhé. lần sau chắc ko rảnh đâu
chúc vui!
File Kèm Theo
File Type: rar ledmatrix.rar (50.4 KB, 211 lần tải)
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-01-2009, 11:00 PM   #44
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
Trích:
Nguyên văn bởi tungtot_vl View Post
lần này tôi phá giới nhé. lần sau chắc ko rảnh đâu
chúc vui!
bác cho em font.c luôn nha, font chữ của bac đẹp quá
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-01-2009, 08:21 AM   #45
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
lmd

Trích:
Nguyên văn bởi nguyennam8888 View Post
bác cho em font.c luôn nha, font chữ của bac đẹp quá
bac nay duoc voi dòi tiên nhi. tôi chi có font 16 bác lấy về loc ra font 8 nhé.
font này mã hóa ngươc với font trong bài tôi làm cho bác. bác muốn dùng được nó thì có 2 cách:
1: đổi font ngược lại
2: đổi hàm display() ở các hàm output_hight(data); thành output_low(data); và output_low(data); thành output_hight(data);. còn trong hàm rotate thì đổi số 0 thành số 1
File Kèm Theo
File Type: rar font7.rar (2.1 KB, 92 lần tải)
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 09:06 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam