欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

LDC1000循跡小車的單片機(jī)程序

[復(fù)制鏈接]
ID:389559 發(fā)表于 2018-8-26 15:40 | 顯示全部樓層 |閱讀模式
金屬循跡小車資料

單片機(jī)源程序如下:
  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'};//字庫(kù)
  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();                           //定時(shí)器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);}        //硬幣檢測(cè),第一次采樣的值濾掉
  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. /********* 運(yùn)行時(shí)間顯示 *********/
  82.                 DisplayTime(time);
  83.                 if(Key_Scan())        //行駛結(jié)束檢測(cè)
  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定時(shí)器中斷
  109. {
  110.         TH0=0xfe;
  111.            TL0=0x33;      //0.5ms定時(shí)
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

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


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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