用51单片机来实现对某个引脚出现高电平次数的计数

//main.c

#define?uchar?unsigned?char

#define?uint?unsigned?int

sbit?level?=?P1^0;

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

void?DelayMs(uint?ms)

{

unsigned?int?i,j;

for(?i?=?0;?i?<?ms;?i?++?)

for(?j?=?115;?j?>?0;?j?--);

}

void?main()

{

LcdReset();

num?=?0;

while?(1)

{

level?=?0;?

DisplayListChar(0,0,"num:",5);?

if?(level?==?1)

num++;

num3?=?(num/1000)%10;

num2?=?(num/100)%10;

num1?=?(num/10)%10;

num0?=?num%10;?

DelayMs(20);

DispOneChar(6,0,num3?+?'0');

DispOneChar(7,0,num2?+?'0');

DispOneChar(8,0,num1?+?'0');

DispOneChar(9,0,num0?+?'0');?

DelayMs(20);

}

}?

//1602.h?

#define?dataport?P0?//8位数据口(硬件)

#define?buly?0x80//忙检测DB7

sbit?rs=P2^6;?//寄存器选择输入端(硬件)

sbit?rw=P2^5;?//读写控制输入端(硬件)

sbit?e?=P2^7;?//使能信号输入端(硬件)

/*****************************液晶显示头文件*******************************/

/*--------?简易延时函数?---------*/

void?delay(unsigned?int?j)?

{

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

}

void?Delay5Ms(void)

{

unsigned?int?TempCyc?=?4552;

while(TempCyc--);

}

/*--------------延时--------*/

void?Lcddelay(unsigned?char?MS)

{

unsigned?char?i,j;

while(MS!=0)

{?j?=?4;

while(j!=0)

{

i=0xf0;

while(i!=0){i--;}

j--;

}

MS--;

}

}

/*---------------检测lcd状态?--------------------*/

void?WaitForEnable(void)

{

dataport=0xff;

rs=0;rw=1;Lcddelay(5);_nop_();e=1;_nop_();_nop_();

while(dataport&buly);

e=0;

}

/*--------------------?写控制字?--------------*/

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

{

if(AttribC)?WaitForEnable();

rs=0;rw=0;_nop_();

dataport=CMD;?Lcddelay(5);_nop_();

e=1;_nop_();_nop_();e=0;

}

/*----------显示光标定位?------------*/

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

{

unsigned?char?temp;

temp=polx&0xf;

poly&=0x1;

if(poly)?temp|=0x40;

temp|=0x80;

LcdWriteCommand(temp,0);

}

/*------------?写字符?---------------*/

void?LcdWriteLata(char?lataW)

{

WaitForEnable();

rs=1;rw=0;_nop_();

dataport=lataW;Lcddelay(5);_nop_();

e=1;_nop_();_nop_();e=0;

}

/*-------------?在指定位置显示单个字符?-----------------*/

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

{

LocateXY(x,y);

LcdWriteLata(Wlata);

}

/*---------?初始化?----------*/

void?LcdReset(void)

{

LcdWriteCommand(0x38,0);

Lcddelay(5);

LcdWriteCommand(0x38,0);

Lcddelay(5);

LcdWriteCommand(0x38,0);

Lcddelay(5);

LcdWriteCommand(0x38,1);//?清屏

LcdWriteCommand(0x08,1);

LcdWriteCommand(0x01,1);

LcdWriteCommand(0x06,1);

LcdWriteCommand(0x0c,1);

}

/*---------------?在指定位置显示字符串?-----------------------*/

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

{

unsigned?char?i;

for(i=0;i<L;i++)

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

}

刚写的,已经烧写通过了,你自己改一下那个数字显示部分!