|
用51單片機(jī)做的太陽(yáng)能自動(dòng)追光系統(tǒng)仿真圖 電路圖(proteus仿真文件可以從51黑本貼附件下載):
太陽(yáng)能自動(dòng)追光系統(tǒng)的全部文件:
全部資料(壓縮包)下載:
太陽(yáng)能自動(dòng)追光系統(tǒng).zip
(48.51 KB, 下載次數(shù): 1180)
2016-4-23 20:17 上傳
點(diǎn)擊文件名下載附件
下面是部分程序預(yù)覽(完整版本請(qǐng)下載本帖附件):
- #include <reg52.h>
- #include <intrins.h>
- sbit spb=P1^0; //水平方向反轉(zhuǎn)使能端
- sbit czb=P1^1; //垂直方向反轉(zhuǎn)使能端
- 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;
- /*******************************************************
- 電機(jī)轉(zhuǎn)動(dòng)延時(shí)子函數(shù)
- ********************************************************/
- void delay_dianji(unsigned int t) //電機(jī)轉(zhuǎn)動(dòng)延時(shí)函數(shù)
- {
- unsigned int k;
- while(t--)
- {
- for(k=0; k<300; k++) //k從0自加一至300
- { }
- }
- }
- /*******************************************************
- 電機(jī)運(yùn)轉(zhuǎn)子函數(shù)
- ********************************************************/
- void dianji() //電機(jī)運(yùn)轉(zhuǎn)子函數(shù)
- {
- if(ma==1)
- {
- if(ka==0) //若正傳標(biāo)志位有效
- {
- ia++; //水平數(shù)據(jù)位自加一
- if(ia>7)ia=0; //數(shù)據(jù)位大于7,變?yōu)?
- }
- if(ka==1) //若反轉(zhuǎn)標(biāo)志位有效
- {
- ia--; //水平數(shù)據(jù)位自減一
- if(ia<0)ia=7; //數(shù)據(jù)位小于0,變?yōu)?
- }
- }
- if(ma==0)ia=ia; //若水平方向轉(zhuǎn)動(dòng)標(biāo)志位失效,水平方向數(shù)據(jù)位維持不變
- if(mb==1) //垂直轉(zhuǎn)動(dòng)標(biāo)志位有效
- {
- if(kb==0) //若正轉(zhuǎn)標(biāo)志位有效
- {
- ib++; //垂直數(shù)據(jù)位自加一
- if(ib>7)ib=0; //數(shù)據(jù)位大于7,變?yōu)?
- }
- if(kb==1) //若反轉(zhuǎn)標(biāo)志有效
- {
- ib--; //垂直數(shù)據(jù)位自減一
- if(ib<0)ib=7; //數(shù)據(jù)位小于0,變?yōu)?
- }
- }
- if(mb==0)ib=ib; //若垂直方向轉(zhuǎn)動(dòng)標(biāo)志位失效,垂直方向數(shù)據(jù)位維持不變
- P0=zhuan[ia]; //P0發(fā)送水平轉(zhuǎn)動(dòng)碼
- P2=zhuan[ib]; //P2發(fā)送垂直轉(zhuǎn)動(dòng)碼
- delay_dianji(15); //調(diào)用電機(jī)延時(shí)函數(shù)
- ma=0; //水平轉(zhuǎn)動(dòng)標(biāo)志位失效
- mb=0; //垂直轉(zhuǎn)動(dòng)標(biāo)志位失效
- }
- //*******************************************************
-
- //********************************************************
- void fangxiang() //識(shí)別方向子函數(shù)
- {
- if(spa==1) //水平正傳使能端有效
- {
- ma=1; //水平方向電機(jī)轉(zhuǎn)動(dòng)
- ka=0; //轉(zhuǎn)動(dòng)方向?yàn)檎?br />
- }
- if(spb==1) //水平反轉(zhuǎn)使能端有效
- {
- ma=1; //水平方向電機(jī)轉(zhuǎn)動(dòng)
- ka=1; //轉(zhuǎn)動(dòng)方向?yàn)榉聪?br />
- }
- if(cza==1) //垂直正傳使能端有效
- {
- mb=1; //垂直方向電機(jī)轉(zhuǎn)動(dòng)
- kb=0; //轉(zhuǎn)動(dòng)方向?yàn)檎?br />
- }
- if(czb==1) //垂直反轉(zhuǎn)使能端有效
- {
- mb=1; //垂直方向電機(jī)轉(zhuǎn)動(dòng)
- kb=1; //轉(zhuǎn)動(dòng)方向?yàn)榉聪?br />
- }
- }
- /*******************************************************
- 主程序
- ********************************************************/
- main()
- {
- while(1) //死循環(huán)
- {
- fangxiang(); //識(shí)別方向子函數(shù)
- dianji(); //電機(jī)運(yùn)行子函數(shù)
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|