เขียนคำสั่ง password โดยใช้ 16f877 กับ keymatrix เขียนยังไงครับ
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: เขียนคำสั่ง password โดยใช้ 16f877 กับ keymatrix เขียนยังไงครับ  (อ่าน 7747 ครั้ง)
EMOSECTION
Full Member
member
**

คะแนน20
ออฟไลน์ ออฟไลน์

กระทู้: 453


เรียนให้รู้ ดูให้จำ ทำให้เป็น


อีเมล์
« เมื่อ: ธันวาคม 15, 2009, 11:40:13 am »

ผมใช้ แค่ 0-9 ต้องการแค่ 4 หลักพอ ใช้หลักการยังไงดีครับ

สมมุติว่าตั้งระหัสใว้ใน data 0,[$00,$10,$20,$30] ให้เป็นค่าตายตัว

ถ้าใช้ eeprom เป็นตัวเก็บ สมมุติว่ากด 1234 ข้อมูลจะไปเรียงใน eeprom 0,[$10,$20,$30,$40] แล้วเอาไปเทียบกับ data ว่าตรงกันมั้ย ถ้าไม่ตรงก็แสดงว่าผิด
คือ ถ้ากด  ถูก [$00,$10,$20,$30] แล้วเอาค่าที่เรียงไปเปรียบกันข้อมูลใน data

ถ้าข้อมูลตรงกันก็ให้ผ่าน

อยากถามว่า 1 วิธีนี้มีข้อเสียมั้ย


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

สิ่งที่ดีที่สุด คือการให้ แต่สิ่งที่เป็นไปไม่ได้ คือการเห็นแก่ตัว
(ปัญหาทุกอย่าง มีทางแก้เสมอ อยู่ที่เราจะแก้มันด้วยวิธีใหน แต่สุดปัญญาทน สุดท้ายต้อง วิชามาร)

EMOSECTION
Full Member
member
**

คะแนน20
ออฟไลน์ ออฟไลน์

กระทู้: 453


เรียนให้รู้ ดูให้จำ ทำให้เป็น


อีเมล์
« ตอบ #1 เมื่อ: ธันวาคม 15, 2009, 11:47:47 am »

2 ใช้คำสั่งใหนเวลากดเลขแล้วให้มันเรียงกัน ไม่ทับกัน ไม่ข้ามกัน
3 ใช้คำสั่งใหนเปรียบเทียบ eeprom กับ data ครับ
4 หรือมีวิธีอื่นที่ดีกว่า
บันทึกการเข้า

สิ่งที่ดีที่สุด คือการให้ แต่สิ่งที่เป็นไปไม่ได้ คือการเห็นแก่ตัว
(ปัญหาทุกอย่าง มีทางแก้เสมอ อยู่ที่เราจะแก้มันด้วยวิธีใหน แต่สุดปัญญาทน สุดท้ายต้อง วิชามาร)
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #2 เมื่อ: ธันวาคม 15, 2009, 03:08:24 pm »

1.ถ้าเป็น eeprom ใน mcu ก็ไม่มีข้อเสีย
2.ไปหาอ่านดูใน หนังสือของ inex pic16f877 มีบอกไว้ค่อนข้างละเอียด
3.ไปหาอ่านดูใน หนังสือของ inex pic16f877 มีบอกไว้ค่อนข้างละเอียด
โดยทั่วไปการตรวจสอบ key จะเกิดหลังจากกด ระหัส ครบแล้ว หรือ กด enter หรือ อื่นๆ
แล้วแต่ผู้เขียนโปรแกรมกำหนด โดยเก็บค่าการกด key ในแต่ละครั้งไว้ใน buffer
เรียงต่อๆกันไป โดยการกด 1 ครั้งเก็บค่าลง buffer แล้ว address buffer+1
แล้วนำค่า buffer ที่ได้ไปเทียบกับ ค่าใน eeprom
4.วิธีนี้แหละดีสุดง่ายสุดแล้ว

