Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 LCD probleme (Software) Kategorie: Programmierung Basic (von Andreas - 5.02.2006 17:45)
Andreas nutzt:  CC1-Station V1.1
Hallo zusammen,

ich hätte da mal 2 Fragen:

kann man ein LCD zeilenweise Löschen? Hintergrund...bei meinem laienhaften zusammengebastelten Programm wird das LCD gelöscht...nun dauert es ein wenig bis die Zeile 2 wieder da steht. Es tritt also ähnlich wie ein flackern auf.

Und zum anderen sendet meine Station immer Leerzeichen über serielle schnittstelle und ich weiß net wo es her kommt.

Kann mal bitte wer über mein zusammengeschustertes Programm drüberschauen? Danke



define ds port[10]
define shclk port[9]
define stclk port[12]

define cmd byte[3]
define i byte[2]
define LCDLight Bit[192]

define LCD_RS_0 &B10 : define LCD_RS_1 &B11 :define LCD_nowrite &B0
define prnLCD &h197
define PCFread &h10e
define PCFwrite &h101
define PCF 64

define wert byte[1]' Byte zum Zwischenspeichern der
define P0 Bit[1]   ' Portzustände. Es kann jedes
define P1 Bit[2]   ' beliebige Byte vom RAM gewählt
define P2 Bit[3]   ' werden.
define P3 Bit[4]
define P4 Bit[5]
define P5 Bit[6]
define P6 Bit[7]
define P7 Bit[8]

'ASCII
Define A_ &H41 : Define B_ &H42 : Define C_ &H43 : Define D_ &H44 : Define E_ &H45
Define F_ &H46 : Define G_ &H47 : Define H_ &H48 : Define I_ &H49 : Define J_ &H4A
Define K_ &H4B : Define L_ &H4C : Define M_ &H4D : Define N_ &H4E : Define O_ &H4F
Define P_ &H50 : Define Q_ &H51 : Define R_ &H52 : Define S_ &H53 : Define T_ &H54
Define U_ &H55 : Define V_ &H56 : Define W_ &H57 : Define X_ &H58 : Define Y_ &H59 : Define Z_ &H5A
Define ak &H61 : Define bk &H62 : Define ck &H63 : Define dk &H64 : Define ek &H65
Define fk &H66 : Define gk &H67 : Define hk &H68 : Define ik &H69 : Define jk &H6A
Define kk &H6B : Define lk &H6C : Define mk &H6D : Define nk &H6E : Define ok &H6F
Define pk &H70 : Define qk &H71 : Define rk &H72 : Define sk &H73 : Define tk &H74
Define uk &H75 : Define vk &H76 : Define wk &H77 : Define xk &H78 : Define yk &H79 : Define zk &H7A
Define SPACE &H20 : Define MINUS &H2D : Define GLEICH &H3D : Define DPP &H3A
Define Dot &H2E
Define Line1 &H80 : Define Line2 &HC0  'Für 2x20 LCD
'Define Line1 &H80 : Define Line2 &HC0 : Define Line3 &H90 : Define Line4 &HD0 'Für 4x16 LCD
'-----------------------------------------

define Temp2 ad[6] 'Tempsensor 2
define sck port[3]
define dataout port[4]


define f1 word [8]               'eingefügt
define ts word [9]
define shtvalue word [10]
define xy word [11]
define cme byte [4]
define k byte [5]
define j byte [6]
define test1 byte [7]
define test2 byte [8]
define test3 byte [9]
define test4 byte [10]


'----------------------------------------
gosub LCD_Init
LCDLight=ON : gosub setPCFLight
#loop

'-----------------------------------------
gosub sht11


'-----------------------------------------
gosub LCD_CLS

cmd=hour : gosub LCD_Zahl2null
cmd=DPP : gosub LCD_Char
cmd=minute : gosub LCD_Zahl2null
cmd=DPP : gosub LCD_Char
cmd=second : gosub LCD_Zahl2null
cmd=space : gosub LCD_Char
cmd=space : gosub LCD_Char
cmd=space : gosub LCD_Char
cmd=space : gosub LCD_Char
sys prnLCD,LCDLight,0,PCF : print "T1=";
cmd=test3 : gosub LCD_zahl2
sys prnLCD,LCDLight,0,PCF : print ",":
cmd=test4 : gosub LCD_zahl2null

cmd=Line2 : gosub LCD_CMD
cmd=day : gosub LCD_Zahl2null
cmd=Dot : gosub LCD_Char
cmd=month : gosub LCD_Zahl2null
sys prnLCD,LCDLight,0,PCF : print ".20";
cmd=year : gosub LCD_Zahl2null
cmd=space : gosub LCD_Char
cmd=space : gosub LCD_Char
sys prnLCD,LCDLight,0,PCF : print "LF=";
cmd=test1 : gosub LCD_zahl2
sys prnLCD,LCDLight,0,PCF : print ",":
cmd=test2 : gosub LCD_zahl2null

pause 45

gosub LCD_CLS
cmd=hour : gosub LCD_Zahl2null
cmd=DPP : gosub LCD_Char
cmd=minute : gosub LCD_Zahl2null
cmd=DPP : gosub LCD_Char
cmd=second : gosub LCD_Zahl2null
cmd=space : gosub LCD_Char
cmd=space : gosub LCD_Char
cmd=space : gosub LCD_Char
cmd=space : gosub LCD_Char
sys prnLCD,LCDLight,0,PCF : print "T1=";
cmd=test3 : gosub LCD_zahl2
sys prnLCD,LCDLight,0,PCF : print ",":
cmd=test4 : gosub LCD_zahl2null

