[应用方案] 监控云台控制器,串口通信可多种通讯方式

[复制链接]
 楼主| energyplants 发表于 2016-8-15 21:11 | 显示全部楼层 |阅读模式
刚开始测试通讯。用来控制云台电机,以及镜头的伸缩对焦。电机拆的是24v交流电机,所以采用可控硅控制。另加了4个继电器。通讯因为距离不要太远,所以采用max232.可以用max485得到更远的传输距离。经过测试,采用315mhz的无线也是可以的,不过有时可能会受干扰。只为了满足同事的要求做的,太多功能也没做。可以加上红外遥控功能,还有别的都可以。串口线接在电脑上也可以电脑控制。串口发送的是字符。可以自己随便修改。原理图我就不多说了,很简单
由此原理大家可以做更多串口控制的东西。
程序有待完善,只做了单向通信。欢迎大家一起讨论,学习。



 楼主| energyplants 发表于 2016-8-15 21:13 | 显示全部楼层
这是美丽的烟台


 楼主| energyplants 发表于 2016-8-15 21:13 | 显示全部楼层
发送程序
  1. /************************************************/
  2.            void delayms(uint xms)
  3.                    {
  4.                 uint i,j;
  5.                 for(i=xms;i>0;i--)
  6.                         for(j=110;j>0;j--);
  7.                 }
  8. /***********************************************/
  9.         void send(uchar keynum)
  10.         {
  11.         SBUF=keynum;
  12.         while(!TI);
  13.         TI=0;

  14.         }

  15.         void keyscan()
  16.         {
  17.         uint temp,key;
  18.                 P1=0xff;
  19.         temp=P1;
  20.         switch(temp)
  21.                 {
  22.                 case  0x7f:         key='U' ;break;
  23.                 case  0xbf:  key='D';break;
  24.            case  0xdf:   key='L';break;
  25.                 case  0xef:   key='R';break;
  26.                 case  0xf7:   key='Y';break;
  27.                 case  0xfb:   key='J';break;
  28.                 case  0xfd:   key='M';break;
  29.                 case  0xfe:   key='N';break;
  30.                 default :key=0;
  31.                 }
  32.          send(key);


  33.                
  34.         
  35.         
  36.         }
  37. /**********************************************************/
  38. void main()
  39. {
  40. TMOD=0x20;
  41. TH1=0xfd;
  42. TL1=0xfd;
  43. TR1=1;
  44. SM0=0;
  45. SM1=1;
  46. EA=1;
  47. ES=1;
  48. while(1)
  49.         {power=0;
  50.         keyscan();
  51.         }



  52. }
  53. =================================================================


 楼主| energyplants 发表于 2016-8-15 21:14 | 显示全部楼层
