用51單片機做的太陽能自動追光系統仿真圖 電路圖(proteus仿真文件可以從51黑本貼附件下載):
0.png (40.42 KB, 下載次數: 318)
下載附件
2016-4-24 19:10 上傳
太陽能自動追光系統的全部文件:
0.png (71.53 KB, 下載次數: 253)
下載附件
2016-4-24 19:09 上傳
全部資料(壓縮包)下載:
太陽能自動追光系統.zip
(48.51 KB, 下載次數: 1180)
2016-4-23 20:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
下面是部分程序預覽(完整版本請下載本帖附件):
- #include <reg52.h>
- #include <intrins.h>
- sbit spb=P1^0; //水平方向反轉使能端
- sbit czb=P1^1; //垂直方向反轉使能端
- sbit spa=P1^2; //水平方向正傳使能端
- sbit cza=P1^3; //垂直方向正傳使能端
- char zhuan[8]={0xe6,0xc7,0xd3,0x9b,0xb9,0x3d,0x7c,0x6e};
- bit ka,kb,ma,mb;
- int ia,ib;
- /*******************************************************
- 電機轉動延時子函數
- ********************************************************/
- void delay_dianji(unsigned int t) //電機轉動延時函數
- {
- unsigned int k;
- while(t--)
- {
- for(k=0; k<300; k++) //k從0自加一至300
- { }
- }
- }
- /*******************************************************
- 電機運轉子函數
- ********************************************************/
- void dianji() //電機運轉子函數
- {
- if(ma==1)
- {
- if(ka==0) //若正傳標志位有效
- {
- ia++; //水平數據位自加一
- if(ia>7)ia=0; //數據位大于7,變為0
- }
- if(ka==1) //若反轉標志位有效
- {
- ia--; //水平數據位自減一
- if(ia<0)ia=7; //數據位小于0,變為7
- }
- }
- if(ma==0)ia=ia; //若水平方向轉動標志位失效,水平方向數據位維持不變
- if(mb==1) //垂直轉動標志位有效
- {
- if(kb==0) //若正轉標志位有效
- {
- ib++; //垂直數據位自加一
- if(ib>7)ib=0; //數據位大于7,變為0
- }
- if(kb==1) //若反轉標志有效
- {
- ib--; //垂直數據位自減一
- if(ib<0)ib=7; //數據位小于0,變為7
- }
- }
- if(mb==0)ib=ib; //若垂直方向轉動標志位失效,垂直方向數據位維持不變
- P0=zhuan[ia]; //P0發送水平轉動碼
- P2=zhuan[ib]; //P2發送垂直轉動碼
- delay_dianji(15); //調用電機延時函數
- ma=0; //水平轉動標志位失效
- mb=0; //垂直轉動標志位失效
- }
- //*******************************************************
-
- //********************************************************
- void fangxiang() //識別方向子函數
- {
- if(spa==1) //水平正傳使能端有效
- {
- ma=1; //水平方向電機轉動
- ka=0; //轉動方向為正向
- }
- if(spb==1) //水平反轉使能端有效
- {
- ma=1; //水平方向電機轉動
- ka=1; //轉動方向為反向
- }
- if(cza==1) //垂直正傳使能端有效
- {
- mb=1; //垂直方向電機轉動
- kb=0; //轉動方向為正向
- }
- if(czb==1) //垂直反轉使能端有效
- {
- mb=1; //垂直方向電機轉動
- kb=1; //轉動方向為反向
- }
- }
- /*******************************************************
- 主程序
- ********************************************************/
- main()
- {
- while(1) //死循環
- {
- fangxiang(); //識別方向子函數
- dianji(); //電機運行子函數
- }
- }
復制代碼
|