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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于STC12C5A60S2的電磁循跡小車源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:254433 發表于 2018-6-16 17:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
采用STC12C5A60S2采集AD信號小車循跡

單片機源程序如下:
  1. #include <STC12C5A60S2.H>
  2. #include "intrins.h"
  3. #include "Common.h"         //通用宏定義
  4. #include "delay.h"         //通用延時程序
  5. #include "PWM_TIME.h" //模擬PWM
  6. #include "ADC.H"

  7. #define k1 0.1
  8. #define k2 0.1

  9. void AD_send();

  10. fp32 AD_chuli(uchar *s1, uchar *s2);

  11. fp32 Engine_PWM = Engine_Left;
  12. uchar a1 = 100, a2 = 100;
  13. int error;
  14. uchar flag;
  15. uchar flag1 = 0;
  16. uchar flag2;
  17. extern INT32 kk;

  18. void Init0_Init()
  19. {
  20.         
  21.     IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
  22.     EX0 = 1;                        //enable INT0 interrupt
  23.     EA = 1;                         //open global interrupt switch
  24. }
  25. void main(void)
  26. {
  27.         InitADC();
  28.         InitUart();
  29.         Init_PWM_TIME();
  30.         Init0_Init();
  31.         while(1)
  32.         {
  33.                
  34.                
  35.                         if(flag == 1)
  36.                         {
  37.                                 a1 = 0, a2 = 0;
  38.                                 Engine_PWM = Engine_Mid;
  39.                                 error = -150;
  40.                         }
  41.                
  42.                 Engine_PWM = AD_chuli(&a1, &a2);
  43.                 //AD_send();
  44.             change_Motor(a1,a2);
  45.             change_Engine(Engine_PWM);

  46.         }
  47. }

  48. void AD_send()
  49. {
  50.         ShowResult(1); //show ChabneP10
  51.         ShowResult(2); //P11
  52.         ShowResult(3); //P12
  53.         //ShowResult(4);
  54.         //ShowResult(7);
  55.         //ShowResult(6);
  56.         Delay(30);
  57.         
  58. }

  59. fp32 AD_chuli(uchar *s1, uchar *s2)
  60. {
  61.         fp32 temp;
  62.         error = GetADCResult(2) - GetADCResult(1);
  63.         if(flag != 1)
  64.         {
  65.                 if(GetADCResult(1) > GetADCResult(2))
  66.                 {
  67.                         

  68.                                 Engine_PWM = k2 * error + Engine_Mid;
  69.                                 *s1 = 100, *s2 = 100;
  70.                                 flag2 = 1;
  71.                         if(error < -60)
  72.                         {
  73.                                 //Engine_PWM = k2 * error + Engine_Mid;
  74.                                 flag1 = 1;
  75.                                 temp = Engine_PWM;
  76.                                 *s1 = 100, *s2 = 100;
  77.                         }
  78.                         
  79.                         
  80.                 }
  81.                
  82.                 else if(GetADCResult(2) > GetADCResult(1))
  83.                 {
  84.                         
  85.                                 
  86.                                 Engine_PWM = k2 * error + Engine_Mid;
  87.                                 *s1 = 100, *s2 = 100;
  88.                                 flag2 = 2;
  89.                         if(error > 60)
  90.                         {
  91.                                 //Engine_PWM = k2 * error + Engine_Mid;
  92.                                 flag1 = 2;
  93.                                 temp = Engine_PWM;
  94.                                 *s1 = 100, *s2 = 100;
  95.                         }

  96.                 }
  97.         }
  98.         if(GetADCResult(2) == 0  && GetADCResult(1) == 0 && GetADCResult(3) == 0)
  99.         {
  100.                 if(flag != 1)
  101.                 {
  102.                         
  103.                         if(flag2 != 2)
  104.                         {
  105.                                 if(flag1 == 1)
  106.                                 {
  107.                                                 Engine_PWM = temp;*s1 = 100, *s2 = 100;
  108.                                 }
  109.                                 else
  110.                                 {
  111.                                                 Engine_PWM = Engine_Left;
  112.                                 }
  113.                         }
  114.                         else if(flag2 != 1)
  115.                         {
  116.                                 if(flag1 == 2)
  117.                                 {
  118.                                                 Engine_PWM = temp;*s1 = 100, *s2 = 100;
  119.                                 }
  120.                                 else
  121.                                 {
  122.                                         Engine_PWM = Engine_Right;
  123.                                 }
  124.                         }
  125.                         
  126.                 }
  127.         }
  128.         
  129.         
  130.         
  131.         if(Engine_PWM <= Engine_Left)
  132.         {
  133.                         Engine_PWM = Engine_Left;
  134.         }
  135.         else if(Engine_PWM >= Engine_Right)
  136.         {
  137.                         Engine_PWM = Engine_Right;
  138.         }
  139.         
  140.         
  141.         return Engine_PWM;
  142.         
  143. }

  144. void Int0_Routine(void) interrupt 0
  145. {
  146.         
  147.         if(kk >= 100000)
  148.         {
  149.                 flag = 1;
  150.         }
  151.         else
  152.         {
  153.                 flag = 2;
  154.         }
  155.                
  156.         
  157. }

  158. /* 中斷服務程序的編號
  159. void Int0_Routine(void) interrupt 0;                 外部中斷0(INT0)
  160. void Timer0_Rountine(void) interrupt 1;          定時器0中斷
  161. void Int1_Routine(void) interrupt 2;                  外部中斷1(INT1)
  162. void Timer1_Rountine(void) interrupt 3;                   定時器1中斷
  163. void UART_Routine(void) interrupt 4;                   串口1(UART1)中斷
  164. void ADC_Routine(void) interrupt 5;                          A/D轉換中斷
  165. void LVD_Routine(void) interrupt 6;                        低壓檢測(LVD)中斷
  166. void PCA_Routine(void) interrupt 7;                        PCA中斷
  167. void UART2_Routine(void) interrupt 8;                串口2中斷
  168. void SPI_Routine(void) interrupt 9                         SPI中斷
  169. */
