标题: [求助] [打印本页]

作者: refine168    时间: 2009-9-17 14:05
标题: [求助]
我的电路接法是两组BCD开关的COM端接在P1.1和P1.2,BCD的另外四个端口分别接P1.3~P1.5上。P3.1端口接了一个LED灯,P3.2接了一个开关。我的思路是让开关控制灯的亮灭,具体是用接在P1.1上的那个BCD上的数字控制所按的开关次数(也就是开关上显示的是数字3,即要求连继按3次开关......)。LED灯亮灭的时间长短由接在P1.2上的BCD开关上显示的数字决定。(是5就过5秒钟改变状态,是8就过8秒钟改变.......)我写了个程序,可是却达不到要求,请大家帮忙指教。 
问题补充:
程序如下
#include"reg51.h"
#include"intrins.h"
sbit p11=P1^1;
sbit p12=P1^;
sbit led=P3^1;
sbit kg=P3^2;    按钮开关
void delay()//消除开关抖动
{  .......}
void bcdkg()  //读入BCD开关数(这个是您写的,因为是汇编,直接移植编译不了,所以我把它
                        写成了C语言,不知道对不对,请您指正)
{ uchar temp,shu,shu1;
p11=1;
p12=0;
temp=P1;
temp=~temp;
temp=_crol_(temp,2);
shu=temp&0xF;
return(shu);
}
void int0_() interrupt 0   //P3.2口的外部中断功能,用以接受BCD送过来的次数
{  unsigned char shu;
static char counter=0;
bcdkg();                  //调用这个我的目的是想在下面贫下使用它的返回值,也就是   BCD 上显示的数字,不知道这样可不可以
delay();
if(INT0==0)
{  counter++;
while(INT0==0);
}
if(counter==这个地方就是BCD上显示的数字,我用上述shu替代,实际装上电路中却达不到要求)
{ counter=0;
led=~led;
}
}
void main()
{ led=0;
EX0=1;
ITO=1;
EA=1;
while(1);
}

请大家帮忙看看问题出在哪,谢谢(只用了一个BCD开关用以控制按钮开关输入次数)





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1