资讯详情

继电器工作原理

#include<reg52.h> //包含头文件,一般不需要更改,头文件包含特殊功能寄存器的定义   #define KeyPort P3   #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2.//定义存使能端口 段锁存 sbit LATCH2=P2^3;//                 位锁存   sbit RELAY1 = P1^1.//定义继电器信号输出端口1 sbit RELAY2 = P1^2.//定义继电器信号输出端口2   unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};///对应的数码管分别点亮,即位码 unsigned char TempData[8]; ///存储显示值的全局变量 /*------------------------------------------------                   函数声明 ------------------------------------------------*/ void DelayUs2x(unsigned char t);//us级延迟函数声明  void DelayMs(unsigned char t); //ms级延时 void Display(unsigned char FirstBit,unsigned char Num);///数字管显示函数 unsigned char KeyScan(void);///键盘扫描 void Init_Timer0(void);///定时器初始化 /*------------------------------------------------                     主函数 ------------------------------------------------*/ void main (void) { unsigned char num;                     Init_Timer0();//初始化定时器0,主要用于数字管动态扫描   TempData[0]=0x50; //'r' TempData[1]=0x79; //'E' TempData[2]=0x38; //'L' TempData[3]=0x06; //'1'   TempData[5]=0x3F; //'O' TempData[6]=0x71; //'F' TempData[7]=0x71; //'F' while (1)         //主循环   {      num=KeyScan();    //循环调用按键扫描  switch(num)      {  //继电器1吸合状态,数字管显示运行状态  case 1:RELAY1=!RELAY1;         TempData[0]=0x50; //'r' TempData[1]=0x79; //'E' TempData[2]=0x38; //'L'              TempData[3]=0x06; //'1'   if(RELAY1)   { TempData[5]=0x3F; //'O' TempData[6]=0x54; //'n' TempData[7]=0;   } else   { TempData[5]=0x3F; //'O' TempData[6]=0x71; //'F' TempData[7]=0x71; //'F'   } break;  //继电器2吸合状态,数字管显示运行状态  case 2:RELAY2=!RELAY2;         TempData[0]=0x50; //'r' TempData[1]=0x79; //'E' TempData[2]=0x38; //'L'              TempData[3]=0x5B; //'2'   if(RELAY2)   { TempData[5]=0x3F; //'O' TempData[6]=0x54; //'n' TempData[7]=0;   } else   { TempData[5]=0x3F; //'O' TempData[6]=0x71; //'F' TempData[7]=0x71; //'F'   }   break;    default:break;    }    } } /*------------------------------------------------  uS延时函数,包含输入参数 unsigned char t,无返回值  unsigned char 它定义了无符号字符变量,其值的范围是  0~255 这里使用晶振12M,请使用汇编来准确延迟,大致延时  长度如下 T=tx2 5 uS  ------------------------------------------------*/ void DelayUs2x(unsigned char t) {     while(--t); } /*------------------------------------------------  mS延时函数,包含输入参数 unsigned char t,无返回值  unsigned char 它定义了无符号字符变量,其值的范围是  0~255 晶振12在这里使用M,请使用汇编来准确延迟 ------------------------------------------------*/ void DelayMs(unsigned char t) {        while(t--)  {      //大致延迟1mS      DelayUs2x(245); DelayUs2x(245);  } } /*------------------------------------------------  显示函数,用于扫描数码管  输入参数 FirstBit 表示需要显示的第一位,如赋值2表  显示从第三个数字管开始,如输入0表示从第一个显示。  Num表示需要显示的位数,如果需要显示99两位数值  输入2 ------------------------------------------------*/ void Display(unsigned char FirstBit,unsigned char Num) {       static unsigned char i=0;       DataPort=0;   //清空数据,防止交替重影        LATCH1=1;     //段锁存        LATCH1=0;          DataPort=dofly_WeiMa[i FirstBit]; //取位码         LATCH2=1;     //位锁存        LATCH2=0;          DataPort=TempData[i]; //取显示数据,段码        LATCH1=1;     //段锁存        LATCH1=0;           i  ;        if(i==Num)      i=0;     } /*------------------------------------------------                     定时器初始化子程序 ------------------------------------------------*/ void Init_Timer0(void) {  TMOD |= 0x01;  //使用模式1,16位定时器,使用"|"使用多个定时器时,符号可以不受影响      //TH0=0x00;      ///给定初值  //TL0=0x00;  EA=1;            ///打开总中断  ET0=1;           ///定时器中断打开  TR0=1;           //打开定时器开关 } /*------------------------------------------------                  定时器中断子程序 ------------------------------------------------*/ void Timer0_isr(void) interrupt 1  {  TH0=(65536-2000)/256;  ///重新赋值 2ms  TL0=(65536-2000)%6;    Display(0,8);                // 调用数码管扫描   }   /*------------------------------------------------ 按键扫描函数,返回扫描键值 ------------------------------------------------*/ unsigned char KeyScan(void) {  unsigned char keyvalue;  if(KeyPort!=0xff)    {     DelayMs(10);     if(KeyPort!=0xff)    {     DelayMs(10);     if(KeyPort!=0xff)   {    keyvalue=KeyPort;    while(KeyPort!=0xff); switch(keyvalue) { case 0xfe:return 1;break; case 0xfd:return 2;break; case 0xfb:return 3;break; case 0xf7:return 4;break; case 0xef:return 5;break; case 0xdf:return 6;break; case 0xbf:return 7;break; case 0x7f:return 8;break; default:return 0;break; }  }    }    return 0; }

标签: 1114p固体继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台