復制代碼

所有資料51hei提供下載:
小車控制.zip (119.94 KB, 下載次數: 96)


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

使用道具 舉報

沙發
ID:257207 發表于 2019-4-3 23:31 | 只看該作者
嘿嘿 學習學習
回復

使用道具 舉報

板凳
ID:511145 發表于 2019-4-13 14:12 | 只看該作者
借鑒一下
回復

使用道具 舉報

地板
ID:780742 發表于 2021-3-18 23:38 | 只看該作者
問下樓主電磁傳感器使用的是什么傳感器呢?有沒有芯片的中文資料呀?
回復

使用道具 舉報

5#
ID:377166 發表于 2022-8-17 11:43 | 只看該作者
求分享電路圖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区亚洲 | 激情欧美日韩一区二区 | 精品九九九 | 精品久久九 | 欧美成人一区二免费视频软件 | 日韩精品在线看 | 亚洲黄色一级毛片 | 国产欧美日韩精品在线观看 | 亚洲国产欧美精品 | 国产高清视频 | 亚洲精品成人av久久 | 国产一级片一区二区三区 | 亚洲精品国产第一综合99久久 | 中文字幕欧美日韩一区 | 国产日韩av一区二区 | 午夜av电影院 | 国产在线观看一区二区 | 一区网站| 九久久 | 亚洲视频免费在线观看 | 日日操天天射 | jizz亚洲人 | 福利久久 | 国产精品久久久久久 | 国产综合一区二区 | 久草网址 | 久久久国产精品入口麻豆 | 国产精品久久久久久中文字 | 久久伊人亚洲 | 一级片av| 日本一区二区不卡 | 日韩精品免费 | 国产精品mv在线观看 | av天天澡天天爽天天av | 国产原创在线观看 | 欧美日韩精品影院 | 欧洲在线视频 | 99国产精品久久久 | 亚洲免费精品 | 丁香一区二区 | 亚洲成人精品一区二区 |