Fórum témák

» Több friss téma
Cikkek » Grafikus kijelzők vezérlése
Grafikus kijelzők vezérlése
Szerző: Pali79, idő: Márc 31, 2015, Olvasva: 17208, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   5 / 8

Elsőként a korábban bemutatott R betűt fogjuk kiírni programból. A programot assembly nyelven írtam, így minden egyes lépést végigkövethetünk.

 A program fő működtetőeleme 2 db szubrutin. Az egyik az LCD-nek adott parancsokat, a másik az LCD-nek küldött adatokat vezérli, de nézzük a teljes kódot:

 
  1. </div>
  2. <div>
  3. <p style="margin-left: 30px;">LIST p=16F628A
  4.  include "P16F628A.inc"
  5.  ERRORLEVEL 0, -302
  6.  __config 0x3D18
  7.  
  8. <p style="margin-left: 30px;">
  9.  cblock 0x20
  10.  
  11.  count
  12.  count1
  13.  counta
  14.  countb
  15.  count2
  16.  lcdadat
  17.  
  18.  endc
  19.  
  20. Initialise
  21.        org 0x0000
  22. <p style="margin-left: 30px;">movlw 0x07
  23.  movwf CMCON ; komparátor ki
  24.  clrf count
  25. SetPorts
  26. <p style="margin-left: 30px;">bsf STATUS,RP0 ; bank 1
  27.  clrf TRISA
  28.  clrf TRISB
  29.  bcf STATUS,RP0 ; bank 0
  30.  clrf PORTA
  31.  clrf PORTB
  32.  call Delay255
  33.  bsf PORTA,7 ; lcd reset
  34.  call Delay255
  35. LCD_init
  36. <p style="margin-left: 30px;">bcf PORTA,1 ;mindkét chip kiválasztása
  37. bcf PORTA,0
  38. <p style="margin-left: 30px;">movlw 0x3F ; lcd on
  39.  movwf lcdadat
  40.  call LCD_com
  41.  call Delay255
  42.  
  43. movlw b'01000000' ; Y kezdőcím: 0
  44.  movwf lcdadat
  45.  call LCD_com
  46.  
  47.  movlw b'10111000' ; X kezdőcím: 0
  48.  movwf lcdadat
  49.  call LCD_com
  50.  
  51.  movlw b'11000000' ; Z kezdőcím: 0
  52.  movwf lcdadat
  53.  call LCD_com
  54.  
  55.  call Delay255
  56. LCD_adat
  57. <p style="margin-left: 30px;">
  58.  bsf PORTA,1 ; 1-es, chip kiválasztása
  59.  bcf PORTA,0
  60.  
  61.  movlw b'00000000' ; R betű
  62.  movwf lcdadat
  63.  call LCD_write
  64.  
  65.  movlw b'01111111'
  66.  movwf lcdadat
  67.  call LCD_write
  68.  
  69.  movlw b'00001001'
  70.  movwf lcdadat
  71.  call LCD_write
  72.  
  73.  movlw b'00011001'
  74.  movwf lcdadat
  75.  call LCD_write
  76.  
  77.  movlw b'00101001'
  78.  movwf lcdadat
  79.  call LCD_write
  80.  
  81.  movlw b'01000110'
  82.  movwf lcdadat
  83.  call LCD_write
  84.  
  85.  movlw b'00000000'
  86.  movwf lcdadat
  87.  call LCD_write
  88.  
  89.  goto $
  90.  
  91.  
  92. ;Subroutines and text tables
  93. ;LCD routines
  94. ;Initialise LCD
  95. LCD_com ;a parancsok rutinja
  96. <p style="margin-left: 30px;">bcf PORTA,2
  97.  movfw lcdadat
  98.  movwf PORTB
  99.  bsf PORTA,3
  100.  call Delay5
  101.  bcf PORTA,3
  102.  call Delay5
  103.  retlw 0x00
  104. LCD_write ;az adatok rutinja
  105. <p style="margin-left: 30px;">bsf PORTA,2
  106.  movfw lcdadat
  107.  movwf PORTB
  108.  bsf PORTA,3
  109.  call Delay5
  110.  bcf PORTA,3
  111.  call Delay5
  112.  retlw 0x00
  113. Delay255
  114.  movlw 0xff ;delay 255 mS
  115.  goto k0
  116. Delay100
  117.  movlw d'100' ;delay 100mS
  118.  goto k0
  119. Delay50
  120.  movlw d'50' ;delay 50mS
  121.  goto k0
  122. Delay20
  123.  movlw d'20' ;delay 20mS
  124.  goto k0
  125. Delay5
  126.  movlw 0x05 ;delay 5.000 ms (4 MHz clock)
  127. k0 movwf count1
  128. k1 movlw 0xC7 ;delay 1mS
  129.  movwf counta
  130.  movlw 0x01
  131.  movwf countb
  132. Delay_0
  133.  decfsz counta, f
  134.  goto $+2
  135.  decfsz countb, f
  136.  goto Delay_0
  137. decfsz count1 ,f
  138.  goto k1
  139.  retlw 0x00
  140.  
  141. ;end of LCD routines
  142.  
  143.  end
  144. </div>
  145. <div>
 
Mint látható a két rutin csak a PORTA,2 állapotában tér el, parancs vagy adat küldés.
A lefordított programot (hex) innen letölthetitek.

A cikk még nem ért véget, lapozz!
Következő: »»   5 / 8
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem