Red de conocimiento informático - Espacio del host - Enseñarle paso a paso cómo aprender a utilizar la calculadora sencilla del profesor Song Xuesong. ¿Cómo utilizar el microcontrolador de tecnología Puzhong para implementarlo?

Enseñarle paso a paso cómo aprender a utilizar la calculadora sencilla del profesor Song Xuesong. ¿Cómo utilizar el microcontrolador de tecnología Puzhong para implementarlo?

/*? S16 S12 S8 S4 son 123 respectivamente

S15 S11 S7 S3 son 456-

S14 S10 S6 S2 son 789*

S13 S9 S5 S1 son 0 respectivamente /

*/

/* Para implementar la operación de dos números, ¿cada número puede tener al menos ocho dígitos?

#includelt; reg52.hgt;

typedef unsigned char uint8

typedef unsigned int uint16

sbit rw= P2^ 5;

sbit rs=P2^6;

sbit e=P2^7;

sbit led=P3^7;

sbit beep=P2^0;

uint8 key, num;

uint8 fuhao; //Define el símbolo específico, ya sea suma, resta, multiplicación o división.

uint8 flag; //Definir si se presiona la tecla de símbolo, este es un término general

long a, b, c, d //Definir el primero y el tercero; datos de operación Dos variables numéricas iguales

uint8 k; //Define el número de dígitos que se muestran después del punto decimal

uint8 biao;

uint8 dat1[] ={1, 2, 3, 0x2b-0x30, 4, 5, 6, 0x2d-0x30, 7, 8, 9, 0x2a-0x30, 0, 0x01-0x30, 0x3d-0x30, 0x2b-0x30 }; los datos mostrados

void delay(uint16 i)

{

while(i--);

}

void lcdwrc(uint8 c)

{

retraso(1000);

rs=0;

rw=0 ;

rw=0; p>

e=0;

P0=c;

e=1;

retraso(1000);

e=0;

}

void lcdwrd(uint8 dat)

{

retraso(1000);

rs=1;

rw=0;

e=0;

e=1;

retraso(1000);

e=0;

}

void lcdinit()

{

retraso(1500);

lcdwrc(0x38);

retraso(500);

lcdwrc(0x38);

retraso(500);

lcdwrc(0x38);

retraso(500);

lcdwrc(0x38);

lcdwrc(0x08);

lcdwrc(0x01);

lcdwrc(0x06);

lcdwrc(0x0c);

clave=0;

num=0;

fuhao=0;

a=0;

b=0; >d=0;

biao=0;

led=0;

}

anulación de teclas nulas()

{

P1 =0xfe; //Deje que la primera línea sea 0 y luego determine qué columna está presionada

if(P1!=0xfe)

{

retraso(1000);

if(P1!=0xfe)

{

key=P1amp;0xf0;

interruptor(tecla)

{

caso 0xe0: num=0; //1

caso 0xd0: num; =1; romper; //2

caso 0xb0: num=2; //3

caso 0x70: num=3; /p>

}

}

mientras(P1!=0xfe);

si(num=

=0||num==1||num==2) //Confirma los números 1, 2, 3 en la primera línea

{

if(flag==0 ) //La tecla de símbolo no está presionada

{

//led=1;

a=a*10 dat1[num]; >

}

else

{

//led=1;

b=b*10 dat1[núm] ;

}

}

si(num==3)

{

//led= 0;

flag=1;

fuhao=1; //signo más

}

lcdwrd(0x30 dat1[núm]

}

P1=0xfd; //Deje que la segunda fila sea 0 y determine qué columna se presiona

if(P1!=0xfd)

{

retraso(1000);

if(P1!=0xfd)

{

clave= P1amp; 0xf0;

interruptor(clave)

{

caso 0xe0: num=4; caso 0xd0: num=5; romper; //5

caso 0xb0: num=6; //6

caso 0x70; // Restar—

}

}

while(P1!=0xfd);

if(num==4|| num= =5||num==6)

{

if(flag==0) //La tecla de símbolo no está presionada

{

//led=1;

a=a*10 dat1[num]

}

else

<; p>{

//led=1;

b=b*10 dat1[núm]; /p>

else

{

flag=1;

fuhao=2; //Con signo menos de tabla

}

lcdwrd(0x30 dat1[num]);

}

P1=0xfb; //Deje que la tercera fila sea 0 y determine qué columna se presiona

si(P1!=0xfb)

{

retraso(1000);

si(P1!=0xfb)

{

tecla=P1amp 0xf0;

interruptor(tecla)

{

caso 0xe0: num= 8; romper; //7

caso 0xd0: num=9; //8

caso 0xb0; p>

case 0x70: num=11; break;? //Multiplicar *

}

}

mientras(P1!=0xfb);

if(num==8||num==9||num==10)

{

if(bandera==0) // Tecla sin símbolo pulsada

{

//led=

1;

a=a*10 dat1[núm];

}

otro

{

//led=1;

b=b*10 dat1[num];

}

}

else

{

flag=1;

fuhao=3; //Con signo de multiplicación de tabla*

}

lcdwrd (0x30 dat1[num]);

}

P1=0xf7; //Deje que la cuarta fila sea 0 y determine qué columna se presiona

if( P1 !=0xf7)

{

retraso(1000);

if(P1!=0xf7)

{

clave=P1amp;0xf0;

interruptor(clave)

{

caso 0xe0: num=12;romper; //0< / p>

case 0xd0: num=13; break;? //Borrar primero

case 0xb0: num=14; //Signo igual=

case 0x70 : num=15; romper;? //excepto/

}

}

mientras(P1!=0xf7);

switch(num)

{

caso 12:?

if(flag==0) //La tecla de símbolo no está presionada

{

//led=1;

a=a*10 dat1[núm];

lcdwrd(0x30);

}

else

{

//led=1;

b=b*10 dat1[num];

p>

lcdwrd(0x30);

}

romper;

caso 13:?

lcdwrc (0x01); //Comando borrar pantalla

a=0;

b=0

flag=0; =0;

romper;

caso 15:

bandera=1;

fuhao=4; >lcdwrd(0x2f );//signo de división/

romper;

caso 14:?

if(fuhao==1)//agregar

{

lcdwrc(0x4f 0x80);

lcdwrc(0x04); //Configura el cursor para moverse hacia la izquierda sin mover la pantalla

c=a b;

p>

while(c!=0) //Mostrar un dígito uno por uno

{

lcdwrd(0x30 c10) ; //El último dígito del resultado mostrado está en la posición 0x4f

c=c/10 //Obtiene los datos del resultado anterior

}

lcdwrd; (0x3d); //Mostrar el signo igual=

a=0;

b=0

flag=0; >fuhao=0; //Borrar todo a 0

}

if(fuhao==2) //menos

{

lcdwrc(0x4f 0x80);

lcdwrc(0x04);

//Configura el cursor para que se mueva hacia la izquierda y la pantalla para que no se mueva

if(agt; b)

c=a-b;

else

c =b-a;

while(c!=0) //Mostrar uno por uno

{

lcdwrd(0x30 c10); Mostrar el resultado El último bit está en la posición de 0x4f

c=c/10; //Obtener los datos del resultado anterior

}

if(alt ;b) lcdwrd( 0x2d); //Mostrar - signo

lcdwrd(0x3d); //Mostrar signo igual=

a=0;

b =0;

b=0;

p>

flag=0;

fuhao=0; //Borrar todo a 0

}

if(fuhao==3)// Multiplicación

{

lcdwrc(0x4f 0x80);

lcdwrc(0x04); ); //Configura el cursor para que se mueva hacia la izquierda y la pantalla no se mueve

c=a*b;

while(c!=0) //Mostrar uno por uno

{

lcdwrd(0x30 c10);/ /Muestra el último dígito del resultado en la posición de 0x4f

c=c/10; los datos del resultado anterior

}

lcdwrd(0x3d) ; //Mostrar signo igual=

a=0; 0;

flag=0;

fuhao=0 ;//Borrar todo a 0

}

if(fuhao== 3)//Multiplicación

{

lcdwrc(0x4f 0x80);

lcdwrc(0x04); //Configura el cursor para moverse hacia la izquierda y la pantalla lo hace. no moverse

c=a*b;

while(c!= 0) //Mostrar uno por uno

{

lcdwrd(0x30 c10); //El último dígito del resultado mostrado está en la posición 0x4f

c =c/10; //Obtener los datos del resultado anterior

}

lcdwrd(0x3d); //Mostrar el signo igual=

a=0;

b=0;

fuhao=0; //Borrar todo a 0

}

if(fuhao==4)

{

k=0;

lcdwrc(0x4f 0x80);

lcdwrc (0x04); //Configura el cursor para moverse hacia la izquierda sin mover la pantalla

c=(long)(((float)a/b)*1000); //Conversión forzada a long.

while(c!=0) //Mostrar uno por uno

{

k;

lcdwrd(0x30 c10); //Muestra el último dígito del resultado en la posición de 0x4f

c=c/10; //Obtiene los datos del resultado anterior

if(k==3)

{

lcdwrd(0x2e);

k=0;

}

}

if(a/blt; 0) ? //Si a es menor que b, el bit más alto del resultado de la división es 0

{

lcdwrd(0x30); /p>

}

lcdwrd(0x3d); //Mostrar signo igual

a=0

b=0;

flag=0;

fuhao=0; //Borrar todo a 0

}

romper;

}

}

}

void main()

{

lcdinit();

mientras (1)

{

keyscan();

}

}