Thông báo

Collapse
No announcement yet.

Màn hình cảm ứng dtdd Trung Quốc!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Màn hình cảm ứng dtdd Trung Quốc!

    Mình có 1 cái màn hình cảm ứng của mấy thằng dt di động của trung quốc. Bạn nào làm rồi, cho mình ít tài liệu và chỉ mình cách kết nối nhé.
    Nguyên lí làm việc của thằng này mình cũng chưa hiểu lắm. Mình mua ngoài tiệm có 15k à, thấy rẻ mà hay chứ.
    Đầu ra có 4 dây.
    Rất mong nhận được sự đóng góp của các bạn

  • #2
    Cái này hình như có post rồi mà bác. Cái màn cảm ứng 4 dây thực ra nó có 2 lớp, khi ta nhấn vào màn hình thì 2 lớp sẽ tiếp xúc với nhau tại vị trí mà ta nhấn -> sẽ cho ra 1 điện trở nhất định tùy theo vị trí mà ta nhấn.




    Kết nối với vi xử lý như hình vẽ


    Ở đây ta nối cặp X(+), X(-), Y(+), Y(-) vào 4 bit của portF (port có ADC của Mega128, nếu là Mega16 thì là portA)

    Đây là chương trình mẫu( em dùng Bascom AVR chứ không dùng C, giải thuật tương tự, chỉ khác các lệnh thôi)

    lệnh getADC(kênh#) dùng để lấy giá trị ADC ở kênh#, chỉ cần chú ý ngay chỗ Readtouch trở đi, phần trên chỉ là hiển thị ra Graphic thôi

    Code:
    $regfile = "m128def.DAT"
    $crystal = 7372800
    $baud = 19200
    $eepleave
    $loadersize = 512
    $hwstack = 100
    $swstack = 75
    $framesize = 40
    $lib "glcdKS108.lib"                                        'Include the library for the KS-108 controler
    
    
    Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 0 , Ce2 = 1 , Cd = 2 , Rd = 3 , Reset = 5 , Enable = 4
    'The dataport is the portname that is connected to the data lines of the LCD
    'The controlport is the portname which pins are used to control the lcd
    'CE =CS1  Chip select
    'CE2=CS2  Chip select second chip
    'CD=Data/instruction
    'RD=Read
    'RESET = reset
    'ENABLE= Chip Enable
    
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal       'Setting up the a/d convertor
    Config Timer1 = Timer , Prescale = 1024                     ' Timer 1 sets the screen back to the mainmenu after 10sec
    Const Timer1preload = 58336                                 'Timer 1 preload for 1 sec interrupt
    
    
    Speaker Alias Portf.7                                       'Buzzer connected to portf.7, see circuit diagram
    Dim Temp as byte , X as Word , Y as Word
    Dim Row as byte , Keyarray(3) as Byte , Col as byte , Key as Byte , Keylus as Byte
    Dim Keypressed as Byte , Menu as byte
    Dim Timecount as Byte
    Setfont Font8x8
    Enable Ovf1
    Enable Interrupts
    On Timer1 1secint                                           ' on overflow jump to 1 sec int routine
    Start adc                                                   ' Start the ad convertor
    Stop timer1
    
    Gosub ShowMainMenu                                          ' Starts with the Mainmenu
    ' =====Main=====
    Main:
    Do
    '*************************
    ' Here your main prog
    '*************************
     Gosub Readtouch                                            ' Read the touch cordinates
     Gosub WhichKey                                             ' Which key is pressed
    If menu > 1 then                                            ' Starts the timer if the menu is not the Mainmenu
        start timer1
    Else
       Stop timer1
    End if
    
    If Keypressed > 0 then                                      ' Key is pressed
     Select case Menu                                           ' Depends on the menu that we are in what to do with the pressed key
      Case 1 : Select case Keypressed                           'Mainmenu
                      Case 11 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 12 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 13 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 21 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 22 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 23 : Gosub ShowLichtEettafelMenu     ' Shows a sub menu
                      Case 31 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 32 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 33 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 41 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 42 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 43 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      End select
    
    Case 13 : Select case Keypressed                            'LichtEetafelmenu (menu 13)
                      Case 11 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 12 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 13 : Gosub ShowMainMenu              ' Back to the mainmenu
                      Case 21 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 22 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 23 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 31 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 32 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 33 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 41 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 42 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      Case 43 : Print " You pressed key: " ; Keypressed ; " in menu: " ; Menu
                      End select
    End select
     Keypressed = 0                                             ' Key is processed so put it back to 0
    end if
    Loop
    
    
    '=== Subroutines===
    $include "font8x8.font"
    
    1secint:                                                    ' Interrupt routine will set the screen back to the mainmenu in 10 seconds
    Incr Timecount                                              ' increment every sec the counter with 1
    If Timecount => 10 Then                                     ' here is the 10 sec
     Stop Timer1 : Timecount = 0
     Gosub ShowMainMenu                                         ' Sets the screen
    Else
     Timer1 = Timer1preload
    End If
    Return
    
    
    ShowMainMenu:                                               'Shows the main menu
    Menu = 1                                                    'Menu number
    Cls                                                         'Clears the screen
    Showpic 0 , 0 , HeaderHoofdmenu                             ' Draw the 9 pictures on the screen
    Showpic 0 , 16 , Jalvoor
    Showpic 32 , 16 , jalachter
    Showpic 64 , 16 , Lichtkeuken
    Showpic 96 , 16 , Autoprog
    Showpic 0 , 40 , LichtSalontafel
    Showpic 32 , 40 , LichtEetTafel
    Showpic 64 , 40 , Schemerlamp
    Showpic 96 , 40 , Pijlrechts
    return
    
    ShowLichtEettafelMenu:                                      ' Shows the ShowLichtEetafel menu (sub menu 13)
    Menu = 13                                                   ' Menu number
    Cls                                                         'Clears the screen
    Showpic 0 , 0 , HeaderLichteettafel                         ' Draw the 9 pictures on the screen
    Showpic 0 , 16 , Stopbutton
    Showpic 32 , 16 , PijlOmhoog
    Showpic 64 , 16 , F1Preset
    Showpic 96 , 16 , F2Preset
    Showpic 0 , 40 , EscButton
    Showpic 32 , 40 , PijlOmlaag
    Showpic 64 , 40 , F3Preset
    Showpic 96 , 40 , F4Preset
    Return
    
    
    WhichKey:                                                   'Determins which key is pressed
    Select Case X                                               ' For the x value
                Case 200 to 340 : Col = 10                      ' The cordinates on the touchscreen determins which key is pressed for example;
                Case 341 to 486 : Col = 20                      ' 341 to 486 are the cordinates where between the second column is
                Case 487 to 635 : Col = 30
                Case 636 to 774 : Col = 40
                Case else Col = 0
    End select
    Select Case Y                                               ' For the y value
                Case 250 to 360 : Row = 1                       ' The cordinates on the touchscreen determins which key is pressed for example;
                Case 361 to 540 : Row = 2                       ' 361 to 540 are the cordinates where between the second row is
                Case 541 to 730 : Row = 3
                Case else Row = 0
    End select
    Key = Col + row                                             ' Add the row and column value so we get 1 key value
    If Key > 0 then                                             ' There is a key pressed
      Keyarray(Keylus) = Key                                    'Must read the same key 3 times in a row, to prefent bouncing
      Incr Keylus
      If Keylus > 3 then keylus = 1
       If Keyarray(1) = Keyarray(2) then
           If Keyarray(2) = Keyarray(3) then                    ' Key is correct read 3 times the same
                      Sound Speaker , 1 , 65000                 ' Give a key beep
                      KeyPressed = Key
                      Timecount = 0
           end if
       end if
     end if
    Return
    
    ReadTouch:
    Config Pinf.0 = Output                                      ' Makes port F.0 output
    Config Pinf.2 = Output                                      ' Makes port F.0 output
    Set Portf.0                                                 ' Sets port F.0 High
    reset Portf.2                                               ' Sets port F.2 Low
    ddrf.1 = 0                                                  ' Sets port F.1 as input
    ddrf.3 = 0                                                  ' Sets port F.1 as input  because we need it now as ad input
    Waitms 20                                                   ' Wait until the port is stable
    Y = Getadc(3)                                               ' Read the ad value for the y
    Y = 1024 - Y                                                ' Invert the reading
    'Print "VALUE Y : " ; Y                                      ' for debugging
    Config Pinf.1 = Output                                      ' Makes port F.1 output
    Config Pinf.3 = Output                                      ' Makes port F.3 output
    reSet Portf.1                                               ' Sets port F.1 Low
    set Portf.3                                                 ' Sets port F.3 High
    ddrf.0 = 0                                                  ' Sets port F.0 as input
    ddrf.2 = 0                                                  ' Sets port F.2 as input  because we need it now as ad input
    Waitms 20                                                   ' Wait until the port is stable
    X = Getadc(2)                                               ' Read the ad value for the x
    X = 1024 - X                                                ' Invert the reading
    'Print "VALUE  X : " ; X
    return
    
    
    '=====The buttons images=====
    HeaderHoofdmenu:
    $Bgf "HeaderHoofdmenu.bgf"
    HeaderLichteettafel:
    $Bgf "HeaderLichtEettafel.bgf"
    Jalvoor:
    $Bgf "Jalvoor.bgf"
    JalAchter:
    $Bgf "Jalachter.bgf"
    LichtSalonTafel:
    $Bgf "LichtSalonTafel.bgf"
    LichtEetTafel:
    $Bgf "LichtEetTafel.bgf"
    Lichtkeuken:
    $Bgf "Lichtkeuken.bgf"
    Schemerlamp:
    $Bgf "Schemerlamp.bgf"
    EscButton:
    $Bgf "Esc.bgf"
    PijlOmhoog:
    $Bgf "PijlOmhoog.bgf"
    PijlOmlaag:
    $Bgf "PijlOmlaag.bgf"
    PijlRechts:
    $Bgf "PijlRechts.bgf"
    PijlLinks:
    $Bgf "PijlLinks.bgf"
    Autoprog:
    $Bgf "Autoprog.bgf"
    StopButton:
    $Bgf "Stop.bgf"
    F1Preset:
    $Bgf "F1preset.bgf"
    F2Preset:
    $Bgf "F2preset.bgf"
    F3Preset:
    $Bgf "F3preset.bgf"
    F4Preset:
    $Bgf "F4preset.bgf"
    F3Leeg:
    $Bgf "F3Leeg.bgf"
    F4Leeg:
    $Bgf "F4Leeg.bgf"
    Leeg:
    $Bgf "Leeg.bgf"
    Em đã làm thử cái máy tính đơn giản này, tuy nhiên nó còn bị nhiễu hơi nhiều
    Hướng dẫn cụ thể cho AVR tại đây :
    Hãy nhấn vào nút "Cảm ơn" để em biết rằng em đã giúp được một ai đó.

    Comment


    • #3
      Cảm ơn bác rất nhiều..mình rất thích cái website của bạn.

      Comment


      • #4
        Cái website hướng dẫn học AVR đó của một anh mình quen đang học Phd. ở HQ, rất dễ hiểu, cơ bản.
        Hướng dẫn cụ thể cho AVR tại đây :
        Hãy nhấn vào nút "Cảm ơn" để em biết rằng em đã giúp được một ai đó.

        Comment

        Về tác giả

        Collapse

        HiMas88 Tìm hiểu thêm về HiMas88

        Bài viết mới nhất

        Collapse

        Đang tải...
        X