找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4859|回复: 0
打印 上一主题 下一主题
收起左侧

[求助]

[复制链接]
跳转到指定楼层
楼主
ID:17300 发表于 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开关用以控制按钮开关输入次数)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表