เมษายน 24, 2018, 07:27:24 pm *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: อยากขอคำแนะนำเรื่อง การทำ เคอร์เซอร์ หรือเมนูบนจอแอลซีดีแชแรคเตอร์  (อ่าน 6341 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
trose88
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 40


| |
« เมื่อ: ตุลาคม 15, 2011, 03:46:51 pm »

สวัสดีครับพี่ๆ ผมต้องการสร้างเมนูครับ
อธิบายคร่าวๆนะครับ
> 1.work 1 or next menu
   2.work 2 or next menu
   3.work 3
   4.work 4

โดยเครื่องหมาย ">" เป้นเคอร์เซอร์เลื่อนขึ้นเลื่อนลงได้ครับ
ไม่ทราบว่าจะต้องเกี่ยวข้องกับตัวแปรหรือเปล่า
เพราะผมจะให้การเลื่อนขึ้นเลื่อนลงนั้น มีความสัมพันธ์กับปุ่มครับ โดยกำหนดการเลื่อนขึ้น 1 ปุ่ม และเลื่อนลง 1 ปุ่ม
เช่น
เริ่มต้นให้ค่า x=0 // (x ไว้เก็บค่าเคอร์เซอร์)
ถ้า กดปุ่มขึ้น(แล้ว x=0) ไม่ต้องทำไร
    กดปุ่มขึ้น(แล้ว x=1) -ค่า x ขึ้น 1 เคอร์เซอร์ย้ายมาอยู่หน้าเลข 1
    กดปุ่มขึ้น(แล้ว x=2) -ค่า x ขึ้น 1 เคอร์เซอร์ย้ายมาอยู่หน้าเลข 2
    กดปุ่มขึ้น(แล้ว x=3) -ค่า x ขึ้น 1 เคอร์เซอร์ย้ายมาอยู่หน้าเลข 3
ถ้า กดปุ่มลง(แล้ว x=0) +ค่า x ขึ้น 1 เคอร์เซอร์ย้ายมาอยู่หน้าเลข 2
    กดปุ่มลง(แล้ว x=2) +ค่า x ขึ้น 1 เคอร์เซอร์ย้ายมาอยู่หน้าเลข 3
    กดปุ่มลง(แล้ว x=3) +ค่า x ขึ้น 1 เคอร์เซอร์ย้ายมาอยู่หน้าเลข 4

ประมาณนี้หรือเปล่าครับ ยังไงขอคำแนะนำด้วยครับ ใช้ Micro C ครับ
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #1 เมื่อ: ตุลาคม 15, 2011, 05:06:32 pm »

ใช้ตัวแปรเก็บตำแหน่งของ Cursor เป็นวิธีการที่ถูกต้องแล้วครับ
เพราะในกรณีนี้เราไม่ได้ใช้ Cursor ของตัว LCD แต่จำใช้ '>' แทน
เพราะฉนั้นลืมความสามารถของ Cursor Positioning ของ LCD ไปได้เลย

การ LCD มีมากกว่า 1 บรรทัดอาจจะมีตัวแปรอีกตัวนึงมาเก็บตำแหน่งของบรรทัด
ยกตัวแย่างเช่นตัวแปร x เก็บตำแหน่งบนบรรัดใดๆ และ y เก็บหมายเลขบรรทัด

เมื่อเริ่มต้น (ตอนที่ยังไม่สั่งให้ LCD แสดงผล) กำหนด x และ y ให้เท่ากับ 0
เมื่อมีการเขียนข้อความใดๆ ลงไปจะต้อง เพิ่มค่าของ x ขึ้นไปเท่ากับจำนวน
ของตัวอักษร เช่นเขียนคำว่า "MCU" ไป ค่าของ x จะต้องเพิ่มขึ้น 3 นั่นคือ x=x+3
แล้วก็เขียน '>' ต่อท้ายไป (หากต้องการให้แสดง) ในกรณีที่ต้องการขึ้นบรรทัดใหม่
ก็ให้เปลี่ยนค่าของ y

ตอนนี้เราก็สามารถรับรู้ตำแหน่งปัจจุบันของ '>' แล้ว เมื่อมีการกดปุ่มเลื่อน '>'
โดยการกำหนดค่าผ่านตัวแปร x และ y นี้เช่นกัน อาจจะใช้คำสั่ง lcd_goto_xy(y, x)
ฟังก์ชั่นนี้จะต้องเขียนขึ้นมาเอง (ถ้าหากไม่มีให้ใช้) โดยสามารถดูรายละเอียดได้จาก
คู่มือของ HD44780 (LCD Controller) และเบอร์อื่นที่ทำหน้าที่เหมือนกัน


บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
trose88
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 40


| |
« ตอบ #2 เมื่อ: ตุลาคม 16, 2011, 09:34:20 am »

ขอบคุณครับ ได้ไอเดียขึ้นมาบ้างละครับ เอแต่ว่าหน้าตาจองเจ้า Cursor Positioning ของจอเองนี่หน้าตาเป้นยังไงครับ เป้นเครื่องหมาย _ หรือว่าเป็นช่องทึบครับ

แล้วมันสามารถทำตัวหนังสือเป็นแบบ เนกาตีฟได้มั้ยครับ(โดยใช้รูปแบบคำสั่งเดิม) กล่าวคือ เดิมๆนั้นตัวอักษร เป็นตัวสีดำ บนช่องสีพื้นจอ
แต่อยากให้เป็นเนกาตีฟ คือช่องตัวอักษร เป็นสีดำแต่ตัวหนังสือเป็นพื้นของจอครับ
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #3 เมื่อ: ตุลาคม 16, 2011, 10:12:12 am »

เครื่องหมาย _ เรียกว่า Cursor
สีเหลี่ยมทึบ กระพริบได้เรียกว่า Blinker

Negative display สามารทำได้ด้วยกระบวนการทางซอฟท์แวร์ โดยใช้ความสามารถของ CGRAM
หลัการคือ เขียนตัวอักษรที่ต้องการลง DDRAM (ส่วนที่อยู่นอกของการแสดงผล เช่นถ้าหนึงบรรทัดมี 16
ตัวอักษร ให้เขียนไปที่ตำแหน่งที่ 17) จากนั้นอ่านกลับเข้ามาใส่ในตัวแปรสักตัวนึง ตามด้วยทำการ
invert (1's complement) แล้วเขียนลงไปยัง CGRAM จบด้วยการดึงค่าจาก CGRAM มาแสดงผล  

วิธีนี้ไม่เหมาะสำหรับคนที่ไม่เข้าใจการทำงานที่แท้จริงของ LCD เท่าที่ทราบ ไม่มีหนังสือเล่มไหนสอนเรื่องนี้
ยิ่งเป็นหนังสือบ้านเรา (มากกว่า 90%) ไม่ได้สอนเรื่อง Read operation ของ LCD ด้วยซ้ำไป สังเกตุได้จาก
การต่อขา RD ของ LCD ลงกราวด์ เพราะฉนั้นถ้าไม่ได้คิดจะศึกษาจริงจัง ซื้อแบบที่เป็น Negative ใช้เลยก็ได้ครับ
จะได้ไม่ต้องยุ่งยาก ราคาก็แตกต่างกันเล็กน้อยเท่านั้น

บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
trose88
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 40


| |
« ตอบ #4 เมื่อ: ตุลาคม 16, 2011, 12:32:54 pm »

ขอบคุณครับ เยี่ยมเลย เพิ่งรู้ครับ ว่ามีแบบนี้ด้วยเจ้าจอ negative ขอบคุณพี่มากครับ ผมมือใหม่ขอลุยแบบเบสิกไปก่อนดีกว่าครับ
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #5 เมื่อ: ตุลาคม 16, 2011, 12:40:02 pm »

ตัวนี้ราคาประมาณ 360 บาท ผมใช้มา 7 ปีกว่าแล้ว ยังไม่พบปัญหา

บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
trose88
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 40


| |
« ตอบ #6 เมื่อ: ตุลาคม 16, 2011, 03:57:45 pm »

ขอบคุณครับ ถามอีกข้อนึงครับ ทำไม
อันนี้อยู่ในตัวอย่างโปนแกรมรหัสผ่าน  Lcd_Chr(1,i+2,r[3-i]...+48);

 อันนี้อยู่ในตัวอย่างโปนแกรมเครื่องคิดเลข Lcd_Chr(2,i+1,input...+48);



ทำไมจะต้องมี +48 ด้วยครับ ผมหาที่มาของเลขนี้ยังไม่ได้เลยไม่ทำอะไรเลยครับวันนี้
ขอบคุณครับ
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #7 เมื่อ: ตุลาคม 16, 2011, 04:25:47 pm »

อ้างถึง
ขอบคุณครับ ถามอีกข้อนึงครับ ทำไม
อันนี้อยู่ในตัวอย่างโปนแกรมรหัสผ่าน  Lcd_Chr(1,i+2,r[3-i]...+48);

อันนี้อยู่ในตัวอย่างโปนแกรมเครื่องคิดเลข Lcd_Chr(2,i+1,input...+48);



ทำไมจะต้องมี +48 ด้วยครับ ผมหาที่มาของเลขนี้ยังไม่ได้เลยไม่ทำอะไรเลยครับวันนี้
ขอบคุณครับ

อย่าตั้งคำถามด้วยข้อมูลน้อยมากขนาดนั้น คุณจะต้องแจกแจงรายละเอียดต่างๆ ให้มากพอ
เพื่อให้คนตอบมีข้อมูลมากพอที่จะวิเคราะห์ได้ เช่น
- Lcd_Chr คืออะไร?
- ถ้าเป็นฟังก์ชั่น มันต้องการพารามิเตอร์อะไรบ้าง?


ขอเดาไปตามความรู้สึก ด้วยข้อมูลจากคำถามก่อนหน้าว่าด้วยการแสดงผลบนจอ LCD
-พารามิเตอร์ตัวแรกคือหมายบรรทัด
-ตัวที่สองคือตำแหน่งในบรรทัดนั้นๆ
-ตัวที่ 3 คือข้อมูลการแสดงผล ต้องการชนิดตัวแปรเป็น char ในรูปแบบของ ASCII

ถ้าการเดาทั้งหมดนั้นถูก
เมื่อข้อมูลใน  r[3-i] และ input เป็นเลขฐาน 10 ใดๆ
การบวกด้วย 48 คือการเปลี่ยนจากเลขฐาน 10 เป็นรหัส ASCII
ยกตัวอย่างเช่น
ต้องการให้แสดงเลข '0' จะเป็น 0+48 = 48
ต้องการให้แสดงเลข '1' จะเป็น 1+48 = 49
...
ต้องการให้แสดงเลข '9' จะเป็น 9+48 = 57


บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
trose88
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 40


| |
« ตอบ #8 เมื่อ: ตุลาคม 17, 2011, 10:01:11 am »

กระจ่างชัด ขอบคุณครับ
บันทึกการเข้า
Noodee99
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 1


| |
« ตอบ #9 เมื่อ: มีนาคม 23, 2018, 04:12:47 pm »

ขอมูลนำไปใช้ ปรับใช้ได้เลยคะ ขอบคุณมากๆ
บันทึกการเข้า

poikljuyii
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 1


| |
« ตอบ #10 เมื่อ: มีนาคม 28, 2018, 04:22:19 pm »

ขอบคุณข้อมูลดีๆที่เอามาลงให้ได้รู้นะครับ
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: