IIC LED DISPLAY 1.bas
Quelle: www.C-Control-Support.net
Weitere Infos im C-Control-Forum / C-Control I Info
Download Download
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'II  BASIC++ DEMO ZUM BASIC-COMPUTER UNIT M 1.2/2.0 (by DIE HARD)  II
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'--------------------------------------------------------------------
' Beispiel zum BASIC-COMPUTER    mit dem Programmer/Application-Board
'--------------------------------------------------------------------
' ANWENDUNG: IIC-BUS COMMUNICATIONS MODULE
'            4 DIGIT LED-DISPLAY 198344             (TREIBER SAA1064)
'--------------------------------------------------------------------
' Dieses Beispiel zeigt die Vorgehensweise für die Benutzung des
' IIC-BUS OBJECTS im OS. Einer der vielen erhältlichen Bausteine mit IIC-Bus
' Interface ist der 4 DIGIT LED DISPLAY TREIBER SAA1064. Er ist der Baustein
' der die 4 DIGIT 7 SEGMENTANZEIGE der LED-Anzeige ansteuert.
' Er hat ein verhältnismässig einfaches Protokoll das mit der IIC-Bus
' Unterstützung des Betriebsystems recht einfach in die Treibersoftware
' für diesn Baustein umgesetzt werden kann.
'
' <START><ADDRESS><INSTRUCTION><CONTROL><DIGIT1><DIGIT2><DIGIT3>DIGIT<4><STOP>
'
' Die Adresse besteht aus einem festen, nicht veränderbaren Anteil und
' einem vom Benutzer wählbaren Teil (zwei Bits). Das letzte Bit
' legt fest ob eine READ (Eingabe) oder WRITE (Ausgabe) über den SAA1064
' erfolgt
' In diesem Beispiel hat der SAA1064 die Adresse 3 (alle Bits auf HI),
' alle Jumper abgezogen.
' Allerdings ist beim diesem Baustein die interne Adressdecodierung 
' etwas anders als üblich. Das Modul hat deshalb 4 Jumper die dem
' Modul die Adresse 0 bis 3 zuweisen.
' Es darf jeweils nur ein Jumper gesteckt sein.
' J1   A0=0, A1=0
' J2   A0=1, A1=0
' J3   A0=0, A1=1
' J4   A0=1, A1=1
' Damit ergibt sich für eine READ-Operation folgender Wert:
'
' 0 1 1 1 0 x x 1       READ-Operation
' I------I-----I-I
' FIX ADR  ADR  R/W
'
' Für eine WRITE-Operation ist das letzte Bit LO und es ergibt sich
' folgender Wert:
'
' 0 1 1 1 0 x x 0       WRITE-Operation
' I------I-----I-I
' FIX ADR  ADR  R/W
'
' x sind die mit Jumper auf 0 setzbaren Adressbits.
' In diesem Beispiel wird angenommen, dass kein Jumper gesteckt ist. Die
' Adresse ist damit 118= $76 = 01110110

