Mình có cái GLCD và muốn hiển thị khuôn mặt của mình lên đó
* tuy nhiên lên diễn đàn thì thấy cũng nhiều người hỏi quá do đó tự mày mò cách làm và có kết quả
* hôm nay chia sẽ cho anh em nào có sở thích giống mình ^^
( hình lưu vào flash memory của MCU )
Đồ nghề :
Phần mềm : Paint, MSword, CCS, RTB ( của Bui Viet Hoang - bvhoang )
[link đây] http://www.dientuvietnam.net/forums/...-va-lcd-30025/
Phần cứng : máy chụp hình, kitPIC
Bước 1: chụp hình -> chép vào PC -> insert vào MSword -> cắt khung hình nhỏ lại (128x64)
chọn Picture -> chọn grayscale -> chỉnh Contract và Brightness cho vừa ý...( đừng tắt )
-> copy hình vào paint -> save as "Monochrome Bitmap" -> nếu chưa vừa ý vào MSWord chỉnh lại
(nếu có Photoshop - Filter -> Filter Gallery -> Sketch -> Stamp); thêm Text vào
*Cắt hình (128x64) thành 4 mảnh - mỗi mảnh (32x64)
Bước 2:
Dùng chương trình RTB (link ở trên) chuyển mỗi ảnh nhỏ thành 4 mảng (mổi mảng 256 phần tử)
-Copy mã sinh từ RTB vào CCS - đặt tên - khai báo cho mỗi mảng
( nếu ko cắt hình thành 4 mảnh thì cắt mảng thành 4 mảng )
CONST byte BITMAP_0[32][8]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
...};
CONST byte BITMAP_1[32][8]={...};
CONST byte BITMAP_2[32][8]={...);
CONST byte BITMAP_3[32][8]={...);
Bước 3 :coding trên CCS
Code này lấy giá trị từng bit của mảng để hiển thị lên GLCD
#include <16F887.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.C>
INT8 I,J;
INT8 BIT;
INT8 SEG;
INT8 ROW;
INT8 COLUMM;
INT8 BITMAP;
INT1 COLOR;
// Khai báo 4 mảng chổ này
void main() {
Glcd_init(ON);
COLUMM=0;
BITMAP=0;
// Code hiển thị
FOR (I=0;I<=31;I++){
FOR(J=0;J<=7;J++){
IF (BITMAP==0) SEG = BITMAP_0[I][J];
IF (BITMAP==1) SEG = BITMAP_1[I][J];
IF (BITMAP==2) SEG = BITMAP_2[I][J];
IF (BITMAP==3) SEG = BITMAP_3[I][J];
FOR (BIT=0;BIT<=7;BIT++)
{IF (SEG>=0X80) COLOR=1;
ELSE COLOR=0;
ROW= (J*8)+BIT;
GLCD_PIXEL(COLUMM, ROW ,COLOR);
SEG=SEG<<1;
}};
COLUMM++;};
BITMAP++;
IF (BITMAP==4) GOTO EXIT; ) // <- HIỂN THỊ XONG - LÀM VIỆC KHÁC
* tuy nhiên lên diễn đàn thì thấy cũng nhiều người hỏi quá do đó tự mày mò cách làm và có kết quả
* hôm nay chia sẽ cho anh em nào có sở thích giống mình ^^
( hình lưu vào flash memory của MCU )
Đồ nghề :
Phần mềm : Paint, MSword, CCS, RTB ( của Bui Viet Hoang - bvhoang )
[link đây] http://www.dientuvietnam.net/forums/...-va-lcd-30025/
Phần cứng : máy chụp hình, kitPIC
Bước 1: chụp hình -> chép vào PC -> insert vào MSword -> cắt khung hình nhỏ lại (128x64)
chọn Picture -> chọn grayscale -> chỉnh Contract và Brightness cho vừa ý...( đừng tắt )
-> copy hình vào paint -> save as "Monochrome Bitmap" -> nếu chưa vừa ý vào MSWord chỉnh lại
(nếu có Photoshop - Filter -> Filter Gallery -> Sketch -> Stamp); thêm Text vào
*Cắt hình (128x64) thành 4 mảnh - mỗi mảnh (32x64)
Bước 2:
Dùng chương trình RTB (link ở trên) chuyển mỗi ảnh nhỏ thành 4 mảng (mổi mảng 256 phần tử)
-Copy mã sinh từ RTB vào CCS - đặt tên - khai báo cho mỗi mảng
( nếu ko cắt hình thành 4 mảnh thì cắt mảng thành 4 mảng )
CONST byte BITMAP_0[32][8]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
...};
CONST byte BITMAP_1[32][8]={...};
CONST byte BITMAP_2[32][8]={...);
CONST byte BITMAP_3[32][8]={...);
Bước 3 :coding trên CCS
Code này lấy giá trị từng bit của mảng để hiển thị lên GLCD
#include <16F887.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <HDM64GS12.C>
INT8 I,J;
INT8 BIT;
INT8 SEG;
INT8 ROW;
INT8 COLUMM;
INT8 BITMAP;
INT1 COLOR;
// Khai báo 4 mảng chổ này
void main() {
Glcd_init(ON);
COLUMM=0;
BITMAP=0;
// Code hiển thị
FOR (I=0;I<=31;I++){
FOR(J=0;J<=7;J++){
IF (BITMAP==0) SEG = BITMAP_0[I][J];
IF (BITMAP==1) SEG = BITMAP_1[I][J];
IF (BITMAP==2) SEG = BITMAP_2[I][J];
IF (BITMAP==3) SEG = BITMAP_3[I][J];
FOR (BIT=0;BIT<=7;BIT++)
{IF (SEG>=0X80) COLOR=1;
ELSE COLOR=0;
ROW= (J*8)+BIT;
GLCD_PIXEL(COLUMM, ROW ,COLOR);
SEG=SEG<<1;
}};
COLUMM++;};
BITMAP++;
IF (BITMAP==4) GOTO EXIT; ) // <- HIỂN THỊ XONG - LÀM VIỆC KHÁC
Comment