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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2004|回復: 0
打印 上一主題 下一主題
收起左側(cè)

LDC1000循跡小車的單片機程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:389559 發(fā)表于 2018-8-26 15:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
金屬循跡小車資料

單片機源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <math.h>       
  4. #include "lcd1602.h"
  5. #include "ldc1000.h"
  6. #include "move.h"
  7. #include "nvic.h"

  8. #define uchar unsigned char
  9. #define uint  unsigned int
  10. #define BASIC_VALUE1 723 //720
  11. #define BASIC_VALUE2 644 ///640
  12. #define COIN 290
  13. #define BASIC_SPEED 10         //10         //15

  14. sbit BEEP = P3^6 ;        //蜂鳴器
  15. sbit S1 = P3^5;        //按鍵1

  16. uint j=0;
  17. uchar i=0;
  18. long time=0,num=0;
  19. uchar flag=0;
  20. uint dvalue1=0,dvalue2=0;
  21. extern unsigned char code ASCII[12] =    {'0','1','2','3','4','5','6','7','8','9'};//字庫
  22. unsigned short LDC_value1=0,LDC_value2=0;//返回值                        
  23. unsigned char disbuff[4]={0,0,0,0};//顯示緩存       

  24. void Lcd_Show();
  25. void Turn_Left2();
  26. void Turn_Right2();
  27. uint Key_Scan();

  28. void main(void)
  29. {
  30.         InitLcd1602();                        //1602液晶初始化
  31.         FLOAT_LDC1_init();                //LDC1000模塊1初始化
  32.         FLOAT_LDC2_init();                //LDC1000模塊2初始化
  33.         Lcd_Show();                                   //lcd顯示
  34.         Tim0_Init();                           //定時器0初始化
  35.         Exti0_Init();                        //外部中斷0初始化
  36.         while(1)                                  
  37.         {
  38.                 LDC_value1=filter1()/10;//采樣1
  39.                 LDC_value2=filter2()/10;//采樣2
  40.                 dvalue1=abs(LDC_value1-BASIC_VALUE1);
  41.                 dvalue2=abs(LDC_value2-BASIC_VALUE2);
  42.                 if((dvalue1>COIN)||(dvalue2>COIN)){i++;if(i>1){flag=1;i=2;}Go(BASIC_SPEED);}        //硬幣檢測,第一次采樣的值濾掉
  43.                 else
  44.                 if((dvalue1+dvalue2)<29)Go(BASIC_SPEED);        //判斷是否走直線(重要閾值)
  45.                 else
  46.                 if(dvalue1>dvalue2)
  47.                 {
  48.                         Turn_Left();
  49.                 }
  50.                 else
  51.                 {
  52.                         Turn_Right();
  53.                 }
  54. /********* LDC1000數(shù)值顯示 *********/
  55.                 disbuff[0]=LDC_value1/1000;
  56.                 disbuff[1]=LDC_value1%1000/100;
  57.                   disbuff[2]=LDC_value1%1000%100/10;
  58.             disbuff[3]=LDC_value1%1000%100%10;               
  59.                 DisplayOneChar(2, 1, ASCII[disbuff[0]]);
  60.                 DisplayOneChar(3, 1, ASCII[disbuff[1]]);
  61.                 DisplayOneChar(4, 1, ASCII[disbuff[2]]);
  62.                 DisplayOneChar(5, 1, ASCII[disbuff[3]]);
  63.                 disbuff[0]=LDC_value2/1000;
  64.                 disbuff[1]=LDC_value2%1000/100;
  65.                   disbuff[2]=LDC_value2%1000%100/10;
  66.             disbuff[3]=LDC_value2%1000%100%10;               
  67.                 DisplayOneChar(11, 1, ASCII[disbuff[0]]);
  68.                 DisplayOneChar(12, 1, ASCII[disbuff[1]]);
  69.                 DisplayOneChar(13, 1, ASCII[disbuff[2]]);
  70.                 DisplayOneChar(14, 1, ASCII[disbuff[3]]);
  71. /********* 行駛距離顯示 *********/
  72.                 disbuff[0]=(int)(num/4*3)/1000;
  73.                 disbuff[1]=(int)(num/4*3)%1000/100;
  74.                   disbuff[2]=(int)(num/4*3)%1000%100/10;
  75.             disbuff[3]=(int)(num/4*3)%1000%100%10;               
  76.                 DisplayOneChar(2, 0, ASCII[disbuff[0]]);
  77.                 DisplayOneChar(3, 0, ASCII[disbuff[1]]);
  78.                 DisplayOneChar(4, 0,'.');
  79.                 DisplayOneChar(5, 0, ASCII[disbuff[2]]);
  80.                 DisplayOneChar(6, 0, ASCII[disbuff[3]]);
  81. /********* 運行時間顯示 *********/
  82.                 DisplayTime(time);
  83.                 if(Key_Scan())        //行駛結(jié)束檢測
  84.                 {
  85.                         TR0=0;
  86.                         EX0=0;
  87.                         EA=0;
  88.                         Stop();
  89.                         while(1)
  90.                         {
  91.                         Stop();
  92.                         }
  93.                 }
  94.         }
  95. }

  96. void Lcd_Show()
  97. {
  98.         DisplayOneChar(0, 0, 'S');
  99.         DisplayOneChar(1, 0, ':');
  100.         DisplayOneChar(7, 0, 'm');
  101.         DisplayOneChar(9, 0, 'T');
  102.         DisplayOneChar(10, 0,':');
  103.         DisplayOneChar(0, 1, 'L');
  104.         DisplayOneChar(1, 1, ':');
  105.         DisplayOneChar(9, 1, 'R');
  106.         DisplayOneChar(10, 1, ':');
  107. }
  108. void Tim0() interrupt 1                  //0.5ms定時器中斷
  109. {
  110.         TH0=0xfe;
  111.            TL0=0x33;      //0.5ms定時
  112.         j++;
  113.         if(flag)BEEP=~BEEP;
  114.         if(j==2000)
  115.         {
  116.                 time++;j=0;flag=0;
  117.         }
  118. }

  119. void Exti0() interrupt 0        //外部中斷0
  120. {
  121.         if(!(dvalue2>dvalue1))        num++;
  122. }
  123. /********** 小車控制函數(shù) **********/
  124. void Turn_Left2()
  125. {
  126.         while(dvalue1>dvalue2)
  127.         {
  128.                 LDC_value1=filter1()/10;//采樣1
  129.                 LDC_value2=filter2()/10;//采樣2
  130.                 dvalue1=abs(LDC_value1-BASIC_VALUE1);
  131.                 dvalue2=abs(LDC_value2-BASIC_VALUE2);
  132.                 Left(-1);
  133.                 Right(1);
  134.                 Delay_ms(9);
  135.                 Stop();
  136.                 Delay_ms(16);
  137.         }
  138.         Go(BASIC_SPEED);
  139. }
  140. void Turn_Right2()
  141. {
  142.         while(!(dvalue1>dvalue2))
  143.         {
  144.                 LDC_value1=filter1()/10;//采樣1
  145.                 LDC_value2=filter2()/10;//采樣2
  146.                 dvalue1=abs(LDC_value1-BASIC_VALUE1);
  147.                 dvalue2=abs(LDC_value2-BASIC_VALUE2);
  148.                 Left(1);
  149.                 Right(-1);
  150.                 Delay_ms(9); //12
  151. ……………………

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

所有資料51hei提供下載:
%LDC1000尋跡小車.rar (78.41 KB, 下載次數(shù): 18)


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线观看一区 | 一区二区三区四区国产精品 | 久久伊人久久 | 国产一区二区三区在线观看免费 | 精品美女在线观看视频在线观看 | 日韩中文一区二区三区 | 日韩在线精品 | 99久久精品免费看国产四区 | 色综合桃花网 | 精品一区在线 | 亚洲视频免费观看 | 国产精品爱久久久久久久 | 中文字幕加勒比 | 国产中文 | 国产精品国产三级国产播12软件 | 日韩精品一二三 | 性大毛片视频 | 四虎影院在线观看av | 国产欧美一区二区精品久导航 | 在线一区二区观看 | 欧美日韩成人在线 | 亚洲一二三在线观看 | 91视频在线网站 | 国产精品久久久久久久三级 | 亚洲一区二区免费视频 | 911精品美国片911久久久 | 99国产精品99久久久久久 | 国产精品电影网 | 精品一区二区不卡 | 一区精品视频在线观看 | 精品久久久久久亚洲精品 | 麻豆视频在线免费观看 | 欧美xxxx在线| 久久精品二区亚洲w码 | 免费v片 | 丁香五月网久久综合 | 国产精品成人品 | 人人艹人人 | 亚洲日本中文 | 国产目拍亚洲精品99久久精品 | 久久久久1|