您的位置:首页 > 编程语言

电缆快速检测系统软件设计

2015-11-03 11:17 239 查看
/***********************************************************
***********基于51单片机的电缆通短断快速检测系统程序*********
************************************************************/
#include "reg51.h"                 //文件包含8051内部资源的定义

#define uchar unsigned char          //定义无符号字符

#define uint unsigned int             //定义无符号整数

sbit P3_5=P3^5;	                //变量P3_5表示引脚P3.5
sbit P3_6=P3^6;					//变量P3_6表示引脚P3.6
sbit P3_7=P3^7;					//变量P3_7表示引脚P3.7

uchar LED_number[8]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F};

void Init_C51();                //声明初始化函数

void Delay_ms(uint);            //声明延时函数

uchar Key();                   //声明按键控制函数

void LED_Display(int);          //声明数码显示函数

int Count_1(uchar);             //声明信号处理函数

/***************************主函数**************************/
void main()
{
int i=0;
int N=8;				        //定义待检电缆初芯数
bit Up_N=0;                   //定义电缆芯数增加键
bit Down_N=0;                 //定义电缆芯数减少键
bit Start=0;                    //定义电缆测试开始键
uchar key_value=0xEF;          //定义按键返回值变量
Init_C51();                    //单片机I/O 口初始化
//**********进入按键控制程序**********************
for(;;)                        //Start=1时 跳出循环
{
LED_Display(N);           //调用数码显示函数
for(;;)                     //有键按下时跳出循环
{
key_value=Key();	       //调用按键控制函数
switch(key_value)
{
case 0xFB:
{
Up_N=1;	    //P3.2=0,电缆芯数增加
break;
}
case 0xF7:
{
Down_N=1;   //P3.3=0,电缆芯数减少
break;
}
case 0xEF:
{
Start=1;		//P3.4=0,电缆测试开始
break;
}
}
}
if(Up_N) 					//芯数增加?
{
N++;
if(N>8) N=1;
}
if(Down_N)			      //芯数减少?
{
N--;
if(N<1) N=8;
}
if(Start)                 //开始测试?
{
break;
}
}
//*******************开始测试程序******************
P0=0x01;                     //P0口向电缆输入信号
for(;i<N;i++)
{
int Num_1=1;              //采集信号中高电平的初始个数
uchar Receiver;
Delay_ms(10);             //延时,避免采集错误信号
Receiver=P2;              //P2口从电缆输出端采集信号
Num_1=Count_1(Receiver);  //调用信号处理函数计算采集的高电平数
if(Num_1==0)				//电缆第i+1芯发生断路
{
P3_7=1;                //点亮断路指示灯并出循环
break;
}
else if(Num_1==1);	        //电缆第i+1芯正常通路
else 						//电缆第i+1芯发生短路
{
P3_6=1;				     //点亮短路指示灯并出循环
break;
}
P0<<=1;                   //P0左移一位,检测下一芯
}
if(i==N)
P3_5=1;                   //电缆正常,点亮通路指示灯
}
/***********************初始化函数*************************************
函数名称:void Init_C51()
函数功能:实现单片机I/O的初始化
输入参数:无
输出参数:无
***********************************************************************/
void Init_C51()
{
P0=0x00;
P1=0xFF;
P2=0x00;
P3_5=0;
P3_6=0;
P3_7=0;
}
/***********************按键控制函数***********************************
函数名称:uchar Key()
函数功能:实现电缆芯数的选择和测试开始
输入参数:无
输出参数:KeyV
***********************************************************************/
uchar Key()
{
uchar KeyV;
uchar temp;
P3=P3|0xE3;                   //三个按键所在位置
KeyV=P3;                      //KeyV=P3=111***11B
if(KeyV|0xE3==0xFF)           //无键按下
return(0);
Delay_ms(10);                 //延时去键抖
KeyV=P3;                      //KeyV=P3=111***11B
if(KeyV|0xE3==0xFF)           //无键按下
return(0);
else
{
for(;;)
{
temp=P3;
if(temp|0xE3==0xFF)
break;
}
return(KeyV);
}
}
/***********************数码显示函数***********************************
函数名称:void LED_Display(int n)
函数功能:实现数字n的七段数码显示
输入参数:输入参数范围1~8;
输出参数:无
***********************************************************************/
void LED_Display(int n)
{
P1=LED_number[n-1];           //显示相应数码
}
/***********************信号处理函数**********************
函数名称:int Count_1(uchar x)
函数功能:计算整数二进制数中“1”的个数
输入参数:输入参数范围0x00~0xFF;
输出参数:无
***********************************************************************/
int Count_1(uchar x)
{
int num=0;
while(x)
{
x=x&(x-1);
num++;
}
return(num);
}
/***********************延时函数***************************************
函数名称:void Delay_ms(uint delay_time)
函数功能:实现输入多少ms的延时
输入参数:输入参数范围0~6553;
输出参数:无
***********************************************************************/
void Delay_ms(uint delay_time)
{
uint d_cnt;
for(;delay_time>0;delay_time--)
for(d_cnt=0;d_cnt<255;d_cnt++)
{;}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息