PDU-Mode Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
|
|
|
BID = 534823
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
|
Hallo liebe Forengemeinde
Ich habe folgendes Problem:
Um eine SMS zu versenden benötige ich den PDU-Mode. Leider habe ich mit sehr viel Zeitaufwand in die falsche Richtung programmiert
Nun komme ich leider nicht mehr weiter.
Der PDU-Mode ist wie folgt aufgebaut:
Nehmen wir an, dass im Text der SMS "hello" steht, dann müssten in der Länge der Nutzdaten 05H stehen und als 7-Bit codierter Text
E8329BFD06
stehen. Nun wie sind die Daten in diesen 5 Byte codiert ? Schreiben wir mall alle 5 Zeichen des Wortes "hello" als 7-bit Repräsentation mit einer Bit-Folge
1101000 1100101 1101100 1101100 1101111
Da diese Bit-Folge beginnend beim ersten Zeichen "h" und dem kleinsten Bit (MSB first) beginnend übertragen wird müssen wir diese Bit-Folge in ihrer Reihenfolge der Aussendung umformen (jedes einzelne Zeichen umdrehen)
0001011 1010011 0011011 0011011 1111011
Ordnen wir nun die 7-Bit als 8-Bit Folge und füllen die restlichen Bits mit 0 auf
00010111 01001100 11011001 10111111 01100000
Die Übergabe der Daten erfolgt nun wieder als 8-Bit Normaldarstellung (LSB first)
11101000 00110010 10011011 11111101 00000110
und schreiben dies als HEX-Darstellung, so erhalten wir den Zeichenstring zur Übergabe
E8 32 9B FD 06
Bislang habe ich folgender Programmcode:
Code : |
include "Headerfiles.h"
unsigned char *ZText;
unsigned char Textleer1[]=" ""[1code]
include "Headerfiles.h"
unsigned char *ZText;
unsigned char Textleer1[]=" ""\0"; //Zeile löschen
uint8_t i,y;
uint8_t z;
unsigned char Nummer[]="43647364763476";
unsigned char Text[]="AB";
unsigned char Textbin[sizeof(Text)*8];
unsigned char Strausgabe[sizeof(Text)*2];;
unsigned char *strtext;
unsigned char *strin;
unsigned char *strout;
unsigned char *strbin;
static unsigned char *dual(unsigned char arg, unsigned char *puffer)
{
for(i=0;i<8;i++,arg <<= 1)
{
*puffer = (arg&0x80 ? '1' : '0');
puffer--;
if(i==0)
{
puffer++;
}
}
return puffer;
}
unsigned char* PDU()
{
strin=(unsigned char*)Text;
strout=(unsigned char*)Textbin;
unsigned char *strret=strout;
z=0;
ZText=strin; //Übergabe des Textes
lcd_text(0x00);
warten(1);
while(*strin)
{
strout=dual(*strin, strout);
strin++;
if(z<8)
{
z++;
}
if(z==8)
{
z=0;
}
};
ZText=strret; //Übergabe des Textes
lcd_text(0x00);
warten(3);
for(i=0;i<z;i++,strout++)
{
*strout='0';
}
strbin=strout;
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x00);
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=strbin; //Übergabe des Textes
lcd_text(0x40);
warten(3);
unsigned int zahl=0;
y=0;
while(*strbin)
{
for(i=0;i<4;i++,strbin++)
{
if(*strbin=='1')
{
if(i==0)
{
zahl+=8;
}
if(i==1)
{
zahl+=4;
}
if(i==2)
{
zahl+=2;
}
if(i==3)
{
zahl+=1;
}
}
}
if(zahl<10)
{
Strausgabe[y]=(unsigned char)zahl+48;
}
else
{
if(zahl==10)
{
Strausgabe[y]='A';
}
if(zahl==11)
{
Strausgabe[y]='B';
}
if(zahl==12)
{
Strausgabe[y]='C';
}
if(zahl==13)
{
Strausgabe[y]='D';
}
if(zahl==14)
{
Strausgabe[y]='E';
}
if(zahl==15)
{
Strausgabe[y]='F';
}
}
Strausgabe[y+1]='\0';
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=(unsigned char*)Strausgabe; //Übergabe des Textes
lcd_text(0x40);
y++;
zahl=0;
}
warten(1);
};
[/code1]"; //Zeile löschen
uint8_t i,y;
uint8_t z;
unsigned char Nummer[]="43647364763476";
unsigned char Text[]="AB";
unsigned char Textbin[sizeof(Text)*8];
unsigned char Strausgabe[sizeof(Text)*2];;
unsigned char *strtext;
unsigned char *strin;
unsigned char *strout;
unsigned char *strbin;
static unsigned char *dual(unsigned char arg, unsigned char *puffer)
{
for(i=0;i<8;i++,arg <<= 1)
{
*puffer = (arg&0x80 ? '1' : '0');
puffer--;
if(i==0)
{
puffer++;
}
}
return puffer;
}
unsigned char* PDU()
{
strin=(unsigned char*)Text;
strout=(unsigned char*)Textbin;
unsigned char *strret=strout;
z=0;
ZText=strin; //Übergabe des Textes
lcd_text(0x00);
warten(1);
while(*strin)
{
strout=dual(*strin, strout);
strin++;
if(z<8)
{
z++;
}
if(z==8)
{
z=0;
}
};
ZText=strret; //Übergabe des Textes
lcd_text(0x00);
warten(3);
for(i=0;i<z;i++,strout++)
{
*strout='0';
}
strbin=strout;
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x00);
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=strbin; //Übergabe des Textes
lcd_text(0x40);
warten(3);
unsigned int zahl=0;
y=0;
while(*strbin)
{
for(i=0;i<4;i++,strbin++)
{
if(*strbin=='1')
{
if(i==0)
{
zahl+=8;
}
if(i==1)
{
zahl+=4;
}
if(i==2)
{
zahl+=2;
}
if(i==3)
{
zahl+=1;
}
}
}
if(zahl<10)
{
Strausgabe[y]=(unsigned char)zahl+48;
}
else
{
if(zahl==10)
{
Strausgabe[y]='A';
}
if(zahl==11)
{
Strausgabe[y]='B';
}
if(zahl==12)
{
Strausgabe[y]='C';
}
if(zahl==13)
{
Strausgabe[y]='D';
}
if(zahl==14)
{
Strausgabe[y]='E';
}
if(zahl==15)
{
Strausgabe[y]='F';
}
}
Strausgabe[y+1]='[1code]
include "Headerfiles.h"
unsigned char *ZText;
unsigned char Textleer1[]=" ""\0"; //Zeile löschen
uint8_t i,y;
uint8_t z;
unsigned char Nummer[]="43647364763476";
unsigned char Text[]="AB";
unsigned char Textbin[sizeof(Text)*8];
unsigned char Strausgabe[sizeof(Text)*2];;
unsigned char *strtext;
unsigned char *strin;
unsigned char *strout;
unsigned char *strbin;
static unsigned char *dual(unsigned char arg, unsigned char *puffer)
{
for(i=0;i<8;i++,arg <<= 1)
{
*puffer = (arg&0x80 ? '1' : '0');
puffer--;
if(i==0)
{
puffer++;
}
}
return puffer;
}
unsigned char* PDU()
{
strin=(unsigned char*)Text;
strout=(unsigned char*)Textbin;
unsigned char *strret=strout;
z=0;
ZText=strin; //Übergabe des Textes
lcd_text(0x00);
warten(1);
while(*strin)
{
strout=dual(*strin, strout);
strin++;
if(z<8)
{
z++;
}
if(z==8)
{
z=0;
}
};
ZText=strret; //Übergabe des Textes
lcd_text(0x00);
warten(3);
for(i=0;i<z;i++,strout++)
{
*strout='0';
}
strbin=strout;
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x00);
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=strbin; //Übergabe des Textes
lcd_text(0x40);
warten(3);
unsigned int zahl=0;
y=0;
while(*strbin)
{
for(i=0;i<4;i++,strbin++)
{
if(*strbin=='1')
{
if(i==0)
{
zahl+=8;
}
if(i==1)
{
zahl+=4;
}
if(i==2)
{
zahl+=2;
}
if(i==3)
{
zahl+=1;
}
}
}
if(zahl<10)
{
Strausgabe[y]=(unsigned char)zahl+48;
}
else
{
if(zahl==10)
{
Strausgabe[y]='A';
}
if(zahl==11)
{
Strausgabe[y]='B';
}
if(zahl==12)
{
Strausgabe[y]='C';
}
if(zahl==13)
{
Strausgabe[y]='D';
}
if(zahl==14)
{
Strausgabe[y]='E';
}
if(zahl==15)
{
Strausgabe[y]='F';
}
}
Strausgabe[y+1]='\0';
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=(unsigned char*)Strausgabe; //Übergabe des Textes
lcd_text(0x40);
y++;
zahl=0;
}
warten(1);
};
[/code1]';
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=(unsigned char*)Strausgabe; //Übergabe des Textes
lcd_text(0x40);
y++;
zahl=0;
}
warten(1);
};
|
|
Das mit der Binär in eine Zahl und dann in Hex umwandeln funktioniert.
Leider bin ich nicht so Erfahren in C programmieren.
Das Problem besteht darin die einzelnen Binären 8 Bit umwandeln zusammensetzen und wieder ausseinandersplitten um wieder das ganze zusammenzusetzen.
Bin schon am verzweifeln
Mfg
Rambodischien
|
|
BID = 534825
cholertinu Inventar
Beiträge: 3755 Wohnort: CH
|
|
Zitat :
Rambodischien hat am 16 Jul 2008 10:32 geschrieben :
|
und dem kleinsten Bit (MSB first)
|
was verwechselt? MSB |
|
BID = 534827
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Die Beschreibung ist nicht von mir die habe ich aus dem Internet.
Mfg
Rambodischien
|
BID = 534889
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Habe eine andere Lösung gefunden.
Jetzt stoße ich auf folgendes Problem.
Ich will einen Zeiger an die letzte Stelle verweisen und danach mit *pointer-- bis an die letzte Stelle gehen.
Meine Frage: Wie kann ich den pointer auf die letze Stelle eines Feldes verweisen?
Mfg
Rambodischien
|
BID = 534894
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Ich habe jetzt einen Code von 2141 und der sollte aber 4121 lauten.
Wie kann ich das am einfachsten realisieren?
Ich habe es schon so probiert aber leider kein Erfolg.
In dem unsigned char Strausgabe steht 2141.
uint8_t z=1;
uint8_t i;
for(i=sizeof(Strausgabe)-1;i>0;i=i-2)
{
Strausgabe1[z-1]=Strausgabe[i-1];
Strausgabe1[z]=Strausgabe[i];
z=z+2;
}
|
BID = 534925
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hallo Rambodieschen,
Zitat :
|
Leider bin ich nicht so Erfahren in C programmieren.
|
Dann, nimms mir nicht übel, mache doch erstmal was anderes.
Du machst hier Klimmzüge, die nicht nötig wären.
Schon allein die Tatsache, die Bytes erstmal in einen 8 Byte langen String aus Nullen und Einsen umzurechnen kostet Zeit und Speicher. Dann diesen, ich nenne es mal Binärstring wieder zu zerteilen, in Hex umzurechnen etc. ist völlig fehl am Platze, da es wiederum Zeit und Speicher verbraucht. Speicher deshalb, weil du von anfang an einen Puffer reservieren musst - dynamisch holt man sich auf µControllern i.d.R. keinen Speicher.
Bedenke folgendes: 7 Bytes nehmen in dieser Kodierung nur noch 8 Bytes ein, klar.
Das kann man mit 15 Byte Puffer und ein paar Schiebeoperationen erledigen, ohne komplexe Umrechnungen vorzunehmen. Allein die Tatsache, dass in deinem Quelltext noch
Zitat :
|
[...]
{
if(zahl==10)
{
Strausgabe[y]='A';
}
if(zahl==11)
{
Strausgabe[y]='B';
}
if(zahl==12)
{
Strausgabe[y]='C';
}
if(zahl==13)
{
Strausgabe[y]='D';
}
if(zahl==14)
{
Strausgabe[y]='E';
}
if(zahl==15)
{
Strausgabe[y]='F';
}
[...]
|
vorhanden ist, lässt für mich den Schluss übrig, dass die ganze Sitzung in dem Thread, in dem ich viel geschrieben habe, dir nicht viel gebracht hat. Es treten immernoch solche Sachen
Zitat :
| Ich will einen Zeiger an die letzte Stelle verweisen und danach mit *pointer-- bis an die letzte Stelle gehen. |
ein, die keinen Sinn ergeben, wir erinnern uns: *pointer greift durch Dereferenzierung auf den Inhalt, auf den der Zeiger zeigt, zu. Es wird behandelt, wie der Datentyp, auf den der Zeiger zeigt; in diesem Fall müsste es schlicht pointer-- heißen.
Also, überdenk' das nochmals - mach erstmal einfachere Sachen, und du wirst merken, wie einfach man auch dieses, mit "reinen Binärdaten" und Operationen auf Bitebene machen kann; ohne Rechnungen mit ASCII-Zeichen .
Edit: OK, ich rudere etwas zurück: Es wird in deinem Modus tatsächlich sehr merkwürdig kodiert. Eine Umrechnung ist also doch nötig, aber trotzdem einfacher mit Bitoperationen zu erledigen. Eine Routine, die die Bits in einem Char umdreht ist recht einfach aufzubauen.
_________________
[ Diese Nachricht wurde geändert von: DonComi am 16 Jul 2008 20:33 ]
|
BID = 534942
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Tut mir leid ich weiß es ist ein großes Projekt, aber ich brauche das für die Schule.
Leider hatten wir in der Schule nie C-Programmiert deshalb muss es so gehen. Im Moment möchte ich nur die Sache zum laufen bringen.
Das mit dem pointer-- ist klar habe mich verschrieben (bin ein bisschen durcheinander ).
Wieso funktionert der Code nicht:
Zitat :
|
Ich habe jetzt einen Code von 2141 und der sollte aber 4121 lauten.
Wie kann ich das am einfachsten realisieren?
Ich habe es schon so probiert aber leider kein Erfolg.
In dem unsigned char Strausgabe steht 2141.
uint8_t z=1;
uint8_t i;
for(i=sizeof(Strausgabe)-1;i>0;i=i-2)
{
Strausgabe1[z-1]=Strausgabe[i-1];
Strausgabe1[z]=Strausgabe[i];
z=z+2;
}
|
Mfg
Rambodischien
|
BID = 534951
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Habe einen Fehler gefunden ich muss anstatt uint8_t i muss ich int i verwenden. Leider funktioniert das mit dem sizeof(Strausgabe) nicht.
Hat einer eine Idee warum das nicht funktioniert?
Mfg
Rambodischien
|
BID = 535069
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hallo Ramdodieschen,
Ich habe mir nochmals Gedanken gemacht.
Also, was du brauchst sind folgende Module:
1. Eine Routine, die die Bits umsortiert, und zwar wird das LSB das MSB. Dabei ist die Information, die nach dem Umsortieren der Bits an der 0. Stelle steht unwichtig. Dort wandert ja später das 7. Bit des zweiten Zeichens rein. Also, Erster Schritt: alle Bits umsortieren, quasi das Byte auf Bitebene spiegeln. Dazu habe ich mal eine Funktion hingekritzelt, die sicherlich noch erweiterbar wäre; sie soll aber ja nur das Prinzip darstellen.
uint8_t swapbits(uint8_t datain)
{
uint8_t tmp=0;
uint8_t i,j;
for(i=0, j=7;i<8;i++, j--){
if( datain & (1<<i)) tmp |= 1<<j;
};
return tmp;
};
Man sieht zwei Iteratoren, einer beginnt beim LSB, der andere beim MSB. Man kanns mit C noch wesentlich schöner kodieren, muss aber nicht immer sein .
Z.B. wäre es denkbar, das alles auf Zeiger umzuschreiben, da du viel Zeigerarithmetik verwenden musst. (auch um Speicher zu sparen -> die einmal umgedrehten Bytes können sogar an der gleichen Stelle gespeichert werden, wo sie vorher waren).
Versuche mal, den Kode zu kommentieren.
2. Ein Modul, welches auf Zeigerebene die Bits umkopiert, und zwar in den durch die neue Kodierung mit 7 Bits freiwerdenden Bereich des jeweils vorderen Bytes. Dazu mache ich mir evtl. später Gedanken. In Assembler hätte ich gleich eine Idee (Schibeoperation mit Carry).
3. Ein Modul, was die nun neuenstandenen Bytes in Hexadezimaldarstellung umrechnet - dieses Modul habe ich dir schon erstellt (im anderen Thread zum Thema).
Viel Erfolg, ich mache mir weiterhin ein paar Gedanken!
_________________
[ Diese Nachricht wurde geändert von: DonComi am 17 Jul 2008 14:55 ]
|
BID = 535114
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hab mal nachgedacht: man kann die Vertauschung der Bits und das Kopieren in den 7-Bit-Kode in einem Rutsch erledigen.
_________________
|
BID = 535148
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Ich möchte mich hiermit mich bei DonComi herzlich bedanken für die stahlseildicke Nerven und die Geduld.
DankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDankeDanke
Habe jetzt einen Code der Funktioniert. Nun bedarf es einigen Verbesserungen um weniger Speicher zu verbraten.
Hier einmal der Code:
Code : |
#include "Headerfiles.h"
unsigned char *ZText;
unsigned char Textleer1[]=" ""[1code]
#include "Headerfiles.h"
unsigned char *ZText;
unsigned char Textleer1[]=" ""\0"; //Zeile löschen
int i;
uint8_t y;
uint8_t z;
uint8_t x;
uint8_t nullen;
unsigned char *strin;
unsigned char *strout;
unsigned char *strbin;
static unsigned char *dual(unsigned char arg, unsigned char *puffer)
{
for(i=0;i<8;i++,arg <<= 1)
{
//*puffer = (arg&0x80 ? '1' : '0');
if(arg&0x80)
{
*puffer='1';
}
else
{
*puffer='0';
}
puffer++;
if(i==0)
{
puffer--;
}
}
return puffer;
}
unsigned char* PDU()
{
unsigned char Text[]="AB";
unsigned char Textbin[(sizeof(Text)-1)*8];
unsigned char Strausgabe[(sizeof(Text)-1)*2];
unsigned char Strausgabe1[(sizeof(Text)-1)*2];
strin=strrev((unsigned char*)Text);
strout=(unsigned char*)Textbin;
strbin=strout;
z=0;
nullen=0;
for(i=0;i<sizeof(Text)-1;i++)
{
if(z<8)
{
z++;
}
if(z==8)
{
z=0;
nullen=nullen+2;
}
}
for(i=0;i<z;i++,strout++)
{
*strout='0';
}
while(*strin)
{
strout=dual(*strin, strout);
strin++;
};
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=strbin; //Übergabe des Textes
lcd_text(0x40);
warten(2);
uint8_t zahl=0;
y=0;
while(*strbin)
{
for(i=0;(i<4)&&*strbin;i++,strbin++)
{
if(*strbin=='1')
{
zahl+=1<<(3-i);
}
}
if((zahl&=0xF)<0xA)
{
Strausgabe[y]=zahl+'0';
}
else
{
Strausgabe[y]=zahl+'A'-0xA;
}
y++;
zahl=0;
}
x=1;
i=0;
for(i=sizeof(Strausgabe1)-(1+nullen);i>0;i-=2)
{
Strausgabe1[x-1]=Strausgabe[i-1];
Strausgabe1[x]=Strausgabe[i];
x=x+2;
}
Strausgabe1[x-1]='\0';
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x00);
ZText=(unsigned char*)Strausgabe1; //Übergabe des Textes
lcd_text(0x00);
warten(1);
};
[/code1]"; //Zeile löschen
int i;
uint8_t y;
uint8_t z;
uint8_t x;
uint8_t nullen;
unsigned char *strin;
unsigned char *strout;
unsigned char *strbin;
static unsigned char *dual(unsigned char arg, unsigned char *puffer)
{
for(i=0;i<8;i++,arg <<= 1)
{
//*puffer = (arg&0x80 ? '1' : '0');
if(arg&0x80)
{
*puffer='1';
}
else
{
*puffer='0';
}
puffer++;
if(i==0)
{
puffer--;
}
}
return puffer;
}
unsigned char* PDU()
{
unsigned char Text[]="AB";
unsigned char Textbin[(sizeof(Text)-1)*8];
unsigned char Strausgabe[(sizeof(Text)-1)*2];
unsigned char Strausgabe1[(sizeof(Text)-1)*2];
strin=strrev((unsigned char*)Text);
strout=(unsigned char*)Textbin;
strbin=strout;
z=0;
nullen=0;
for(i=0;i<sizeof(Text)-1;i++)
{
if(z<8)
{
z++;
}
if(z==8)
{
z=0;
nullen=nullen+2;
}
}
for(i=0;i<z;i++,strout++)
{
*strout='0';
}
while(*strin)
{
strout=dual(*strin, strout);
strin++;
};
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=strbin; //Übergabe des Textes
lcd_text(0x40);
warten(2);
uint8_t zahl=0;
y=0;
while(*strbin)
{
for(i=0;(i<4)&&*strbin;i++,strbin++)
{
if(*strbin=='1')
{
zahl+=1<<(3-i);
}
}
if((zahl&=0xF)<0xA)
{
Strausgabe[y]=zahl+'0';
}
else
{
Strausgabe[y]=zahl+'A'-0xA;
}
y++;
zahl=0;
}
x=1;
i=0;
for(i=sizeof(Strausgabe1)-(1+nullen);i>0;i-=2)
{
Strausgabe1[x-1]=Strausgabe[i-1];
Strausgabe1[x]=Strausgabe[i];
x=x+2;
}
Strausgabe1[x-1]='[1code]
#include "Headerfiles.h"
unsigned char *ZText;
unsigned char Textleer1[]=" ""\0"; //Zeile löschen
int i;
uint8_t y;
uint8_t z;
uint8_t x;
uint8_t nullen;
unsigned char *strin;
unsigned char *strout;
unsigned char *strbin;
static unsigned char *dual(unsigned char arg, unsigned char *puffer)
{
for(i=0;i<8;i++,arg <<= 1)
{
//*puffer = (arg&0x80 ? '1' : '0');
if(arg&0x80)
{
*puffer='1';
}
else
{
*puffer='0';
}
puffer++;
if(i==0)
{
puffer--;
}
}
return puffer;
}
unsigned char* PDU()
{
unsigned char Text[]="AB";
unsigned char Textbin[(sizeof(Text)-1)*8];
unsigned char Strausgabe[(sizeof(Text)-1)*2];
unsigned char Strausgabe1[(sizeof(Text)-1)*2];
strin=strrev((unsigned char*)Text);
strout=(unsigned char*)Textbin;
strbin=strout;
z=0;
nullen=0;
for(i=0;i<sizeof(Text)-1;i++)
{
if(z<8)
{
z++;
}
if(z==8)
{
z=0;
nullen=nullen+2;
}
}
for(i=0;i<z;i++,strout++)
{
*strout='0';
}
while(*strin)
{
strout=dual(*strin, strout);
strin++;
};
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x40);
ZText=strbin; //Übergabe des Textes
lcd_text(0x40);
warten(2);
uint8_t zahl=0;
y=0;
while(*strbin)
{
for(i=0;(i<4)&&*strbin;i++,strbin++)
{
if(*strbin=='1')
{
zahl+=1<<(3-i);
}
}
if((zahl&=0xF)<0xA)
{
Strausgabe[y]=zahl+'0';
}
else
{
Strausgabe[y]=zahl+'A'-0xA;
}
y++;
zahl=0;
}
x=1;
i=0;
for(i=sizeof(Strausgabe1)-(1+nullen);i>0;i-=2)
{
Strausgabe1[x-1]=Strausgabe[i-1];
Strausgabe1[x]=Strausgabe[i];
x=x+2;
}
Strausgabe1[x-1]='\0';
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x00);
ZText=(unsigned char*)Strausgabe1; //Übergabe des Textes
lcd_text(0x00);
warten(1);
};
[/code1]';
ZText=(unsigned char*)Textleer1; //Übergabe des Textes
lcd_text(0x00);
ZText=(unsigned char*)Strausgabe1; //Übergabe des Textes
lcd_text(0x00);
warten(1);
};
|
|
Ist nicht der beste Code aber er funktioniert wenigstens.
Das mit dem Drehen der Zahlen muss ich mir einmal genauer Anschauen.
P.S.: Ich bin für andere Vorschläge und Verbesserungen (fast) immer offen
Mfg
Rambodischien
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 182400285 Heute : 57 Gestern : 7426 Online : 554 26.11.2024 0:23 4 Besucher in den letzten 60 Sekunden alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0640480518341
|