ايران ويج

نسخه‌ی کامل: خالی کردن بافر صفحه کلید
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
در بسکام چطوری میشه بافر صفحه کلید را خالی کرد؟
صفحه کلید کامپیوتر را به 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:

   
Getatkbd() : Disable Int0 Gosub Set_timer

   
If 13 Then :

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

   
Elseif 47 And 58 Then :
      If 
48 Then Speed 2
      
Elseif 49 Then Speed 4
      
Elseif 50 Then Speed 7
      
Elseif 51 Then Speed 12
      
Elseif 52 Then Speed 20
      
Elseif 53 Then Speed 40
      
Elseif 54 Then Speed 65
      
Elseif 55 Then Speed 100
      
Elseif 56 Then Speed 150
      
Elseif 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

Getatkbd()

Table_key:

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

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

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