久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2082|回復: 2
打印 上一主題 下一主題
收起左側

飛思卡爾比賽后的代碼和原理圖PCB

[復制鏈接]
跳轉到指定樓層
樓主
ID:244481 發表于 2017-10-31 11:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

全部資料51hei下載地址:
液晶3(可用3).zip (665.28 KB, 下載次數: 16)


單片機源程序如下:
  1. #include "derivative.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include"OLED12864.h"
  5. int AD_wValue[6];//AD轉換結果
  6. word AD[6]={0,0,0,0,0,0};
  7. word AD_erro[4]={0,0,0,0};
  8. int i;
  9. //word AD_value[9]={0,0,0,0,0,0,0,0,0};
  10. int i,numbermax,AD_valuemax,AD_valuemax2,Remax,Remax2;
  11. int numbermax2,Expect_value,Expect_value2,Renumber,Renumber2;
  12. float temp,angle;
  13. int directflag;
  14. char out_flag1,out_flag0;
  15. //char out_flag0,out_flag1;

  16. void delay(int n)
  17. {
  18.    int i,j;
  19.    for(i=0;i<n;i++);
  20. }
  21.    
  22. //-----時鐘初始化程序--------//
  23. void PLL_Init(void)      
  24. {                    
  25.   REFDV=1;           
  26.   SYNR=2;
  27.   while(!(CRGFLG&0x08));
  28.   CLKSEL=0x80;
  29. }

  30. //---------------------------------------------------------------------
  31. // 函數功能:配置單片機鎖相環,使其工作在40Mhz
  32. // 形式參數:  無
  33. // 函數返回值:無   
  34. //---------------------------------------------------------------------
  35. void BusCLK_40M(void)
  36. {   
  37.     CLKSEL=0X00;                                //disengage PLL to system
  38.     PLLCTL_PLLON=1;                        //turn on PLL
  39.     SYNR =0xc0 | 0x04;                        
  40.     REFDV=0x80 | 0x01;
  41.     POSTDIV=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
  42.     _asm(nop);          //BUS CLOCK=40M
  43.     _asm(nop);
  44.     while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
  45.     CLKSEL_PLLSEL =1;                        //engage PLL to system;
  46. }

  47. void Init_PWM(void)
  48. {
  49.     PWME=0X00;  
  50.     PWMCTL_CON01=1;      //通道級聯
  51.     PWMCTL_CON23=1;
  52.     PWMCTL_CON45=1;
  53.     PWMCAE=0X00;      //0左對齊 1中心對齊
  54.     PWMPRCLK=0X22;    //2分頻
  55.     PWMPOL_PPOL1=1;  
  56.     PWMPOL_PPOL5=1;
  57.     PWMPOL_PPOL3=1;
  58.   //PWMCNT01 = 0;              //計數器從零開始計數
  59.   //PWMCNT23 = 0;              //計數器從零開始計數
  60.   
  61.    PWMSCLA=1;
  62.    PWMSCLB=0X19;
  63.    PWMCLK_PCLK1=0;
  64.    PWMCLK_PCLK5=1;
  65.    PWMCLK_PCLK3=1;
  66.    //PWMPRCLK =0x00;         //選擇時鐘B,50MHZ
  67.    
  68.    PWMCLK=0XFF;
  69.    
  70.    PWMPER01 = 1000;           //周期 20ms
  71.    PWMPER45 = 1000;           //周期 20ms
  72.    PWMPER23=4000;            //200hz   周期0.005ms
  73.          
  74.    PWMDTY01 = 670;
  75.    PWMDTY45 = 670;            
  76.    PWMDTY23=315;              //317zhong  347zuo  280you
  77.      

  78.    PWME_PWME3 = 1;                     
  79.    PWME_PWME1 = 1;
  80.    PWME_PWME5=1;            
  81. }


  82. //--------------總線時鐘=48/2=24MHz------------//
  83. //-----ATD初始化程序--------//
  84. void AD_Init(void)     
  85. {
  86.   ATD0CTL1=0x00; //00000000  選擇AD0通道為外部觸發,8 位精度,采樣前不放電
  87.   ATD0CTL2=0x40; //01000000  標志位自動清零,禁止外部觸發, 禁止中斷
  88.   ATD0CTL3=0xb0; //10001000  右對齊無符號,每次轉換1 個序列, No FIFO, Freeze 模式下繼續轉
  89.   ATD0CTL4=0x03; //00000001  采樣時間為4 個AD 時鐘周期,PRS=1,ATDClock=24/(2*(1+1))=6MHz
  90.   ATD0CTL5=0x30; //00100000  特殊通道禁止,連續轉換,單通道轉換,輸入通道為0
  91.   ATD0DIEN=0x00; //00000000  禁止數字輸入
  92. }
  93. //-----讀取AD轉換結果--------//
  94. void AD_GetValue()
  95. {
  96.   AD_wValue[0]=ATD0DR0;  //讀取結果寄存器的值
  97.   AD_wValue[1]=ATD0DR1;  //讀取結果寄存器的值
  98.   AD_wValue[2]=ATD0DR2;  //讀取結果寄存器的值
  99.   AD_wValue[3]=ATD0DR3;  //讀取結果寄存器的值
  100.   AD_wValue[4]=ATD0DR4;
  101.   AD_wValue[5]=ATD0DR5;

  102. }

  103. void remember_ADvalue()
  104. {
  105.      AD[0]=AD_wValue[0];
  106.      AD[1]=AD_wValue[1];
  107.      AD[2]=AD_wValue[2];
  108.      AD[3]=AD_wValue[3];
  109.      AD[4]=AD_wValue[4];
  110.      AD[5]=AD_wValue[5];
  111. }

  112. void xiuzhen_ADvalue()
  113. {
  114.    for(i=0;i<=5;i++)
  115.    AD_erro[i]=AD_wValue[i]-AD[i];
  116.    if(AD_erro[i]>10)
  117.    AD_wValue[i]=AD[i];
  118.    else
  119.    AD_wValue[i]=AD_wValue[i];  
  120. }
  121.          
  122. void Get_Road()            
  123. {
  124.        for(i=0;i<=3;i++)
  125.        {
  126.          if(AD[i]>AD_valuemax)
  127.           {
  128.           AD_valuemax=AD[i];         //采集AD的最大值
  129.           numbermax=i;                      //記錄最大值的通道
  130.         //  Remax=AD_valuemax;
  131.         //  Renumber=i;
  132.           }
  133.         //  else
  134.         //  {
  135.         //  AD_valuemax=Remax;
  136.         //  i=Renumber;
  137.         //  }
  138.        }
  139.           for(i=0;i<=3;i++)
  140.           {
  141.             if(AD[i]>AD_valuemax2&&AD[i]<AD_valuemax)
  142.             {
  143.              AD_valuemax2=AD[i];
  144.              numbermax2=i;
  145.            //  Remax2=AD_valuemax2;
  146.             // Renumber2=i;
  147.             }
  148.            // else
  149.             //{AD_valuemax=Remax2;
  150.            // i=Renumber2;}
  151.          }
  152.   switch (numbermax) {
  153.     case 0: Expect_value=30; if(AD_valuemax>60)directflag=1;break;
  154.     case 1: Expect_value=10;  break;
  155.     case 2: Expect_value=-10;  break;
  156.     case 3: Expect_value=-30;   if(AD_valuemax>60)directflag=2;break;
  157.     //case 4: Expect_value=-50; break;
  158.     //case 5: Expect_value=-150; if(AD_valuemax>80)directflag=2;break;
  159.     //case 6: Expect_value=-200;if(AD_valuemax>80)directflag=2;break;
  160.   }
  161.   switch (numbermax2) {
  162.     case 0: Expect_value2=30;  break;
  163.     case 1: Expect_value2=10;  break;
  164.     case 2: Expect_value2=-10;   break;
  165.     case 3: Expect_value2=-30;    break;
  166.     //case 4: Expect_value2=-50;  break;
  167.     //case 5: Expect_value2=-150; break;
  168.     //case 6: Expect_value2=-200; break;
  169.    }
  170. }
  171. void change_duoji()                                                            
  172.   {
  173.    if(numbermax>numbermax2) temp=(Expect_value+Expect_value2)/2-(AD_valuemax-AD_valuemax2)/2;
  174.    if(numbermax<numbermax2) temp=(Expect_value+Expect_value2)/2+(AD_valuemax-AD_valuemax2)/2;
  175.    
  176.    if(AD_wValue[0]>100||AD_wValue[1]>100||AD_wValue[2]>100||AD_wValue[3]>100)
  177.    {
  178.    if(numbermax<1)      {angle=temp*0.30+315;PWMDTY45=100;PWMDTY01=570;}
  179.    else if(numbermax>2) {angle=temp*0.30+315;PWMDTY45=570;PWMDTY01=100;}
  180.    else angle=temp*0.20+315;
  181.    }
  182.    
  183.    else if(AD_wValue[4]>AD_wValue[5])   angle=((AD_wValue[4]-AD_wValue[5])/2)*0.7+325;
  184.    else if(AD_wValue[5]>AD_wValue[4])   angle=305-((AD_wValue[5]-AD_wValue[4])/2)*0.70;
  185.    
  186.    if(angle>350)      
  187.    {
  188.    angle=350;
  189.    PWMDTY45=100;
  190.    PWMDTY01=570;
  191.    }
  192.    if(angle<280)      
  193.    {
  194.    angle=280;
  195.    PWMDTY45=570;
  196.    PWMDTY01=100;
  197.    }
  198.    
  199.    if(directflag==1&&AD_valuemax2<40)  angle=350;
  200.    if(directflag==2&&AD_valuemax2<40)  angle=280;
  201.    PWMDTY23=(int)angle;
  202.    AD_valuemax=0;AD_valuemax2=0;      
  203.   }

  204. //-----主函數--------//
  205. void main(void)
  206. {
  207.   char e[100] ;
  208.   //PLL_Init();
  209.   BusCLK_40M();
  210.   AD_Init();
  211.   Init_PWM();
  212.   DDRB=0XFF;
  213.   PORTB=0XFF;
  214.   LCD_Init();
  215.   EnableInterrupts;
  216.                                                   
  217.   for(;;)
  218.   {
  219. ……………………

  220. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:242544 發表于 2018-1-8 16:19 | 只看該作者
不錯,很實用
回復

使用道具 舉報

板凳
ID:242544 發表于 2018-1-8 16:19 | 只看該作者
不錯,很實用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品av久久久久久久久久 | 国产精品一区网站 | 91欧美激情一区二区三区成人 | 久久精品天堂 | 精品国产乱码久久久久久果冻传媒 | 日韩成人免费视频 | 国内精品视频免费观看 | 国产高清视频一区 | 国产美女免费视频 | 中文字幕日韩欧美一区二区三区 | 久久久久久国产精品免费免费男同 | 精品欧美黑人一区二区三区 | 国产目拍亚洲精品99久久精品 | 欧美日韩一二三区 | 国产精品99久久久久久久久 | 日本精品一区二区在线观看 | 日本韩国欧美在线观看 | 亚洲一区二区久久 | 日韩一级免费大片 | 天天天天操 | www国产精 | 中文字幕国产 | 精品欧美一区二区三区久久久 | 五月婷婷中文 | 黄色片免费看视频 | 国产精品国产三级国产aⅴ浪潮 | 五月婷婷亚洲 | 九九综合 | 国产精品视频不卡 | 国产精品91网站 | 久久99精品久久久久蜜桃tv | 亚洲成人精 | 国产99免费视频 | 成人欧美一区二区三区在线观看 | 国产成人精品一区二区三区在线 | 亚洲成色777777在线观看影院 | 精品1区2区3区 | 一区二区久久 | 精品国产一区二区三区久久久久久 | 国产精品福利视频 | 91精品国产综合久久久久久 |