Olá, recebi como tarefa de meu curso técnico desenvolver uma balança com o microcontrolador 8051. A balança vai de 0 kg até 150 kg e enviará o valor da massa para o porto P3 do microcontrolador. O problema é que o porto P3 receberá o valor em binário e para realizar a regra de três para obter uma massa e enviá-la para o display, preciso dos valores em decimal e eu não sei como realizar essa conversão. Vejam o que já consegui:
//Balanca
#include <8052.h>
#define display P2
#define RS P0_2
#define RW P0_1
#define EN P0_0
#define Delay 200
#define NumCol 15
#define Linha1 0x80
#define Linha2 0xC0
#define MSG1 0
#define MSG2 1
#define Grau_C 0x00
#define Seta_E 0x01
#define Seta_D 0x02
#define Seta_C 0x03
#define Seta_B 0x04
#define Grau_F 0x05
#define massa P3
unsigned long x;
unsigned long y;
unsigned char mint, resto, mdec;
unsigned char Tab_Conf[5] = {0x38, //Display matriz 7x5 e 8 bits
0x0E, //Habilita cursor
0x06, //Deslocando para a direita
0x01, //Limpa display
0x0C}; //Desliga cursor
void Disp_8bits (void)
{
for (y=0; y<=4; y++)
{
display = Tab_Conf[y];
RS = 0;
RW = 0;
EN = 1;
for (x=0; x<=Delay; x++);
EN = 0;
}
}
void Posi_Char (unsigned char Position)
{
display = Position;
RS = 0;
RW = 0;
EN = 1;
for (x=0; x<=Delay; x++);
EN = 0;
}
void Escreve_Char (unsigned char Num_CGRAM)
{
display = Num_CGRAM;
RS = 1;
RW = 0;
EN = 1;
for (x=0; x<=Delay; x++);
EN = 0;
}
void Escreve_Frase (unsigned char Local)
{
unsigned char Message[2][16] = {" BALANCA ",
" , kg "};
for (y=0; y<=NumCol; y++)
{
display = Message[Local][y];
RS = 1;
RW = 0;
EN = 1;
for (x=0; x<=Delay; x++);
EN = 0;
}
}
void main (void)
{
TMOD = 0x11;
Disp_8bits ( );
Posi_Char (Linha1);
Escreve_Frase (MSG1 );
Posi_Char (Linha2);
Escreve_Frase (MSG2);
while(1)
{ mint=(massa*150)/255;
resto=(massa*150)%255;
mdec=(resto*100)/255;
Posi_Char (Linha2+1);
Escreve_Char (mint + 0x30);
Posi_Char (Linha2+5);
Escreve_Char (mdec + 0x30);
}
}