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?---------*/ p>
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!