Problema simple en lenguaje C para que una microcomputadora de un solo chip implemente una calculadora de suma de un solo dígito
Tu problema debería deberse a un procesamiento imperfecto del teclado. Intente modificarlo un poco.
#include lt;reg52.hgt;
#define uchar unsigned char
#define unidad unsigned int
#define OPdata P0 //Puerto de datos de decenas
#define OPdata1 P1//Puerto de datos de unidades
sbit se0=P3^6 //Selección de decenas
sbit se1=P3; ^7; //Selección del dígito de las unidades
sbit Q=P2^6;
sbit W=P2^5;
sbit E=P2 ^4;
uchar cis; //Número de pulsaciones del teclado
uchar jia1; //Suplemento 1
uchar jia2; //Suplemento 2
uchar z; //Número de transferencia
uchar shi; //Diez dígitos
uchar ge; //Un solo dígito
uchar s;
uchar j; //Resultado de decodificación
uchar sum; //Resultado de adición
uchar keytemp;
void Judge(uchar m ) //Decodificación de tubo de imagen digital
{
interruptor (m)
{
caso 0: s=0x3F;
caso 1: s=0x06;
caso 2: s=0x5B;
caso 3: s=0x4F; p>
caso 4: s=0x66;
caso 5: s=0x6D;
caso 6: s =0x7D;
caso 7: s=0x07;
caso 8: s=0x7F;
caso 9: s=0x6F ; > }
}
void Judge1(uchar h) //Decodificación de tubo de imagen digital de diez dígitos
{ p>
interruptor (h )
{
caso 0: j=0x3F; descanso
caso 1: j=0x06; /p>
}
anular juezcis()
{
if (cis==1) p>
{ p>
jia1=z;
ge=z;
shi=0;
}
si (cis ==2)
{
jia2=z;
ge=z
shi =0;
<; p> cis=0;}
}
void jiafa(uchar m, uchar n) //adición
{
suma=m n;
if (sumgt;=10)
{
ge=sum -10; p>shi=1;
}
else
{
ge=suma
shi=0
}
}
void main()
{
cis=0
jia1=0
jia2=; 0;
shi=0;
ge=0;
s=0;
P2=0XFF;
se0=0; //Activa el dígito de las decenas
se1=0; //Activa el dígito de las unidades
OPdata=0x3f; //Dígito de las decenas
OPdata1=0x3f; //Dígito de las unidades
while (1)
{
Q =0;
keytemp=P2;
cambiar (keytemp)
{
caso 0xbb: z=3; (P2== 0xbb);
caso 0xbd: z=6; mientras(P2==0xbd);
caso 0xbe: z=9; ; while(P2 ==0xbe);
case 0xb7: //Signo igual
jiafa (jia1, jia2); p> }
Q=1;
W=0;
keytemp=P2
cambiar (keytemp)
{
caso 0xde: z=8; mientras(P2==0xde);
caso 0xdd: z=5; ==0xdd); romper;
caso 0xd7: z=0; (P2== 0xd7);
}
W=1;
E=0;
cambiar (keytemp)
{
case 0xee: z=7 while(P2==0xee);
caso 0xed: z=4; mientras(P2==0xed);
caso 0xeb: z=1; mientras(P2==0xeb); >
}
juezcis();
juez(ge);
OPdata1=s;
juez1(shi) ;
OPdata=j
E=1
}
}