找回密码
 立即注册

QQ登录

只需一步,快速开始

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

麻烦大神看下程序有什么问题没。实际电路LED不能全部点亮,线材没问题。

[复制链接]
跳转到指定楼层
楼主
ID:799497 发表于 2020-7-8 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能测试5根线是否导通。
测试放法:把5根线分别接到对应的5个端口P1.0 P1.1 P1.2 P1.3 P1.4 对应端口P2.0 P2.1 P2.2 P2.3 P2.4全部导通对应5个LED灯亮。有一个不到通蜂鸣器响,
麻烦大神看下程序有什么问题没。实际电路LED不能全部点亮,线材没问题。


#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit TXD1=P1^0;//·发送端
sbit TXD2=P1^1;
sbit TXD3=P1^2;
sbit TXD4=P1^3;
sbit TXD5=P1^4;


sbit RX1=P2^0;//接收端
sbit RX2=P2^1;
sbit RX3=P2^2;
sbit RX4=P2^3;
sbit RX5=P2^4;


sbit LED1=P0^0;//指示灯
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;


sbit Buzzer=P2^5; //蜂鸣器

void delay(uchar x)


void main()

{

uint y;
        for(;x>0;x--)
        for(y=50;y>0;y--);
}

         P0 = 0xff;

   P1 = 0xff;

   P2 = 0xff;

   P3 = 0xff;
       
        while(1)
               
        {
   TXD1=0;TXD2=1;TXD3=1;TXD4=1;TXD5=1
if(RX1==0&RX2!=0&RX3!=0&RX4!=0&RX5!=0
{

   LED1=0;

}
else
{

   LED1=1;

}
delay(50000);
   TXD1=1;TXD2=0;TXD3=1;TXD4=1;TXD5=1;
if(RX2==0&RX1!=0&RX3!=0&RX4!=0&RX5!=0)
{

   LED2=0;

}
else
{

   LED2=1;

}
delay(50000);
   TXD1=1;TXD2=1;TXD3=0;TXD4=1;TXD5=1;
if(RX3==0&RX1!=0&RX2!=0&RX4!=0&RX5!=0)
{

   LED3=0;

}
else
{

   LED3=1;

}
delay(50000);
   TXD1=1;TXD2=1;TXD3=1;TXD4=0;TXD5=1;
if(RX4==0&RX1!=0&RX2!=0&RX3!=0&RX5!=0)
{

   LED4=0;

}
else
{

   LED4=1;

}
delay(50000);
   TXD1=1;TXD2=1;TXD3=1;TXD4=1;TXD5=0;
if(RX5==0&RX1!=0&RX2!=0&RX3!=0&RX4!=0)
{

   LED5=0;
       

}
else
{

   LED5=1;

}
delay(50000);

if((LED1&LED2&LED3&LED4&LED5)==0)
{   Buzzer=1;}
else
{

   Buzzer=0;

}
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:267719 发表于 2020-7-8 09:25 | 只看该作者
if(RX1==0&RX2!=0&RX3!=0&RX4!=0&RX5!=0)
这个判断有问题;这个执行结果先执行0&RX2   判断的逻辑与应该用&&,单个&是算术与。
应该如下
if((RX1==0)&&(RX2!=0)&&(RX3!=0)&&(RX4!=0)&&(RX5!=0))
回复

使用道具 举报

板凳
ID:282850 发表于 2020-7-8 09:34 | 只看该作者
先测试一下全部LED是否会亮,也叫自检
P1=0xe0; delayms(2000);
故障可能:
1、delay(50000),是延时50秒吗?太长了
2、整个思路感觉不好,又复杂、浪费时间。
TXD1=1;TXD2=1;TXD3=0;TXD4=1;TXD5=1;
if(RX3==0&RX1!=0&RX2!=0&RX4!=0&RX5!=0)
类似的全改成并行:
P1=0xff;
TXD1=1;TXD2=1;TXD3=1;TXD4=1;TXD5=1;  //仅一次,永远高
if(RX1==0) LED1=0;
if(RX2==0) LED2=0;
if(RX3==0) LED3=0;
...

回复

使用道具 举报

地板
ID:799497 发表于 2020-7-8 14:16 | 只看该作者
carpcarey 发表于 2020-7-8 09:25
if(RX1==0&RX2!=0&RX3!=0&RX4!=0&RX5!=0)
这个判断有问题;这个执行结果先执行0&RX2   判断的逻辑与应该用 ...

你好:我现在测试使用杜邦线把P1.0 P1.1 P1.2 P1.3 P1.4 对应端口P2.0 P2.1 P2.2 P2.3 P2.4接通5个LED灯都亮。可是我换成线材LED等只亮1个。难道这样连接有问题,线材内阻对电路有什么影响吗?应该怎么解决?
回复

使用道具 举报

5#
ID:799497 发表于 2020-7-8 14:48 | 只看该作者
f556 发表于 2020-7-8 09:34
先测试一下全部LED是否会亮,也叫自检
P1=0xe0; delayms(2000);
故障可能:

你好:我现在使用杜邦线把P1.0 P1.1 P1.2 P1.3 P1.4 对应端口P2.0 P2.1 P2.2 P2.3 P2.4全部连接起来,LED灯5个都亮。要是使用线材连接起来,只有1个灯亮。难道线材电阻值太大。这个问题怎么解决?测试线材是否开路还有什么方法。一根一根测试。
回复

使用道具 举报

6#
ID:267719 发表于 2020-7-8 16:47 | 只看该作者
leibo45 发表于 2020-7-8 14:16
你好:我现在测试使用杜邦线把P1.0 P1.1 P1.2 P1.3 P1.4 对应端口P2.0 P2.1 P2.2 P2.3 P2.4接通5个LED灯 ...

什么线材?怎么连的?有图片么?
回复

使用道具 举报

7#
ID:799497 发表于 2020-7-8 16:49 | 只看该作者
carpcarey 发表于 2020-7-8 16:47
什么线材?怎么连的?有图片么?

就是测试伺服编码器线。5根线,公头连接P1端口,母头连接P2端口。
回复

使用道具 举报

8#
ID:267719 发表于 2020-7-9 15:23 | 只看该作者
leibo45 发表于 2020-7-8 16:49
就是测试伺服编码器线。5根线,公头连接P1端口,母头连接P2端口。

如果线很长,线与线之间很近,那么会有等效电容,建议在置了电平之后,在判断之前延时100ms。这段延时时间相当于给这个等效电容充电时间。这个时间根据实际情况去调整。

#define DefDelayTime 100
TXD1=0;TXD2=1;TXD3=1;TXD4=1;TXD5=1;
delay(DefDelayTime);
if((RX1==0)&&(RX2!=0)&&(RX3!=0)&&(RX4!=0)&&(RX5!=0))
{
.
.
}
回复

使用道具 举报

9#
ID:800832 发表于 2020-7-10 09:28 | 只看该作者
频率问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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