
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
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 |