ตัวอย่างใน วีโอ ใช้ 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
แสดงบทความที่มีป้ายกำกับ dot แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ dot แสดงบทความทั้งหมด
วันพฤหัสบดีที่ 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
วันเสาร์ที่ 26 กุมภาพันธ์ พ.ศ. 2554
LED Dot Matrix Display V1
เนื่องจากทุนน้อยครับเอามันแค่นี้ก่อน
การเลื่อนตัวอักษรไม่ได้ยากเท่าใดนัก ทั้งหมดสามารถทำผ่าน buffer ได้ง่ายๆ
โดยกำหนด buffer ขึ้นมาเท่าจำนวนของ column ในรูปคือ 20 byte
ส่วนอีก 5 byte มีไว้ใช้ buffer ข้อมูลจากการเปิดตาราง แล้วเอามา
พักไว้ที่นี่ step การเลื่อนข้อความเบื้องต้นคือ
1.กำหนดตำแหน่งแรกของ pointer ข้อความ
2.กำหนดตำแหน่ง ที่ character buffer
3.เปิดตารางตัวอักษรจาก pointer
4.นำค่าจากตารางเก็บลง buffer
5.scan display ไว้ระยะหนึ่ง
6.เลื่อนข้อมูล display buffer ทั้งหมด ไปทางซ้าย 1 ครั้ง
แล้วกลับไปข้อ 5. ทำจนครบ 5 ครั้ง
7.เพิ่มค่า pointer กลับไปข้อ 2.
การ scan display ใช้หลักการคล้ายๆกับ 7 segment
คือ กำหนด pointer ที่ตำแหน่งแรก display buffer1 (30H)
แล้วนำค่าที่ pointer ชี้ไปส่งให้ Row Shift register
เพื่อส่งไปยัง dot matrix จากนั้นให้ column on
เพิ่มค่า pointer ทำจนครบ 20 column
tip....
คือ data เป็นของ column ไหนก็ให้ column นั้น on
อย่างวงจรที่ผมใช้ column เป็นลบ ผมก็สั่ง ให้ shift bit
นั้นเป็น 0 ครับ... และก่อนจะส่งค่าใดๆทาง row ให้
off ทุก column ก่อนเสมอ ช่วยแก้เบลอได้ 100%
รายละเอียดหลักๆ น่าจะมีเท่านี้ ถ้าได้อะไรใหม่ๆจะมาเล่าให้ฟังอีกที.....
source ตัวนี้ผมทำ buffer ไว้ 24 byte ครับ
เวลาเรียกใช้ ให้ใส่ค่า address 1-4 ลง acc
โดยเรียกโปรแกรมย่อย setaddress จากนั้น ตามด้วย putchar
ตัวอย่าง....
mov a,#1
acall setaddress ;buffer ตำแหน่งที่1
mov a,#"A"
acall putchar ;เก็บค่า "A" จากตาราง ลง buffer ตำแหน่งที่1
ในส่วนของ scan display เอาค่าที่เก็บจาก buffer ไปใช้ได้เลย
โดยมีคำสั่ง shift display ไว้ให้แล้ว
ตัวเต็มผม open source เหมือนเดิม แต่คงเอาแค่ อ่านข้อความจาก
programmemory เอามาวิ่งแสดงเฉยๆ ที่เหลือไปเขียนต่อกันเอง
เพราะเดี๋ยวจะงงกันซะเปล่าๆ video ผมถ่ายชัดสุดได้แค่นี้...
Source Code v1.0
สมัครสมาชิก:
บทความ (Atom)