' Das INSTRUCTION-BYTE legt fest mit welches der internen Register
' zuerst beschriebnen wird. In unserem Beispiel ist das INSTRUCTION BYTE
' Null, das bedeutet dass nach dem INSTRUCTION BYTE das KONTROLLREGISTER
' und danach die DATENREGISTER der vier Digits beschrieben werden.
' Das KONTROLLREGISTER legt den LED Modus (hier Multiplex)und die LED
' Helligkeit fest.
'
' Die Zuweisung der Segmente zum jeweiligen Bit sind so:
'        a
'      f   b              xgfedcba (a=bit0)
'        g
'      e   c
'        d
'
' Eine 1 wird durch die Segmente bc dargestellt und die entsprechenden Bits sind
' log 1, die anderen 0 -> 00000110 =&H06
'
' Um Ihnen die Arbeit mit dem Treiber zu vereinfachen
' brauchen Sie sich aber um diese Angelegenheiten nicht zu kümmern,
' da enstprechende Unterprogramme im Treiber vorhanden sind.
'-----------------------------------------------------------------------
' SCHNITTSTELLE ZUM TREIBER
' Ihre Schnittstelle zum LED Treiber ist die Variable BRIGHTNES der Sie
' die vordefinierten Werte BRIGHT0 bis BRIGHT7 zuweisen könnnen
' und die Variablen DIGIT1 bis DIGIT4, die alle zusammen an die
' FUNCTION SENDBUF übergeben werden. Diese FUNCTION sendet den
' Buffer zum LCD.
'
' DECODE und SPLIT_DIGITS
' SPLIT_DIGITS spaltet einen Zahl in Ihre einzelnen Stellen auf
' ( also nach Zehner, Hunderter usw..)
' Bevor diese Stellen dann an das Display übertragen werden, müssen
' sie in den 7-Segment Code umgewandelt werden.
' Dies übernimmt die FUNCTION DECODE
' 
'-----------------------------------------------------------------------

'Der IIC-Bus liegt an PORT 9 (SDA) und PORT 10 (SCL)

'---------------------------------------------------------------------
' Die Zeit zur Anzeige eines Zählerstandes, wie hier im Beispiel benötigt
' etwa 5ms.
'------------------------------------------------------------------------
' BEISPIEL
' Das Beispiel zeigt einen laufenden Zähler bis 9999 und rdy nach Ablauf
' des Programms
'----------------------------------------------------------------------
' ACHTUNG:
' Achten Sie unbedingt darauf, dass das LCD initialisiert ist, wenn es
' angesteckt ist (auch wenn sie es nicht benutzen).
' Es teilt sich einen Teil seines Busses mit dem IIC-BUS
' print"#ON_LCD#";
' print"#INIT#";
' print"#OFF#";
'----------------------------------------------------------------------
' ACHTUNG:
' Das LED-Display benötigt bei max. Helligkeit sehr viel Strom
' Die Kühlung des Spannungsreglers auf dem Application-Board ist
' dafür nicht ausreichend. Betreiben Sie das Display mit BRIGHT2,
' wenn keine zusätzliche Kühlung für den Spannungsregler auf dem
' Application-Board vorgesehen ist.
'-----------------------------------------------------------------------

'--------------------------
'------ I/O PORTS ---------
'--------------------------
define LIGHT          port[16]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------

define TAUSENDER   as byte
define HUNDERTER   as byte
define ZEHNER      as byte
define EINER       as byte

'-------------------------
'-------------------------

'----- LED HELLIGKEIT -----
const BRIGHT0 =07h
const BRIGHT1 =17h
const BRIGHT2 =27h
const BRIGHT3 =37h
const BRIGHT4 =47h
const BRIGHT5 =57h
const BRIGHT6 =67h
const BRIGHT7 =77h
'-------------------------
const MINUS=40h
const A=77h
const B=7Fh
const C=39h
const d=5Eh
const E=79h
const F=71h
const G=7Dh
const H=76h
const I=06h
const J=0Fh
const L=38h
const n=54h
const x=5Ch
const P=73h
const r=50h
const S=6Dh
const t=78h
const U=3Eh
const y=6Eh
'-----------------------------------------------------
'               7 SEGMENT DECODER
'-----------------------------------------------------
FUNCTION DECODE (CODE as byte)
SELECT CASE CODE
  CASE 0
  CODE=3Fh
  CASE 1
  CODE=06h
  CASE 2
  CODE=5Bh
  CASE 3
  CODE=4Fh
  CASE 4
  CODE=66h
  CASE 5
  CODE=6Dh
  CASE 6
  CODE=7Dh
  CASE 7
  CODE=07h
  CASE 8
  CODE=7Fh
  CASE 9
  CODE=6Fh
END SELECT
RETURN CODE
END FUNCTION
'------------------------------------------------------

