找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6131|回復(fù): 5
收起左側(cè)

51單片機(jī)雙軸追光程序Proteus仿真原理圖(太陽能充電)

  [復(fù)制鏈接]
ID:856585 發(fā)表于 2021-6-17 18:31 | 顯示全部樓層 |閱讀模式
本來想整個(gè)雙軸的,但是整出來太丑了,所以換成單軸了,我把他分為兩個(gè)。一個(gè)雙軸的,一個(gè)oled屏幕顯示光照強(qiáng)度,單軸的
我自己加了一個(gè)充放電模塊,配了一個(gè)太陽能板,和12864電池
同時(shí)也有pcb圖

制作出來的實(shí)物圖如下:

實(shí)物單軸

實(shí)物單軸


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

proteus仿真圖

proteus仿真圖
51hei.gif
單片機(jī)源程序如下:
#include <reg52.h>
#include <stdio.h>
#include "PCF8591.H"

#define uchar unsigned char
#define uint  unsigned int

#define  PCF8591 0x90    //PCF8591 地址

sbit ENTER = P3^3;
sbit UP = P3^4;
sbit DOWN = P3^5;
sbit LEFT = P3^6;
sbit RIGHT = P3^7;

sbit LED1 = P1^2;
sbit LED2 = P1^3;
uchar Motor_Up[4]={0x08,0x04,0x02,0x01};
uchar Motor_Down[4]={0x01,0x02,0x04,0x08};


//uchar Motor_Left[4]={0x10,0x20,0x40,0x80};
//uchar Motor_Right[4]={0x80,0x40,0x20,0x10};