แต่เอา 16f877 มาใช้งานแค่นี้มันไม่คุ้ม อาจใช้ แต่ 16f628 ก็พอ
ผมมี code เป็นของ mcs-51 ต่อกับ serial lcd 9600bps และ key 4x3 เอาป่าว แต่ไมมี eeprom นะ ไปพัฒนาเอาเอง
บันทึกการเข้า
EMOSECTION
Full Member
member
**

คะแนน20
ออฟไลน์ ออฟไลน์

กระทู้: 453


เรียนให้รู้ ดูให้จำ ทำให้เป็น


อีเมล์
« ตอบ #3 เมื่อ: ธันวาคม 19, 2009, 07:06:17 pm »

สนใจอยุ่เหมือนกัน เดี๋ยวผมลองไปพยายามอีกหน่อยก่อนครับ ขอบคุณที่ชี้และแนวทาง ติดปัญหายังไงจะมาถามใหม่ครับ
พอดีผมมีแต่ 16f877 ครับ เลยเอามาใช้ ดักว่าปล่อยให้มันหายไป
บันทึกการเข้า

สิ่งที่ดีที่สุด คือการให้ แต่สิ่งที่เป็นไปไม่ได้ คือการเห็นแก่ตัว
(ปัญหาทุกอย่าง มีทางแก้เสมอ อยู่ที่เราจะแก้มันด้วยวิธีใหน แต่สุดปัญญาทน สุดท้ายต้อง วิชามาร)
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #4 เมื่อ: ธันวาคม 22, 2009, 03:32:27 pm »

http://jap.hu/electronic/combination_lock.html

อันนี้ผมว่าน่าจะใช้ได้แต่ต้องแก้ code นิดหน่อย ของเดิมใช้กับ 16f84 ลองเอาไปแก้ไขดูครับ  Cool
บันทึกการเข้า
EMOSECTION
Full Member
member
**

คะแนน20
ออฟไลน์ ออฟไลน์

กระทู้: 453


เรียนให้รู้ ดูให้จำ ทำให้เป็น


อีเมล์
« ตอบ #5 เมื่อ: ธันวาคม 23, 2009, 05:15:21 pm »

ขอบคุณครับ
บันทึกการเข้า

สิ่งที่ดีที่สุด คือการให้ แต่สิ่งที่เป็นไปไม่ได้ คือการเห็นแก่ตัว
(ปัญหาทุกอย่าง มีทางแก้เสมอ อยู่ที่เราจะแก้มันด้วยวิธีใหน แต่สุดปัญญาทน สุดท้ายต้อง วิชามาร)
laser
member
*

คะแนน1
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #6 เมื่อ: มกราคม 04, 2010, 01:19:49 pm »

ผมว่า เอา ง่าย ๆ ก้อ แบบว่า เก็บ ค่า ตัวเลขใส่ตัวแปรดีกว่ามั้ย ครับ

ยาวหน่อยแต่ ชัวร์ ไร้ข้อเสีย ตั้งได้มากด้วยครับ
บันทึกการเข้า
laser
member
*

คะแนน1
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #7 เมื่อ: กุมภาพันธ์ 08, 2010, 07:17:34 pm »

ผมใช้ pbp นะครับ

ก้อ ตั้งตัวแปร 1 ตัว เช่น num1

และพอกด key 1ครั้งให้ ืum +1 ไปเรื่อย ๆ เท่านี้ก้อกดซ้ำกันได้แล้ว

pong_yuy@hotmail.com เมลมาถามได้ครับ

บันทึกการเข้า
laser
member
*

คะแนน1
ออฟไลน์ ออฟไลน์

กระทู้: 38


« ตอบ #8 เมื่อ: กุมภาพันธ์ 11, 2010, 05:37:38 pm »

ในกรณีรหัส 4 ตัว PBP กด key แล้วกด * เปน ตัวยืนยันคำสั่ง กด # เคลียรหัส

row1    var     portb.0
row2    var     portb.1
row3    var     portb.2
row4    var     portb.3
col1    var     portb.5
col2    var     portb.6
col3    var     portb.7

a1 var byte
a2 var byte
a3 var byte
a4 var byte