cmd=Line2 : gosub LCD_CMD
cmd=day : gosub LCD_Zahl2null
cmd=Dot : gosub LCD_Char
cmd=month : gosub LCD_Zahl2null
sys prnLCD,LCDLight,0,PCF : print ".20";
cmd=year : gosub LCD_Zahl2null
cmd=space : gosub LCD_Char
cmd=space : gosub LCD_Char
sys prnLCD,LCDLight,0,PCF : print "LF=":
cmd=test1 : gosub LCD_zahl2
sys prnLCD,LCDLight,0,PCF : print ",":
cmd=test2 : gosub LCD_zahl2null

pause 45
goto loop


'-----------------------es folgt eingefügtes
#sht11
Cme = &B00000011        'temp
gosub Getit
shtvalue=shtvalue-4000
  test3 = shtvalue/100
  test4 = shtvalue mod 100    


Cme = &B00000101        'hyg
gosub Getit
ts = shtvalue / 16
k = shtvalue Mod 16
looktab shtab,ts,xy
ts=ts-1
looktab shtab,ts,f1
xy = (xy - f1) * k /16
shtvalue=f1 + xy
if shtvalue>=1000 then shtvalue=999
test1 = shtvalue/10
test2 = shtvalue mod 10    
return

#getit
'first reset comm.
sck=0
Dataout=1
For k = 1 To 12
   Sck=1
   gosub wait
   Sck=0
   gosub wait
Next
'start sequence
sck=1
gosub wait
Dataout=0
gosub wait
Sck=0
gosub wait
Sck=1
gosub wait
Dataout=1
gosub wait
Sck=0
gosub wait
'Shiftout command
for k=0 to 7
  if (cme and 128)=0 then dataout=0 else dataout=1
  sck=1
  gosub wait
  sck=0
  gosub wait
  cme=cme shl 1
next

deact dataout
sck=1
gosub wait
Sck=0
gosub wait

#bitwait
if dataout<>0 then goto bitwait

'Shiftin data MSB
gosub shiftin
shtvalue = xy

Dataout=0
'ack
Sck=1
gosub wait
Sck=0
gosub wait

deact dataout

'Shiftin Data LSB
gosub shiftin
shtvalue=shtvalue shl 8
shtvalue = shtvalue Or xy
return

#shiftin
xy=0
for k=0 to 7
    sck=1
    gosub wait
    j=abs(dataout)
    sck=0
    gosub wait
    xy=xy shl 1
    xy=xy or j
next
return


#wait
return


table shtab "sht.tab"

'----PCF8574-Aufrufe-------------------------
define pop DA[1] 'Trick zum auslesen des Stacks(siehe ccintern.dharlos.de)
'Byte zum PCF8574 senden:
sys PCFwrite,wert,PCF

'Byte vom PCF8574 lesen:
sys PCFread,PCF+1 'Leseadresse=65
wert=pop

'Einzelport am PCF8574 setzen:
sys PCFread,PCF+1
wert=pop
P2 = off 'z.B P2 am PCF8574 auf Low setzen
sys PCFwrite,wert,PCF

'Einzelport am PCF8574 umschalten(toggle):
sys PCFread,PCF+1
wert=pop
P0 = not P0 'z.B P0 am PCF8574 togglen
sys PCFwrite,wert,PCF



'----LCD-Funktionen--------------------------
'Zahlausgaben
#LCD_Zahl3 ' 3 stellige Zahl ausgeben
if cmd > 99 then sys &h124,LCDLight,(cmd/100)+&h30,PCF else sys &h124,LCDLight,&h20,PCF
#LCD_Zahl2 ' 2 stellige Zahl ausgeben
if cmd > 9 then sys &h124,LCDLight,((cmd/10) mod 10)+&h30,PCF else sys &h124,LCDLight,&h20,PCF
#LCD_Zahl1 '1 stellige Zahl ausgeben
sys &h124,LCDLight,(cmd mod 10)+&h30,PCF


return
#LCD_Zahl3null ' 3 stellige Zahl ausgeben mit führender Nullen z.B.: 025 od. 005
sys &h124,LCDLight,(cmd/100)+&h30,PCF
#LCD_Zahl2null ' 2 stellige Zahl ausgeben mit führender Null z.B.: 05
sys &h124,LCDLight,((cmd/10) mod 10)+&h30,PCF
goto LCD_Zahl1


#LCD_CLS
sys &h12e,LCDLight,&b00000001,PCF
return
#LCD_CMD
sys &h12e,LCDLight,cmd,PCF
return
#LCD_Char
sys &h124,LCDLight,cmd,PCF
return
#LCD_Init
sys &h142,0,PCF
sys &h12e,0,&b00111000,PCF
sys &h138,0,&b00100000,PCF
sys &h12e,0,&b00101000,PCF
sys &h12e,0,&b00001110,PCF
sys &h12e,0,&b00000001,PCF
sys &h12e,0,&b00000110,PCF
return
#setPCFLight
sys &h142,LCDLight,0,PCF
return

'syscode "pcflcd_pcf.s19"'


achja für alternative Lösungsvorschläge bzw. Verbesserungen, wäre ich natürlich super dankbar.

MfG

Andi

 Antwort schreiben

Bisherige Antworten:

Re: LCD probleme (Software) (von Andreas - 7.02.2006 16:08)
Re: LCD probleme (Software) (von André H. - 6.02.2006 12:30)
Re: LCD probleme (Software) Teil 1 (von ManfredW - 5.02.2006 22:06)
Re: LCD probleme (Software) (von ManfredW - 5.02.2006 21:33)
Re: LCD probleme (Software) (von Achim - 5.02.2006 20:17)