28
2012
05

串口控制继电器程序

#include <reg51.h>
#include <intrins.h>
#include < stdio.h >

//定义继电器的管脚
sbit     K0_0 =  P0^0;   //对应继电器
sbit     K0_1 =  P0^1;   //对应继电器
sbit     K0_2 =  P0^2;   //对应继电器
sbit     K0_3 =  P0^3;   //对应继电器
sbit     K0_4 =  P0^4;   //对应继电器
sbit     K0_5 =  P0^5;   //对应继电器
sbit     K0_6 =  P0^6;   //对应继电器
sbit     K0_7 =  P0^7;   //对应继电器
sbit     dp =  P2^7;   //对应小数点

void delay(unsigned int ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}

main()
{

unsigned char idata Comm[20];
unsigned int i,t;
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x38,0x73,0x3e,0x6e,0x00};
//以上为共阴极数码管代码
SCON=0x50; //串口模式1,允许接收
TMOD=0x20; //定时器1为模式2,8-bit 自动装载方式
PCON=0x00; //波特率不倍增
TL1=0xfd;
TH1=0xfd; //波特率9600
TI=1; //TI 置1,以发送第一个字节
TR1=1; //启动定时器 T1
P0=0xff;
P2=0xff;
delay(1);
    
printf ("欢迎使用 RS232 控制程序\n");

while (1)
 {
  //先清空数组内容
  for(i=0;i<=20;i++)
  {
   Comm[i]=0;
  }

      //开始接收数据
  i=0 ;    //允许串口中断
        while (Comm[i-1]!=13)
  {
    REN=1;   //允许串口中断                                                                                              
         while(!RI){};         //等待计算机发来消息
         RI   =0;  
      Comm[i]=SBUF;
   i++;
  }         //等待计算机发来消息
  P2=tab[10];
  t=i; //获得命令行的字节数

 

  if (Comm[0]=='W' && Comm[1]=='1' ) 
  
   //延时1秒
  {
  P2=tab[13];
  delay (1000);

  }
   if (Comm[0]=='W' && Comm[1]=='2' ) 
  
   //延时2秒
  {
  P2=tab[13];
  delay (2000);

  }
   if (Comm[0]=='W' && Comm[1]=='5' ) 
  
   //延时5秒
  {
  P2=tab[13];
  delay (5000);

  }

  if (Comm[0]==13 ) 
  {
   // 返回版权说明
   P2=tab[19];
    printf ("RS232 控制程序\n");
   printf ("作者:茅建人 (jinesc)\n");
   printf ("E-Mail:jinesc@163.com\n");
  }
  if (Comm[0]==' ' ) 
  {
   // 序列号
   P2=tab[17];
     printf ("S/N:JINESC_EXB_001\n");
  }

 

  if (Comm[0]=='K' )  //8路继电器的开关 控制
  {
     if (Comm[1]=='0' &&  Comm[2]=='A' && Comm[3]=='1' )  //全开
     {
         K0_0=1;
      K0_1=1;
      K0_2=1;
      K0_3=1;
      K0_4=1;
      K0_5=1;
      K0_6=1;
      K0_7=1;
      printf ("K0A1\n");
      P2=tab[16];
  
     }
     if (Comm[1]=='0' &&  Comm[2]=='A' && Comm[3]=='0' ) //全关
     {
         K0_0=0;
      K0_1=0;
      K0_2=0;
      K0_3=0;
      K0_4=0;
      K0_5=0;
      K0_6=0;
      K0_7=0;
      P2=tab[15];
      printf ("K0A0\n");
     }

     if (Comm[1]=='0' &&  Comm[2]=='0' && Comm[3]=='1' )
     {
         K0_0=1;
      P2=tab[0];
      dp=1;
      printf ("K001\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='0' && Comm[3]=='0' )
     {
         K0_0=0;
      P2=tab[0];
      dp=0;
      printf ("K000\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='1' && Comm[3]=='1' )
     {
         K0_1=1;
      P2=tab[1];
      dp=1;
      printf ("K011\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='1' && Comm[3]=='0' )
     {
         K0_1=0;
      P2=tab[1];
      dp=0;
      printf ("K010\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='2' && Comm[3]=='1' )
     {
         K0_2=1;
      P2=tab[2];
      dp=1;
      printf ("K021\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='2' && Comm[3]=='0' )
     {
         K0_2=0;
      P2=tab[2];
      dp=0;
      printf ("K020\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='3' && Comm[3]=='1' )
     {
         K0_3=1;
      P2=tab[3];
      dp=1;
      printf ("K031\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='3' && Comm[3]=='0' )
     {
         K0_3=0;
      P2=tab[3];
      dp=0;
      printf ("K030\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='4' && Comm[3]=='1' )
     {
         K0_4=1;
      P2=tab[4];
      dp=1;
      printf ("K041\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='4' && Comm[3]=='0' )
     {
         K0_4=0;
      P2=tab[4];
      dp=0;
      printf ("K040\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='5' && Comm[3]=='1' )
     {
         K0_5=1;
      P2=tab[5];
      dp=1;
      printf ("K051\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='5' && Comm[3]=='0' )
     {
         K0_5=0;
      P2=tab[5];
      dp=0;
      printf ("K050\n");
     }  
     if (Comm[1]=='0' &&  Comm[2]=='6' && Comm[3]=='1' )
     {
         K0_6=1;
      P2=tab[6];
      dp=1;
      printf ("K061\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='6' && Comm[3]=='0' )
     {
         K0_6=0;
      P2=tab[6];
      dp=0;
      printf ("K060\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='7' && Comm[3]=='1' )
     {
         K0_7=1;
      P2=tab[7];
      dp=1;
      printf ("K071\n");
     }
     if (Comm[1]=='0' &&  Comm[2]=='7' && Comm[3]=='0' )
     {
         K0_7=0;
      P2=tab[0];
      dp=0;
      printf ("K070\n");
     }
   }

 }
  }
 

 收钱码.jpg

« 上一篇 下一篇 »

评论列表:

1.bbis  2013-02-21 11:09:29 回复该评论
这个应该是写入到51单片机里的程序吧。
这个带显示?
2.jinesc  2013-02-28 10:17:45 回复该评论
噢 这个是用数码管显示工作状态的 也呆串口输出的
3.jinesc  2013-02-28 10:18:58 回复该评论
另有一个是用1602液晶屏的 可以参考我的另一篇文章
http://blog.jinesc.net/post/93.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。