一个51单片机要实现下面功能

来源:百度知道 编辑:UC知道 时间:2024/05/18 05:33:19
at89c2051要实现下面功能
p3.0输出推动8050
p3.1 有2个低电平就p3.0输出1个
P3.2 有3个低电平就p3.0输出1个
p3.3 有4个低电平就p3.0输出1个
p3.4 有5个低电平就p3.0输出1个
请求帮助~如果用C语言就更好,,成功给100分

#include<Reg51.h>
#define uchar unsigned char
sbit OUT=P3^0;
sbit in1=P3^1;
sbit in2=P3^2;
sbit in3=P3^3;
sbit in4=P3^4;
uchar c1=0,c2=0,c3=0,c4=0;
void wait(int c)
{
int a2=0,c1=0;
while(c!=0){
for(;a2<100;a2++){
c1++;}
c--;
c1=0;
a2=0;
}
}
chang()
{
if(in1==0){
switch(c1)
{
case 0: OUT=in1;break;
case 1: OUT=in1;break;
case 2: OUT=in1;break;
}
do{}while(in1==0);
c1++;
}

if(in2==0){
switch(c2)
{
case 0:OUT=in2;break;
case 1:OUT=in2;break;
case 2:OUT=in2;break;
case 3:OUT=in2;break;
}

就是说,按一下,就算一次低电平。如果不松开的话就只算一次?那么如下:
按下按键后有个简单的防抖,按下后必须松开才算能算一次,一直按着程序就原地等待,直到松开。
按下某一按键后,对应的计数器加一,如果和对应的次数相等,就在OUT端输出1,期间,如果有其他按键按下,则前面的计数作废。刚被按下的按键其计数器加一。
#include<Reg51.h> //Fosc=12MHz
//-------------------------------------------------------
#define uchar unsigned char
//-------------------------------------------------------
sbit OUT=P3^0;
sbit in1=P3^1;
sbit in2=P3^2;
sbit in3=P3^3;
sbit in4=P3^4;
uchar c1=0,c2=0,c3=0,c4=0;
//-------------------------------------------------------
void wait(void);
void inc1(void);
void inc2(void);
void inc3(void);
void inc4(void);
//-------------------------------------------------------
void wait(void)
{
uchar i;
for(i=0;i<250;i++);
}
//-------------------------------------------------------
void inc1(void){
c1++;
c2 = 0;
c3 = 0;
c4 = 0;
if(c1==2)<