串口接收
  1. #include <reg52.h>
  2. sbit         R1=P1^0;
  3. sbit  R2=P1^1;
  4. sbit  R3=P1^2;
  5. sbit  R4=P1^3;
  6. sbit  R5=P1^4;
  7. sbit R6=P1^5;
  8. sbit R7=P1^6;/输出
  9. sbit power=P3^7;
  10. sbit R8=P1^7;
  11. unsigned int myKEY;        //存放电脑发送过来的按键
  12. unsigned int temp;
  13. void Delay(unsigned int t);
  14. void main(void)
  15. {
  16.         SCON=0x50;                 //串口工作模式3,允许接收
  17.         TMOD=0x20;                   //定时器1工作模式2
  18.         ES=1;                          //允许串口中断
  19.         EA=1;                        //允许CPU中断
  20.         TH1=0xFD;                //定时器初值,波特率:9600bps
  21.         TL1=0xFD;
  22.         TR1=1;                          //启动定时器

  23.         while(1)
  24.         {power=0;

  25. R5=0;R6=0;R7=0;R8=0;
  26.                 if(myKEY=='U' )          //发送字母U
  27.                 {
  28.                
  29.                 temp=myKEY;
  30.                 myKEY=0;

  31.                         if(temp=='U')
  32.                                 {
  33.                                         R1=0;
  34.                                         Delay(15000);
  35.                                         R1=1;
  36.                                 }     
  37.                 }
  38.         
  39.                   if(myKEY=='D' )          //发送字母U
  40.                         {
  41.                
  42.                                 temp=myKEY;
  43.                                 myKEY=0;

  44.                                 if(temp=='D')
  45.                                 {
  46.                                         R2=0;
  47.                                         Delay(15000);
  48.                                         R2=1;
  49.                                 }
  50.                          }

  51.         if(myKEY=='L' )          //发送字母U
  52.                 {
  53.                
  54.                 temp=myKEY;
  55.                 myKEY=0;

  56.                         if(temp=='L')
  57.                                 {
  58.                                         R3=0;
  59.                                         Delay(15000);
  60.                                         R3=1;
  61.                                 }
  62.              }

  63.         if(myKEY=='R' )          //发送字母U
  64.                 {
  65.                
  66.                 temp=myKEY;
  67.                 myKEY=0;

  68.                         if(temp=='R')
  69.                                 {
  70.                                         R4=0;
  71.                                         Delay(15000);
  72.                                         R4=1;
  73.                                 }
  74.                         

  75.                 }

  76.         if(myKEY=='Y' )          //发送字母U
  77.                 {
  78.                
  79.                 temp=myKEY;
  80.                 myKEY=0;

  81.                         if(temp=='Y')
  82.                                 {
  83.                                         R5=1;
  84.                                         Delay(17000);
  85.                                         R5=0;
  86.                                 }
  87.                           }
  88.         if(myKEY=='J' )          //发送字母U
  89.                 {
  90.                
  91.                 temp=myKEY;
  92.                 myKEY=0;

  93.                         if(temp=='J')
  94.                                 {
  95.                                         R6=1;
  96.                                         Delay(17000);
  97.                                         R6=0;
  98.                                 }  
  99.                          }
  100.         if(myKEY=='M' )          //发送字母U
  101.                 {
  102.                
  103.                 temp=myKEY;
  104.                 myKEY=0;

  105.                         if(temp=='M')
  106.                                 {
  107.                                         R7=1;
  108.                                         Delay(17000);
  109.                                         R7=0;
  110.                                 }  
  111.                                 }
  112.         if(myKEY=='N' )          //发送字母U
  113.                 {
  114.                
  115.                 temp=myKEY;
  116.                 myKEY=0;

  117.                         if(temp=='N')
  118.                                 {
  119.                                         R8=1;
  120.                                         Delay(17000);
  121.                                         R8=0;
  122.                                 }  
  123.         
  124.         
  125.         



  126.         }
  127. }
  128. }

  129. void int_int0(void) interrupt 4                //串口中断程序
  130. {
  131.         if(RI==1)          //如果是接收中断
  132.         {
  133.                 myKEY=SBUF;                  //接收电脑发送过来的键盘值
  134.                 RI=0;        
  135.                

  136.         }
  137. else
  138.         {
  139.                 TI=0;
  140.         }
  141. }
  142. void Delay(unsigned int t)
  143. {
  144. while(--t);
  145. }




Bermanrep 发表于 2016-8-16 16:26 | 显示全部楼层
你这个是云台内部的程序吧,那外部通过485和云台通讯的程序有没有
玛尼玛尼哄 发表于 2016-8-17 20:01 | 显示全部楼层
24V的交流电机啊,还是三相电机啊。
zhuomuniao110 发表于 2016-8-25 21:44 来自手机 | 显示全部楼层
都是用485通讯的,要不就是走网络模块
heisexingqisi 发表于 2016-8-25 22:46 | 显示全部楼层
C2051的烧录工具好像跟C51的不同吧。
捉虫天师 发表于 2016-8-27 21:31 | 显示全部楼层
搞的好复杂驱动上,最好用集成的芯片,一片搞定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

123

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部