能够自动寻光,追寻太阳,开关的作用就是相当于光敏电阻,当为低电平是,停止寻光
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
-
- sbit hor1=P1^0; //水平方向正转使能端
- sbit hor2=P1^1; //水平方向反传使能端
- sbit ver1=P1^2; //垂直方向正转使能端
- sbit ver2=P1^3; //垂直方向反传使能端
- uchar code FWD[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正转
- uchar code REV[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反转
- bit ka1,ka2,kb1,kb2,hormotor,vermotor;
- uint ia,ib;
- /*******************************************************
- 电机转动延时子函数
- ********************************************************/
- void delay_dianji(unsigned int t) //电机转动延时函数
- {
- unsigned int k;
- while(t--)
- {
- for(k=0; k<300; k++) //k从0自加一至300
- { }
- }
- }
-
- void fangxiang() //识别方向子函数
- {
- if(hor1==0) //水平正传使能端有效
- {
- ia++;
- if(ia>7)
- ia=0;
- P0=FWD[ia]; //转动方向为正向
- delay_dianji(15);
- }
- if(hor2==0) //水平反转使能端有效
- {
- ia++;
- if(ia>7)
- ia=0;
- P0=REV[ia]; //转动方向为反向
- delay_dianji(15);
- }
- if(ver1==0) //垂直正传使能端有效
- {
- ib++;
- if(ib>7)
- ib=0;
- P2=FWD[ib]; //转动方向为正向
- delay_dianji(15);
- }
- if(ver2==0) //垂直反转使能端有效
- {
- ib++;
- if(ib>7)
- ib=0;
- P2=REV[ib]; //转动方向为反向
- delay_dianji(15);
- }
- }
- main()
- {
- while(1) //死循环
- {
- fangxiang(); //识别方向子函数
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
电机.rar
(81.24 KB, 下载次数: 108)
|