num var byte '''สำหรับเก็บตัวแปรเผื่อตัวแปรซ้ำกัน"'

a1 = 0
a2 = 0
a3 = 0
a4 = 0
num = 0

start: gosub scankey
pause 50
goto start
end

scankey:
low   row1
         if col1 = 0 then gosub num1
         if col2 = 0 then gosub num2
         if col3 = 0 then gosub num3
         high  row1
         low   row2
         if col1 = 0 then gosub num4
         if col2 = 0 then gosub num5
         if col3 = 0 then gosub num6
         high   row2
         low    row3
         if col1 = 0 then gosub num7
         if col2 = 0 then gosub num8
         if col3 = 0 then gosub num9
         high   row3
         LOW row4
         if col1 = 0 then gosub num10
         if col2 = 0 then gosub num0
         if col3 = 0 then gosub num11
         high row4
         return
'-------------------------------------
num1:
num = num
IF(num = 1)THEN A1 = 1
IF(num = 2)THEN A2 = 1
IF(num = 3)THEN A3 = 1
IF(num = 4)THEN A4 = 1
num = num+1
PAUSEUS 50
return
'--------------------------------------
num2:
num = num
IF(num = 1)THEN A1 = 2
IF(num = 2)THEN A2 = 2
IF(num = 3)THEN A3 = 2
IF(num = 4)THEN A4 = 2
num = num+1
PAUSEUS 50
        return
'--------------------------------------
num3:
num = num 
IF(num = 1)THEN A1 = 3
IF(num = 2)THEN A2 = 3
IF(num = 3)THEN A3 = 3
IF(num = 4)THEN A4 = 3
num = num+1
PAUSEUS 50
        return
'--------------------------------------
num4: num = num
IF(num = 1)THEN A1 = 4
IF(num = 2)THEN A2 = 4
IF(num = 3)THEN A3 = 4
IF(num = 4)THEN A4 = 4
num = num+1
PAUSEUS 50
return
'--------------------------------------
num5:
num = num 
IF(num = 1)THEN A1 = 5
IF(num = 2)THEN A2 = 5
IF(num = 3)THEN A3 = 5
IF(num = 4)THEN A4 = 5
num = num+1
PAUSEUS 50
return
'--------------------------------------
num6:  num = num
IF(num = 1)THEN A1 = 6
IF(num = 2)THEN A2 = 6
IF(num = 3)THEN A3 = 6
IF(num = 4)THEN A4 = 6
 num = num+1
PAUSEUS 50
return
'--------------------------------------
num7: num = num 
IF(num = 1)THEN A1 = 7
IF(num = 2)THEN A2 = 7
IF(num = 3)THEN A3 = 7
IF(num = 4)THEN A4 = 7
num = num+1
PAUSEUS 50
return
'--------------------------------------
num8: num = num 
IF(num = 1)THEN A1 = 8
IF(num = 2)THEN A2 = 8
IF(num = 3)THEN A3 = 8
IF(num = 4)THEN A4 = 8
num = num+1
PAUSEUS 50
return
'--------------------------------------
num9: num = num 
IF(num = 1)THEN A1 = 9
IF(num = 2)THEN A2 = 9
IF(num = 3)THEN A3 = 9
IF(num = 4)THEN A4 = 9
num = num+1
PAUSEUS 50
return
'--------------------------------------
num0: num = num 
IF(num = 1)THEN A1 = 10
IF(num = 2)THEN A2 = 10
IF(num = 3)THEN A3 = 10
IF(num = 4)THEN A4 = 10
num = num+1
PAUSEUS 50
return
'--------------------------------------
num10:  ใช้เปนคำสั่งเชคตัวแปร + พาส
if (a1 = 1)and(a2 = 2)and(a3 = 3)and(a4 = 4) then .......จำทำอะไรก้อคิดเอา
PAUSEUS 50
gosub num11
pause 50
return
'--------------------------------------
num11:
a1 = 0
a2 = 0
a3 = 0
a4 = 0
num = 0

pause 50
return
'--------------------------------------
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: