Làm quen với PIC
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
:
|
Trích:
Nguyên văn bởi sontvak42
Em có thảm khảo bài viết đó rồi nhưng thực sự viết bằng ngôn ngữ đó em đọc khó hiểu quá, em chỉ chưa biết cách làm thế nào để LCD3310 có thể hiển thị được hình ảnh thôi. Mong mọi người giúp đỡ!
|
Các bước để điều khiển lcd3310 này đều có trong code mình đã gửi lên , có lẽ bạn đọc không kĩ .
Đầu tiên của chương trình , ta phải set lcd , bằng các dòng sau đây :
Code:
LOW DC ' TRUYEN LENH LCD 3310
LcdData= $21: GOSUB LCD_ByteOut ' CODE %00100001 -> PD=0:CHIP ACTIVE ; V=0:HORIZONTAL ; H=1:LENH LCD MO RONG
LcdData= $C8: GOSUB LCD_ByteOut ' CODE %11001000 SET LCD Vop (CONTRAST)
LcdData= $06: GOSUB LCD_ByteOut ' CODE %00000110 SET TEMP COEFFICENT = 2
LcdData= $13: GOSUB LCD_ByteOut ' CODE %00010011 LCD BIAS MODE
LcdData= $20: GOSUB LCD_ByteOut ' CODE %00100000 -> PD=0:CHIP ACTIVE ; V=0:HORIZONTAL ; H=0:LENH LCD CO BAN
LcdData= $0c: GOSUB LCD_ByteOut ' CODE %00001100 LCD IN NORMAL MODE - NEN TRANG CHU DEN .
chương trình con LCD_ByteOut là như thế này :
Ta truyền dữ liệu chứa trong biến LcdData ra màn hình .
2 chân DTA và CLK là 2 chân giao tiếp với lcd . Bạn chú ý lúc này chân DC = 0 tức là ta đang truyền lệnh nhé .
Code:
LCD_ByteOut:
SHIFTOUT DTA,CLK,1,[LcdData]
RETURN
Sau bước setup này rồi thì ta có thể truyền dữ liệu ra lcd . Cụ thể trong chương trình , bạn thấy mình gọi chương trình " XOA_GLCD" . Xoá lcd ở đây mình làm là truyền dữ liệu $00 cho từng cột - từng hàng của lcd .
chương trình con như sau : chân DC được kéo lên mức 1 tức là truyền dữ liệu .
Code:
XOA_GLCD :
PosX=0:PosY=0:GOSUB LCD_GotoXY ' DEN VI TRI HANG = 0 - COT BANG 0
HIGH DC ' TRUYEN DU LIEU
FOR Chr=1 TO 252
LcdData=0:GOSUB LCD_ByteOut
LcdData=0:GOSUB LCD_ByteOut
NEXT Chr
RETURN
Trong chương trình con phía trên , bạn thấy có dòng gọi chương trình " LCD_GotoXY" . Đây là đoạn code để đến địa chỉ trên màn hình ta cần truyền dữ liệu , cụ thể ở đây địa chỉ được chứa trong 2 biến PosX , PosY . 2 biến này ta đang gán giá trị = 0 >> bắt đầu truyền dữ liệu tại địa chỉ 0:0 .
code cho chương trình LCD_GotoXY như sau :
DC = 0 là để truyền lệnh .
PosY được "or" với %01000000 , truyền lệnh ra lcd
PosX được "or" với %10000000 , truyền lệnh ra lcd
tại sao y cần "or" với %01000000 và x cần "or" %10000000 thì bạn xem lại datasheet của lcd nhé .
Code:
LCD_GotoXY:
LOW DC
LcdData=%01000000 | PosY :GOSUB LCD_ByteOut
LcdData=%10000000 | PosX :GOSUB LCD_ByteOut
RETURN
Cũng tương tự như chương trình xoá lcd , nhưng mở rộng hơn về dữ liệu , ta có chương trình hiển thị khung màn hình như sau :
+Sau khi vẽ xong màn hình bằng chương trình fastLCD , dịch ra ta sẽ được 1 tập các giá trị .
+Ta dùng 1 vòng lặp for để lấy từng giá trị và cho hiển thị ra lcd . Câu lệnh LOOKUP2 I là để lấy giá trị theo vị trí I . Vì I là biến chạy từ 0 cho đến 504 cho nên ta sẽ lấy được tuần tự các giá trị có trong tập để hiển trị ra lcd .
Code:
MAIN_CLOCK_TEMP_SCREEN :
PosX=0:PosY=0:GOSUB LCD_GotoXY ' DEN VI TRI HANG - COT BANG
FOR I = 0 TO 504 ' VE MAN HINH
LOOKUP2 I,[$FF,_$0F,_$47,_$43,_$C1,_$41,_$41,_$01,_$C1,_$01,_$01,_$01,_$C1,_$01,_$A1,_$51,_
$51,_$51,_$A1,_$09,_$C5,_$03,_$01,_$01,_$C1,_$01,_$C1,_$21,_$11,_$11,_$11,_$21,_
$41,_$41,_$21,_$11,_$11,_$11,_$21,_$C1,_$01,_$C1,_$01,_$03,_$05,_$C9,_$01,_$89,_
$51,_$51,_$51,_$89,_$01,_$C1,_$01,_$01,_$01,_$C1,_$01,_$81,_$41,_$41,_$41,_$81,_
$01,_$01,_$01,_$01,_$01,_$01,_$39,_$6D,_$45,_$45,_$45,_$45,_$45,_$45,_$45,_$45,_
$7D,_$03,_$07,_$FF,_$FF,_$00,_$00,_$00,_$1F,_$80,_$80,_$80,_$8F,_$90,_$90,_$90,_
$8F,_$80,_$9F,_$82,_$82,_$82,_$9F,_$80,_$9F,_$81,_$82,_$04,_$1F,_$00,_$01,_$02,_
$04,_$08,_$10,_$20,_$40,_$40,_$60,_$70,_$38,_$1C,_$0E,_$07,_$00,_$1F,_$02,_$02,_
$02,_$1F,_$00,_$1F,_$02,_$02,_$02,_$1F,_$00,_$1F,_$01,_$02,_$04,_$1F,_$00,_$0F,_
$10,_$12,_$12,_$1E,_$00,_$F8,_$88,_$F8,_$00,_$F8,_$88,_$F8,_$00,_$FC,_$02,_$01,_
$01,_$01,_$02,_$FC,_$20,_$20,_$00,_$FF,_$FF,_$00,_$FC,_$02,_$01,_$F8,_$F8,_$18,_
$18,_$18,_$F8,_$F8,_$00,_$00,_$F8,_$F8,_$18,_$18,_$18,_$F8,_$F8,_$00,_$00,_$61,_
$62,_$02,_$02,_$FA,_$FA,_$1A,_$1A,_$1A,_$FA,_$FA,_$02,_$02,_$FA,_$FA,_$1A,_$1A,_
$1A,_$FA,_$FA,_$02,_$02,_$62,_$62,_$02,_$02,_$C2,_$C2,_$C2,_$C2,_$C2,_$02,_$02,_
$C2,_$C2,_$C2,_$C2,_$C2,_$02,_$04,_$F8,_$00,_$E4,_$24,_$E4,_$04,_$E4,_$24,_$E4,_
$04,_$FF,_$00,_$00,_$00,_$00,_$00,_$FF,_$80,_$80,_$00,_$FF,_$FF,_$00,_$1F,_$20,_
$40,_$9F,_$9F,_$98,_$98,_$98,_$9F,_$9F,_$80,_$80,_$9F,_$9F,_$98,_$98,_$98,_$9F,_
$9F,_$80,_$80,_$86,_$86,_$80,_$80,_$9F,_$9F,_$98,_$98,_$98,_$9F,_$9F,_$80,_$80,_
$9F,_$9F,_$98,_$98,_$98,_$9F,_$9F,_$80,_$80,_$86,_$86,_$80,_$80,_$9F,_$9F,_$98,_
$9F,_$9F,_$80,_$80,_$9F,_$9F,_$98,_$9F,_$9F,_$80,_$40,_$3F,_$00,_$13,_$12,_$13,_
$10,_$13,_$12,_$13,_$10,_$FF,_$00,_$00,_$00,_$00,_$00,_$FF,_$00,_$00,_$00,_$FF,_
$FF,_$00,_$00,_$00,_$FF,_$00,_$00,_$00,_$FC,_$FC,_$0C,_$0C,_$0C,_$0C,_$FC,_$FC,_
$00,_$00,_$FC,_$FC,_$0C,_$0C,_$0C,_$0C,_$FC,_$FC,_$00,_$00,_$00,_$00,_$00,_$00,_
$00,_$FC,_$FC,_$0C,_$0C,_$0C,_$0C,_$FC,_$FC,_$00,_$00,_$00,_$30,_$48,_$48,_$30,_
$00,_$00,_$F0,_$F8,_$1C,_$0C,_$0C,_$0C,_$1C,_$18,_$00,_$00,_$00,_$FF,_$FF,_$00,_
$00,_$5F,_$51,_$5F,_$40,_$5F,_$51,_$5F,_$C0,_$7F,_$80,_$80,_$80,_$80,_$80,_$7F,_
$82,_$02,_$00,_$FF,_$FF,_$F0,_$E0,_$C0,_$9F,_$A0,_$C0,_$80,_$9F,_$9F,_$98,_$98,_
$98,_$98,_$9F,_$9F,_$80,_$80,_$9F,_$9F,_$98,_$98,_$98,_$98,_$9F,_$9F,_$80,_$80,_
$9C,_$9C,_$9C,_$80,_$80,_$9F,_$9F,_$98,_$98,_$98,_$98,_$9F,_$9F,_$80,_$80,_$80,_
$80,_$80,_$80,_$80,_$80,_$80,_$87,_$8F,_$9C,_$98,_$98,_$98,_$9C,_$8C,_$80,_$C0,_
$E0,_$BF,_$9F,_$80,_$80,_$80,_$80,_$80,_$80,_$80,_$80,_$8F,_$90,_$A7,_$AF,_$AF,_
$AF,_$AF,_$AF,_$A7,_$D0,_$EF,_$F0,_$FF],LCDDATA :
HIGH DC : GOSUB LCD_ByteOut
NEXT I
RETURN
Những chương trình con trên đều có trong file mình gửi , bạn xem kĩ lại có gì không hiểu thì mình giải thích thêm nhé .
thay đổi nội dung bởi: hatuan296, 25-07-2012 lúc 11:09 PM.
|