unsigned char AD_CHANNEL;
//延時(shí)函數(shù)
void Delay_ms(uint jj)
{
    uint ii;
    while(jj--)
        for(ii=0;ii<125;ii++);
}
void UART_Init(void)
{
     TMOD = 0x20;   //定時(shí)器模式選擇
     PCON = 0x00;
     SCON = 0x50;            
     TH1 = 0xFd;    //設(shè)置波特率 9600
     TL1 = 0xFd;
     TR1 = 1;        //啟動(dòng)定時(shí)器1
       ES = 1;        //開串口中斷
       EA = 1;        //開總中斷        
}
/********************************************************************
* 名稱   : PSend_Hex()
* 功能   : 發(fā)送字符串函數(shù),可控制發(fā)送長度
* 變量   : 無
* 返回值 : 無
********************************************************************/
void Send_Hex(unsigned char *p,unsigned char num)
{
       while(num--)   //剩余發(fā)送的字符數(shù)
    {
        SBUF = *p; //將要發(fā)送的數(shù)據(jù)賦給串口緩沖寄存器
            while(!TI);//等待發(fā)送結(jié)束
            TI = 0;    //軟件清零
            p++;       //指針加一
    }   
}
void main()       //函數(shù)功能:主函數(shù)
{      

    uchar AD_Up,AD_Down,AD_Left,AD_Right;
    uchar i,j,k;
    uchar Table[4];
    Delay_ms(2000);
    UART_Init();   
    while(1)
    {
        if(!ENTER)
        {
            Delay_ms(20);
            while(!ENTER);
            k++;   
        }
        if(k == 5)
        {
        LED1 = 1;
        LED2 = 0;
        for(i=0;i<8;i++)
        {
            switch(AD_CHANNEL)
            {
                case 0: PCF8591_ISendByte(PCF8591,0x41);
                AD_Up=PCF8591_IRcvByte(PCF8591)*2;  //ADC0 模數(shù)轉(zhuǎn)換1
                break;  
               
                case 1: PCF8591_ISendByte(PCF8591,0x42);
                AD_Down=PCF8591_IRcvByte(PCF8591)*2;  //ADC1  模數(shù)轉(zhuǎn)換2
                break;  
                case 2: PCF8591_ISendByte(PCF8591,0x43);
                AD_Left=PCF8591_IRcvByte(PCF8591)*2;  //ADC2 模數(shù)轉(zhuǎn)換3
                break;  
               
                case 3: PCF8591_ISendByte(PCF8591,0x40);
                AD_Right=PCF8591_IRcvByte(PCF8591)*2;  //ADC3  模數(shù)轉(zhuǎn)換4
                break;
            }

            Send_Hex(Table,4);
            if(++AD_CHANNEL>3)
            {
             AD_CHANNEL=0;
             Table[0] = AD_Up;
            Table[1] = AD_Down;
            Table[2] = AD_Left;
            Table[3] = AD_Right;
             }
        }
        }
        if(k%2 == 1)
        {
            LED1 = 0;
            LED2 = 1;
            AD_Up = 0;    //上
            AD_Down = 0;//下
            AD_Left = 0;//左
            AD_Right = 0;//右   
        }        
        ///////////////////////////
      
        if(((AD_Up<AD_Down)&&(AD_Down-AD_Up>10))||(!UP))//上轉(zhuǎn)
        {
            for(i=0;i<10;i++)
            {
                for(j=0;j<4;j++)
                {
                    P2=Motor_Up[j];
                    Delay_ms(10);
                }        
            }   
        }
        //////////////////////////////////////
        if(((AD_Up>AD_Down)&&(AD_Up-AD_Down>10))||(!DOWN))//下轉(zhuǎn)
        {
            for(i=0;i<10;i++)
            {
                for(j=0;j<4;j++)
                {
                    P2=Motor_Down[j];
                    Delay_ms(10);
                }        
            }
        }
        /////////////////////////////
//        if(((AD_Left<AD_Right)&&(AD_Right-AD_Left>10))||(!LEFT))//左轉(zhuǎn)
//        {
//            for(i=0;i<10;i++)
//            {
//                for(j=0;j<4;j++)
//                {
//                    P2=Motor_Left[j];
//                    Delay_ms(10);
//                }        
//            }
//        
//        }
//        //////////////////////////////////////
//        if(((AD_Left>AD_Right)&&(AD_Left-AD_Right>10))||(!RIGHT))//右轉(zhuǎn)
//        {
//            for(i=0;i<10;i++)
//            {
//                for(j=0;j<4;j++)
//                {
//                    P2=Motor_Right[j];
//                    Delay_ms(10);
//                }        
//            }
//        }
        ////////////////////////////////////
        Delay_ms(100);//延時(shí),可適當(dāng)修改
    }
}
全部資料51hei下載地址:
仿真: 04 Protues 仿真工程.rar (199.13 KB, 下載次數(shù): 170)
仿真程序: 03 KEIL-程序工程.rar (64.71 KB, 下載次數(shù): 119)
修改后的程序: 太陽追光改.rar (69.27 KB, 下載次數(shù): 144)

評分

參與人數(shù) 2黑幣 +92 收起 理由
ag26259 + 12 贊一個(gè)!
admin + 80 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:582255 發(fā)表于 2021-10-24 21:51 | 顯示全部樓層
請問一下,你這四個(gè)光敏電阻能分辨出光電板子的角度嗎?是不是用個(gè)手電筒模擬照射四個(gè)光敏電阻來模擬?
回復(fù)

使用道具 舉報(bào)

ID:91165 發(fā)表于 2021-10-25 11:49 | 顯示全部樓層
俯仰角一年也不用調(diào)整幾次吧
回復(fù)

使用道具 舉報(bào)

ID:1019920 發(fā)表于 2022-4-20 00:34 | 顯示全部樓層
這個(gè)對我很有幫助
回復(fù)

使用道具 舉報(bào)

ID:685250 發(fā)表于 2023-7-11 16:01 | 顯示全部樓層
牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛
回復(fù)

使用道具 舉報(bào)

ID:433219 發(fā)表于 2024-3-13 14:54 | 顯示全部樓層
當(dāng) 模型 玩,還是好玩的。。。商品化的成本路就很長了
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表