'-----------------------------------------------------
'--      IIC SEND BUFFER TO SAA1064               ----
'-----------------------------------------------------
FUNCTION SENDBUF(BRIGHT as byte,DIGIT1 as byte,DIGIT2 as byte,DIGIT3 as byte,DIGIT4 as byte)
IIC.INIT
IIC.START
IIC.SEND 118 'WRITE ADDRESS
IIC.SEND 0
IIC.SEND BRIGHT
IIC.SEND DIGIT1
IIC.SEND DIGIT2
IIC.SEND DIGIT3
IIC.SEND DIGIT4
IIC.STOP
IIC.OFF
END FUNCTION
'----------------------------------------------------
'          SPLIT VALUE INTO DIGITS
'----------------------------------------------------
FUNCTION SPLIT_DIGITS(VALUE as word)
TAUSENDER=VALUE/1000
HUNDERTER=(VALUE-(TAUSENDER*1000))/100
ZEHNER=(VALUE-(TAUSENDER*1000)-(HUNDERTER*100))/10
EINER=VALUE-TAUSENDER*1000-HUNDERTER*100-ZEHNER*10 
END FUNCTION
'----------------------------------------------------
'---------------------------------------------------------
FUNCTION SHOW_BLANK()
SENDBUF(BRIGHT1,0,0,0,0)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_IDLE()
SENDBUF(BRIGHT1,E,L,d,I)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_IN()
SENDBUF(BRIGHT1,0,0,n,I)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_OUT()
SENDBUF (BRIGHT1,0,t,U,x)'------------o
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_CLEAR()
SENDBUF(BRIGHT1,0,r,L,C)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_READY()
SENDBUF(BRIGHT1,0,y,D,r)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_ERROR()
SENDBUF(BRIGHT1,0,r,r,E)
END FUNCTION
'------------------------------------------------------- 
FUNCTION SHOW_ON()
SENDBUF(BRIGHT1,0,0,n,x)
END FUNCTION
'-------------------------------------------------------
FUNCTION SHOW_OFF()
SENDBUF(BRIGHT1,0,F,F,x)
END FUNCTION
'-------------------------------------------------------
FUNCTION SHOW_TEST()
SENDBUF(BRIGHT1,255,255,255,255)
END FUNCTION

#MAIN
define COUNTER as word
LIGHT=off
LCD.INIT
LCD.PRINT "  SAA1064 LED"
LCD.POS 2,5
LCD.PRINT "DEMO"
LCD.OFF

'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'III      DEMO MESSAGES AND COUNTERS                   II
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
                       
'----------- TEST - ALL SEGMENTS ON --------------------
SHOW_TEST()
pause 50
'----------- BLANK - ALL SEGMENTS OFF ------------------
SHOW_BLANK()
pause 50
'----------- SHOW IDLE MESSAGE ----------------------------
SHOW_IDLE()
pause 50
'----------- SHOW IN MESSAGE ----------------------------
SHOW_IN()
pause 50
'----------- SHOW OUT MESSAGE ---------------------------
SHOW_OUT()
pause 50
'----------- SHOW CLEAR MESSAGE -------------------------
SHOW_CLEAR()
pause 50
'----------- SHOW ERROR MESSAGE -------------------------
SHOW_ERROR()
pause 50
'----------- SHOW ON MESSAGE ----------------------------
SHOW_ON()
pause 50
'----------- SHOW OFF MESSAGE ---------------------------
SHOW_OFF()
pause 50 
'---------- SHOW RUNNING COUNTER ------------------------
for COUNTER=0 to 9999
SPLIT_DIGITS(COUNTER)
SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),DECODE(TAUSENDER))
next
'--------- FLASHING READY -------------------------------
#RDY
SHOW_READY()
pause 20
SHOW_BLANK()
pause 20
goto RDY
end'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

  
























Powered by C-Control I Info