初次發帖,感謝大家。太陽能自動跟蹤系統仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include "lcd1602.h" //lcd 包含的頭文件
- #include "adc0809.h" //adc0809包含的頭文件
- #include "motor.h" //電機包含的頭文件
- #include "key.h" //按鍵頭文件
- int Max_Value_Gallery=0; //記錄最大的通道號
- extern char Start_Convert; //按鍵是否按下狀態標識
- int Timing=0;
- extern char Timing_Ok; //定時器計時時間到達標識
- void main()
- {
- int i=0;
- LcdInit(); //LCD的初始化函數
- ADC0809_Init(); //ADC0809的初始化函數
- //主循環函數
- while(1)
- {
- Key_Scanf(); //按鍵掃描函數
- Max_Value_Gallery=Data_Compare(); //通過比較找出光照最強的點
- Motor(); //電機控制函數
- i=120; //120s即2分鐘
- while(i--)
- {
- Lcd1602_Delay1ms(1000);
- if(K1==0)
- break;
- }
- }
- }
復制代碼- #include "motor.h"
- #include "lcd1602.h"
- extern int Max_Value_Gallery;
- void Delay_Motor(int z) //電機延時函數
- {
- while(z--);
- }
- //電機控制函數
- //max為512電機轉動一周 為43轉動30度 86
- void Motor()
- {
- char a;
- int Max=0; //
- LcdWriteCom(0x80+0x40+12);
- switch(Max_Value_Gallery)
- {
- case 0: //0度
- Max=0;
- LcdWriteData('0');
- LcdWriteData('0');
- LcdWriteData(' ');
- break;
- case 1: //30度
- Max=43;
- LcdWriteData('3');
- LcdWriteData('0');
- LcdWriteData(' ');
- break;
- case 2: //60度
- Max=86;
- LcdWriteData('6');
- LcdWriteData('0');
- LcdWriteData(' ');
- break;
-
- case 3: //90度
- Max=129;
- LcdWriteData('9');
- LcdWriteData('0');
- LcdWriteData(' ');
- break;
- case 4: //120度
- Max=172;
- LcdWriteData('1');
- LcdWriteData('2');
- LcdWriteData('0');
- break;
- case 5: //150度
- Max=215;
- LcdWriteData('1');
- LcdWriteData('5');
- LcdWriteData('0');
- break;
- case 6: //180度
- Max=258;
- LcdWriteData('1');
- LcdWriteData('8');
- LcdWriteData('0');
- break;
- default:
- break;
- }
- while(Max--)
- {
- for(a=0;a<4;a++)
- {
- switch(a)
- {
- case 0:
- {
- OUT1=1;
- OUT2=0;
- OUT3=0;
- OUT4=0;
- }
- break;
- case 1:
- {
- OUT1=0;
- OUT2=1;
- OUT3=0;
- OUT4=0;
- }
- break;
- case 2:
- {
- OUT1=0;
- OUT2=0;
- OUT3=1;
- OUT4=0;
- }
- break;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
51單片機太陽能跟蹤系統(附仿真及程序).7z
(58.4 KB, 下載次數: 290)
2019-5-17 04:08 上傳
點擊文件名下載附件
|