标题:
有没有大佬提供一种多线检测短路的芯片
[打印本页]
作者:
qinyi666
时间:
2025-6-20 15:16
标题:
有没有大佬提供一种多线检测短路的芯片
现在有四十根线,需要检测任意两根线之间有没有短路,有没有大佬提供一下可用的芯片和大概方法
作者:
cnos
时间:
2025-6-21 21:29
40个IO做二分法
作者:
WL0123
时间:
2025-6-22 08:21
没有遇到过这种用途的专用芯片,但可用单片机自制。曾经为某产品专用排线制作过26芯排线检测装置。是利用手头现成材料,薅嘉立创羊毛打板,编程测试满足需求。你只要选择有更多IO口的芯片,套用这个程序就可以了。
无标题.jpg
(178.11 KB, 下载次数: 0)
下载附件
2025-6-22 08:01 上传
无标题1.jpg
(140.82 KB, 下载次数: 0)
下载附件
2025-6-22 08:01 上传
#include <STC15F2K60S2.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit K1 = P5^4;
sbit K2 = P5^5;
sbit LED1= P4^1;
sbit LED2= P4^2;
sbit FM = P4^5;
//全局变量声明
uchar Key_value;//键值
uchar error;//错误
uchar Buzzer_sign;//蜂鸣器计次数
//本地函数声明
void Delay_ms(uint t);
void Timer1Init();
void key_scan(); //按键扫描函数
//主函数
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x20;//P4.5推挽
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
FM=0;//蜂鸣器初始0
Timer1Init();
while(1)
{
key_scan(); //按键扫描函数
}
}
void key_scan()
{
uchar i;
ulong a,b,c,d;
ulong num,num1;
if(!K1)
{
Delay_ms(10);
if(!K1)//短路测试
{
num=0xfffffffe;
for(i=25;i>0;i--)
{
P3=num>>24;
P2=num>>16;
P1=num>>8;
P0=num;
a=P3;b=P2;c=P1;d=P0;
_nop_();_nop_();
num1=0xfc000000|(a<<24)|(b<<16)|(c<<8)|d;
if(num==num1)
{
num=num<<1|1;
error=1;
}
else
{
i=1;
error=2;
}
Delay_ms(1);
}
if(error==1){Buzzer_sign=1;}
if(error==2){Buzzer_sign=3;}
TR1 = 1;
while(!K1);
}
}
if(!K2)//开路测试
{
Delay_ms(10);
if(!K2)
{
P3=0x03;P2=0xff;P1=0xff;P0=0xff;
_nop_();_nop_();
a=P3;b=P2;c=P1;d=P0;
num1=(a<<24)|(b<<16)|(c<<8)|d;
if(num1 == 0x00000000)
{
error=1;
}
else
{
error=2;
}
if(error==1){Buzzer_sign=1;}
if(error==2){Buzzer_sign=3;}
TR1 = 1;
while(!K2);
}
}
}
//T1中断服务函数
void InterruptTimer1() interrupt 3
{
static uint i=0; //中断计数变量
if(++i>=1000)//200ms
{
i=0;
Buzzer_sign--;
if(Buzzer_sign==0)
{
FM=1;
LED1=1;
LED2=1;
error=0;
TR1 = 0;
}
}
if(i<500)
{
FM=~FM;
if(error==1)LED1=0;
if(error==2)LED2=0;
}
else //蜂鸣器端口清0
{
FM=0;
LED1=1;
LED2=1; //定时器1关闭
}
}
/*---------------------------------------------
定时器1初始化,时钟1T、16位重载模式
----------------------------------------------*/
void Timer1Init(void) //200微秒@11.0592MHz
{
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器8位自动重装模式
TL1 = 0x48; //设置定时初始值
TH1 = 0x48; //设置定时重载值
TF1 = 0; //清除TF1标志
// TR1 = 1; //定时器1开始计时
EA = 1;
ET1 = 1;
}
/*****************************
延时函数
*****************************/
void Delay_ms(uint t)//1T@11.0592MHz
{
uint i,j;
for(i=t;i>0;i--)
for(j=1100;j>0;j--);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1