51单片机追光程序Proteus仿真原理图(太阳能充电)

[复制链接]
查看8 | 回复0 | 2021-6-20 02:44:03 | 显示全部楼层 |阅读模式
1.png 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
2.gif


部分源码:完整源码请下载本文尾部的附件。
  1. /********************************************************************
  2. * 名称   : PSend_Hex()
  3. * 功能   : 发送字符串函数,可控制发送长度
  4. * 变量   : 无
  5. * 返回值 : 无
  6. ********************************************************************/
  7. void Send_Hex(unsigned char *p,unsigned char num)
  8. {
  9.        while(num--)   //剩余发送的字符数
  10.     {
  11.         SBUF = *p; //将要发送的数据赋给串口缓冲寄存器
  12.             while(!TI);//等待发送结束
  13.             TI = 0;    //软件清零
  14.             p++;       //指针加一
  15.     }   
  16. }
  17. void main()       //函数功能:主函数
  18. {      

  19.     uchar AD_Up,AD_Down,AD_Left,AD_Right;
  20.     uchar i,j,k;
  21.     uchar Table[4];
  22.     Delay_ms(2000);
  23.     UART_Init();   
  24.     while(1)
  25.     {
  26.         if(!ENTER)
  27.         {
  28.             Delay_ms(20);
  29.             while(!ENTER);
  30.             k++;   
  31.         }
  32.         if(k == 5)
  33.         {
  34.         LED1 = 1;
  35.         LED2 = 0;
  36.         for(i=0;i<8;i++)
  37.         {
  38.             switch(AD_CHANNEL)
  39.             {
  40.                 case 0: PCF8591_ISendByte(PCF8591,0x41);
  41.                 AD_Up=PCF8591_IRcvByte(PCF8591)*2;  //ADC0 模数转换1
  42.                 break;  
  43.                
  44.                 case 1: PCF8591_ISendByte(PCF8591,0x42);
  45.                 AD_Down=PCF8591_IRcvByte(PCF8591)*2;  //ADC1  模数转换2
  46.                 break;  
  47.                 case 2: PCF8591_ISendByte(PCF8591,0x43);
  48.                 AD_Left=PCF8591_IRcvByte(PCF8591)*2;  //ADC2 模数转换3
  49.                 break;  
  50.                
  51.                 case 3: PCF8591_ISendByte(PCF8591,0x40);
  52.                 AD_Right=PCF8591_IRcvByte(PCF8591)*2;  //ADC3  模数转换4
  53.                 break;
  54.             }

  55.             Send_Hex(Table,4);
  56.             if(++AD_CHANNEL>3)
  57.             {
  58.              AD_CHANNEL=0;
  59.              Table[0] = AD_Up;
  60.             Table[1] = AD_Down;
  61.             Table[2] = AD_Left;
  62.             Table[3] = AD_Right;
  63.              }
  64.         }
  65.         }
  66.         if(k%2 == 1)
  67.         {
  68.             LED1 = 0;
  69.             LED2 = 1;
  70.             AD_Up = 0;    //上
  71.             AD_Down = 0;//下
  72.             AD_Left = 0;//左
  73.             AD_Right = 0;//右   
  74.         }        
  75.         ///////////////////////////
  76.       
  77.         if(((AD_Up<AD_Down)&&(AD_Down-AD_Up>10))||(!UP))//上转
  78.         {
  79.             for(i=0;i<10;i++)
  80.             {
  81.                 for(j=0;j<4;j++)
  82.                 {
  83.                     P2=Motor_Up[j];
  84.                     Delay_ms(10);
  85.                 }        
  86.             }   
  87.         }
  88.         //////////////////////////////////////
  89.         if(((AD_Up>AD_Down)&&(AD_Up-AD_Down>10))||(!DOWN))//下转
  90.         {
  91.             for(i=0;i<10;i++)
  92.             {
  93.                 for(j=0;j<4;j++)
  94.                 {
  95.                     P2=Motor_Down[j];
  96.                     Delay_ms(10);
  97.                 }        
  98.             }
  99.         }
复制代码
完整51单片机c源代码和Protues 仿真文件.zip (364.97 KB, 售价: 5 工控币)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则