ตัวอย่างใน วีโอ ใช้ col scan จะเห็นได้ว่าข้อมูล ในแต่ละ col
จะถูกส่งออกที่ละอัน โดยข้อมูลเป็นของ col segment ไหน
ก็ on col segment นั้น ถ้าเราหน่วงเวลาช้าๆ ก็จะเห้นเป็นแค่ไฟวิ่งแค่นั้น
แต่ถ้าลองเร็วๆซัก 5ms ก็จะเห็นเป็นตัวอักษรแล้ว...
วีโอเป็น HD นะครับขยายได้ถ้ามองไม่ชัด
;//****************************
;//* Source Code For AT89c2051
;//****************************
shift_dat bit p1.0
shift_clk bit p1.1
col_lat bit p1.2
row_lat bit p1.3
;data segment
dseg at 020h
col_dat: ds 1
row_dat: ds 1
dl_a: ds 1
dl_b: ds 1
dl_c: ds 1
;//***** macro operator *****//;
set_col macro ___col_dat
mov a,#___col_dat
cpl a
acall col_shift_dat
endm
set_row macro ___row_dat
mov a,#___row_dat
acall row_shift_dat
endm
clr_col macro
acall col_clear_dat
endm
delay_ms macro ___d_1
mov dl_b,#___d_1
acall delay
endm
delay_x macro
delay_ms (5)
endm
;code segment
;//***** ap code start *****//;
cseg at 0000h
ajmp initial
cseg at 0050h
initial: mov p1,#0ffh
mov p3,#0ffh
mov sp,#050h
;clear internal ram
mov r0,#07fh
clr a
mov @r0,a
djnz r0,$-1
;shift initial logic
clr shift_clk
clr col_lat
clr row_lat
;//***** main program *****//;
main: set_row (0ffh) ; set row data col-1
set_col (00000001b) ; set col-1 on
delay_x ; delay 200ms
clr_col ; clear col data reduct blur
set_row (011h) ; set row data col-2
set_col (00000010b) ; set col-2 on
delay_x ; delay 200ms
clr_col ; clear col data reduct blur
set_row (011h) ; set row data col-3
set_col (00000100b) ; set col-3 on
delay_x ; delay 200ms
clr_col ; clear col data reduct blur
set_row (031h) ; set row data col-4
set_col (00001000b) ; set col-4 on
delay_x ; delay 200ms
clr_col ; clear col data reduct blur
set_row (051h) ; set row data col-5
set_col (00010000b) ; set col-5 on
delay_x ; delay 200ms
clr_col ; clear col data reduct blur
set_row (08eh) ; set row data col-6
set_col (00100000b) ; set col-6 on
delay_x ; delay 200ms
clr_col ; clear col data reduct blur
set_row (0h) ; set row data col-7
set_col (01000000b) ; set col-7 on
delay_x ; delay 200ms
clr_col ; clear col data reduct blur
set_row (0h) ; set row data col-8
set_col (10000000b) ; set col-8 on
delay_x ; delay 200ms
clr_col ; clear col data reduct blur
ajmp main
;//***** delay ms min=1ms max=255ms *****//;
delay: mov dl_a,#230
delay1: nop
djnz dl_a,delay1
djnz dl_b,delay
ret
;//***** col shift data *****//;
col_shift_dat: mov b,#8
col_shift_dat1: rlc a
mov shift_dat,c
setb shift_clk
nop
clr shift_clk
djnz b,col_shift_dat1
setb col_lat
nop
clr col_lat
ret
;//***** row shift data *****//;
row_shift_dat: mov b,#8
row_shift_dat1: rlc a
mov shift_dat,c
setb shift_clk
nop
clr shift_clk
djnz b,row_shift_dat1
setb row_lat
nop
clr row_lat
ret
col_clear_dat: mov b,#8
col_clear_dat1: setb shift_dat
setb shift_clk
nop
clr shift_clk
djnz b,col_clear_dat1
setb col_lat
nop
clr col_lat
ret
end
ผมใช้การสแกนแบบ col ครับ มันประหยัด ram ดี
เริ่มแรกต้องทำความเข้าใจว่า row & col คืออะไร รู้แล้วไม่เป็นไร
เอาคนที่ไม่รู้ row คือ แถวในแนวนอน col คือ แถวในแนวตั้ง
การสแกนแบบ row คือ
1.ส่ง data col register ก็คือ ข้อมูลทาง row นั่นเอง
2.สั่ง row segment on
3.หน่วงเวลา ประมาณ 5 ms
4.เลื่อนข้อมุล data col register กลับไปทำ ข้อ 1
วนจนครบ 8 ครั้ง ก็เป็น 8 แถวพอดี
การสแกนแบบ col คือ
1.ส่ง data row register ก็คือ ข้อมูลทาง col นั่นเอง
2.สั่ง col segment on
3.หน่วงเวลา ประมาณ 5 ms
4.เลื่อนข้อมุล data row register กลับไปทำ ข้อ 1
วนจนครบ 8 ครั้ง ก็เป็น 8 แถวพอดี
Open source Microcontroller Project เจอกันได้อีกหนึ่งช่องทางที่ mcu4fun.blogspot.com
ค้นหาบล็อกนี้
Custom Search
วันพฤหัสบดีที่ 17 มีนาคม พ.ศ. 2554
วันพุธที่ 9 มีนาคม พ.ศ. 2554
LED Dot Matrix Display V2
LED Dot Matrix Display V2
มาแล้วครับ V2 แก้ bug นิดหน่อยอาจมีเหลือบ้าง ด้วย memory ที่จำกัด
ผมใช้วิธี col-scan ครับ row-scan มันเปลือง mem ความสว่างสู่สีกัน
source ตัวนี้มี macro ใหม่ 2-3 ตัว
เช่น wr_bf เป็นคำสั่งเขียนข้อมูลไปยัง buffer แล้วแต่จะระบุเช่น
ds_buf1-4 เป็นตำแหน่ง display buffer เขียนอะไรออกไปก็เห็นเลย.....
cg_buf1-4 เป็นตำแหน่ง char buffer ไว้เก็บอักษรที่ต้องการแสดง.....
ส่วน PUT_STR_L เป็นคำสั่งใช้ เปิดตาราง เอามาแสดงผลพร้อมกับเลื่อน
ไปทางซ้ายเรือยๆจนกว่าจะเจอ byte ปิด 00h
Source Code v2.0
มาแล้วครับ V2 แก้ bug นิดหน่อยอาจมีเหลือบ้าง ด้วย memory ที่จำกัด
ผมใช้วิธี col-scan ครับ row-scan มันเปลือง mem ความสว่างสู่สีกัน
source ตัวนี้มี macro ใหม่ 2-3 ตัว
เช่น wr_bf เป็นคำสั่งเขียนข้อมูลไปยัง buffer แล้วแต่จะระบุเช่น
ds_buf1-4 เป็นตำแหน่ง display buffer เขียนอะไรออกไปก็เห็นเลย.....
cg_buf1-4 เป็นตำแหน่ง char buffer ไว้เก็บอักษรที่ต้องการแสดง.....
ส่วน PUT_STR_L เป็นคำสั่งใช้ เปิดตาราง เอามาแสดงผลพร้อมกับเลื่อน
ไปทางซ้ายเรือยๆจนกว่าจะเจอ byte ปิด 00h
Source Code v2.0
สมัครสมาชิก:
บทความ (Atom)