ايران ويج

نسخه‌ی کامل: خالی کردن بافر صفحه کلید
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
در بسکام چطوری میشه بافر صفحه کلید را خالی کرد؟
صفحه کلید کامپیوتر را به Atmega32 وصل کردم.اولین کلید کیبورد را بدرستی میخواند ولی برای خواندن کلید دوم مشکل دارد.در بافر صفحه کلید کدهای قبلی میماند و خالی نمیشود.
چجوری می خونی ؟
برنامتو بذار !

اون کدی که تو هلپ بسکام گذاشته رو استفاده کنی به مشکلی بر نمی خوری !!
حداقل واسه من که عالی کار کرد !!!
کد php:
Function Readonkey() As Byte
Dim Kb 
As Byte
Dim Kb2 
As Byte
 
Do
 
Kb = Getatkbd()
 If 
Kb <> 0 Then Kb2 = Kb
 Loop Until Kb 
= 0
 Kb 
= Getatkbd()
 
Readonkey = Kb2
End 
Function
Change_text:'interrupt
Dim Kk As Byte
Strkey = ""
Kk = Readonkey()
Strkey = Chr(kk )
Return 

بعدا Strkey باید روی تابلو نمایش داده بشه.
بعد از Loop دستور Getatkbd را نوشتم که بعضی از مشکلات حل شد.چون وقتی که کلید را ول میکنیم کد صفر و سپس دوباره همان کد قبلی فرستاده میشود.ولی نمیدونم چرا باز هم مقداری داده در بافر صفحه کلید میماند و کدهای کلید قبلی خوانده میشود.
شاید هم مدار مشکل داشته باشه؟

در ضمن چرا بدرستی از وقفه خود کیبورد برای خواندن از صفحه کلید نمیشه استفاده کرد؟
پایه کلاک را به int0 و data را به portd.4 وصل کردم.
ربطی به pull up داره؟
ما که اون دقیما به تابلو روان درست کردیم واسه خوندن صفحه کلید تابع زیر رو نوشته بودم و عملکردش خوب بود !!
نکته : من با اینتراپ کار کردم !!

کد php:
Get_data:

   
C = Getatkbd() : Disable Int0 : Gosub Set_timer

   
If C = 13 Then :

      
Gosub Show_ss : Start Timer1 : Gosub Flash
      
Do
         Do
            
C = Getatkbd()
         
Loop Until C <> 0
         Gosub Set_timer
         
If C > 31 And C < 127 Then :
            
B = Len(ss)
            If 
B < 255 Then :
                  
Ss = Ss + Chr(c) : Gosub Show_ss
            End 
If
         Elseif 
C = 8 Then :
            
B = Len(ss) :
            If 
B > 1 Then :
               
Decr B : Ss = Left(ss , B)
            Elseif 
B = 1 Then :
               
Ss = Chr(0)
            
End If
            
Gosub Show_ss
         
Elseif C = 13 Then :
            
Ess = Ss : Stop Timer1 : Gosub Show_ss : Gosub R_l_c : Disable Interrupts
         End 
If
      
Loop

   
Elseif C > 47 And C < 58 Then :
      If 
C = 48 Then : Speed = 2
      
Elseif C = 49 Then : Speed = 4
      
Elseif C = 50 Then : Speed = 7
      
Elseif C = 51 Then : Speed = 12
      
Elseif C = 52 Then : Speed = 20
      
Elseif C = 53 Then : Speed = 40
      
Elseif C = 54 Then : Speed = 65
      
Elseif C = 55 Then : Speed = 100
      
Elseif C = 56 Then : Speed = 150
      
Elseif C = 57 Then : Speed = 225
      End 
If
      
Espeed = Speed
   End 
If
   
Enable Int0

Return


Kbdinput:
   
$asm
   push r16           
; save used register
   push r25
   push r26
   push r27

   Kbdinput1
:
   
rCall _getatkbd   ; call the function
   
tst r24           ; check for zero
   breq Kbdinput1     
; yes so try again
   pop r27           
; we got a valid key so restore registers
   pop r26
   pop r25
   pop r16
   $end Asm
Return

C = Getatkbd()

Table_key:

Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 
, 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 
, 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 
, 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 
, 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 
, 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 
, 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 
, 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

Data 0 
, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 
, 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 
, 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 
, 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 
, 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 
, 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 
, 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 
, 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0 
کار Set_timer چیه؟
چرا از Start Timer1 استفاده کردید؟
االبته بگم رشتم برنامه نویسی کامپیوتره.
اونها رو ولش کن !

با اسکن تابلو و همینطور چشمک زدن متن بودش !
مثل blink که تو نرم افزارهای ویرایش میاد !!!