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

来源:互联网 发布:windows 小键盘取消 编辑:程序博客网 时间:2024/05/01 08:35
/**********************************************************************基于51单片机的电缆通短断快速检测系统程序*********************************************************************/#include "reg51.h"                 //文件包含8051内部资源的定义        #define uchar unsigned char          //定义无符号字符#define uint unsigned int             //定义无符号整数sbit P3_5=P3^5;                //变量P3_5表示引脚P3.5sbit P3_6=P3^6;//变量P3_6表示引脚P3.6sbit P3_7=P3^7;//变量P3_7表示引脚P3.7uchar 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++)  {;}}

0 0
原创粉丝点击