Red de conocimiento del abogados - Ley de patentes - Utilice el microcontrolador 51 para contar el número de ocurrencias de alto nivel en un determinado pin

Utilice el microcontrolador 51 para contar el número de ocurrencias de alto nivel en un determinado pin

//main.c

#define?uchar?unsigned?char

#define?uint?unsigned?int

sbit ?nivel?=?P1^0;

int?num,num3,num2,num1,num0;

void?DelayMs(uint?ms)

{ sin firmar?int?i,j; para(?i?=?0;?i??0;?j ?--);

}

void?main()

{ LcdReset(); num?=?0; ?=?0;? DisplayListChar(0,0,"num:",5);? si?(nivel?==?1) num++;(num/1000)%10; num/100)%10; num1?=?(num/10)%10; num0?=?num%10;? DispOneChar(6,0,num3?+?'0'); 7,0,num2?+?'0'); DispOneChar(8,0,num1?+?'0'); DispOneChar(9,0,num0?+?'0');?

}?

//1602.h?

#define?dataport?P0?//puerto de datos de 8 bits (hardware)

#define?buly?0x80//Detección de ocupado DB7

sbit?rs=P2^6;?//Entrada de selección de registro (hardware)

sbit?rw=P2 ^5;?//Terminal de entrada de control de lectura y escritura (hardware)

sbit?e?=P2^7;?//Habilitar terminal de entrada de señal (hardware)

/* *****************************Archivo de encabezado LCD****************** * *************/

/*--------?Función de retardo simple?---------*/

void?delay(unsigned?int?j)?

{

for(j;j>0;j--);

}

void?Delay5Ms(void)

{

unsigned?int?TempCyc?=?4552;

mientras(TempCyc --);

}

/*--------------Retraso--------*/

void?Lcddelay(unsigned?char?MS)

{ unsigned?char?i,j; while(MS!=0)

{?j?=? ;

mientras(j!=0) { i=0xf0; mientras(i!=0){i--;} j-- }

MS--; /p>

}

}

/*---------------¿Comprobar el estado de la pantalla LCD?------ - -------------*/

void?WaitForEnable(void)

{ dataport=0xff;rw=1;Lcddelay ( 5);_

nop_();e=1;_nop_();_nop_(); mientras(puerto de datos&buly);

}

/*-------- ------------?¿Escribir palabras de control?-------------*/

void?LcdWriteCommand(unsigned?char?CMD, unsigned ?char?AttribC)

{ if(AttribC)?WaitForEnable(); rs=0;rw=0;_nop_(); puerto de datos=CMD;?Lcddelay(5);_nop_(); 1;_nop_();_nop_();e=0;

}

/*----------¿Mostrar posición del cursor?---- - -------*/

void?LocateXY(char?polx,char?poly)

{ unsigned?char?temp; temp=polx&0xf; if(poly)?temp|=0x40; temp|=0x80(temp,0);

}

/*---------- - -?Escribir caracteres?---------------*/

void?LcdWriteLata(char?lataW)

{ WaitForEnable(); =1;rw=0;_nop_(); puerto de datos=lataW;Lcddelay(5);_nop_(); e=1;_nop_();_nop_();e=0; p>

/*-------------?¿Mostrar un solo carácter en la posición especificada?-----------------*/< / p>

void?DispOneChar(unsigned?char?x,unsigned?char?y,unsigned?char?Wlata)

{ LocateXY(x,y); p >

}

/*---------?Inicialización?----------*/

void?LcdReset( vacío )

{ LcdWriteCommand(0x38,0); LcdWriteCommand(0x38,0); LcdWriteCommand(0x38, 1 );//?Borrar pantalla LcdWriteCommand(0x08,1); LcdWriteCommand(0x01,1); LcdWriteCommand(0x06,1); LcdWriteCommand(0x0c,1);

}

/*---------------?¿Mostrar una cadena en la posición especificada?----------------------- */

void?DisplayListChar(unsigned?char?X,?unsigned?char?Y,?unsigned?char?code?*DData,unsigned?char?L)

{

{ p>

unsigned?char?i;

for(i=0;i

DispOneChar(X++,Y ,DLata[i])

;

}

Se aprobó lo que acabo de escribir. ¡Cambie la parte de la pantalla digital usted mismo!