1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
LDC1000循跡小車的單片機程序
[打印本頁]
作者:
xdf-0116
時間:
2018-8-26 15:40
標題:
LDC1000循跡小車的單片機程序
金屬循跡小車資料
單片機源程序如下:
#include <reg51.h>
#include <intrins.h>
#include <math.h>
#include "lcd1602.h"
#include "ldc1000.h"
#include "move.h"
#include "nvic.h"
#define uchar unsigned char
#define uint unsigned int
#define BASIC_VALUE1 723 //720
#define BASIC_VALUE2 644 ///640
#define COIN 290
#define BASIC_SPEED 10 //10 //15
sbit BEEP = P3^6 ; //蜂鳴器
sbit S1 = P3^5; //按鍵1
uint j=0;
uchar i=0;
long time=0,num=0;
uchar flag=0;
uint dvalue1=0,dvalue2=0;
extern unsigned char code ASCII[12] = {'0','1','2','3','4','5','6','7','8','9'};//字庫
unsigned short LDC_value1=0,LDC_value2=0;//返回值
unsigned char disbuff[4]={0,0,0,0};//顯示緩存
void Lcd_Show();
void Turn_Left2();
void Turn_Right2();
uint Key_Scan();
void main(void)
{
InitLcd1602(); //1602液晶初始化
FLOAT_LDC1_init(); //LDC1000模塊1初始化
FLOAT_LDC2_init(); //LDC1000模塊2初始化
Lcd_Show(); //lcd顯示
Tim0_Init(); //定時器0初始化
Exti0_Init(); //外部中斷0初始化
while(1)
{
LDC_value1=filter1()/10;//采樣1
LDC_value2=filter2()/10;//采樣2
dvalue1=abs(LDC_value1-BASIC_VALUE1);
dvalue2=abs(LDC_value2-BASIC_VALUE2);
if((dvalue1>COIN)||(dvalue2>COIN)){i++;if(i>1){flag=1;i=2;}Go(BASIC_SPEED);} //硬幣檢測,第一次采樣的值濾掉
else
if((dvalue1+dvalue2)<29)Go(BASIC_SPEED); //判斷是否走直線(重要閾值)
else
if(dvalue1>dvalue2)
{
Turn_Left();
}
else
{
Turn_Right();
}
/********* LDC1000數值顯示 *********/
disbuff[0]=LDC_value1/1000;
disbuff[1]=LDC_value1%1000/100;
disbuff[2]=LDC_value1%1000%100/10;
disbuff[3]=LDC_value1%1000%100%10;
DisplayOneChar(2, 1, ASCII[disbuff[0]]);
DisplayOneChar(3, 1, ASCII[disbuff[1]]);
DisplayOneChar(4, 1, ASCII[disbuff[2]]);
DisplayOneChar(5, 1, ASCII[disbuff[3]]);
disbuff[0]=LDC_value2/1000;
disbuff[1]=LDC_value2%1000/100;
disbuff[2]=LDC_value2%1000%100/10;
disbuff[3]=LDC_value2%1000%100%10;
DisplayOneChar(11, 1, ASCII[disbuff[0]]);
DisplayOneChar(12, 1, ASCII[disbuff[1]]);
DisplayOneChar(13, 1, ASCII[disbuff[2]]);
DisplayOneChar(14, 1, ASCII[disbuff[3]]);
/********* 行駛距離顯示 *********/
disbuff[0]=(int)(num/4*3)/1000;
disbuff[1]=(int)(num/4*3)%1000/100;
disbuff[2]=(int)(num/4*3)%1000%100/10;
disbuff[3]=(int)(num/4*3)%1000%100%10;
DisplayOneChar(2, 0, ASCII[disbuff[0]]);
DisplayOneChar(3, 0, ASCII[disbuff[1]]);
DisplayOneChar(4, 0,'.');
DisplayOneChar(5, 0, ASCII[disbuff[2]]);
DisplayOneChar(6, 0, ASCII[disbuff[3]]);
/********* 運行時間顯示 *********/
DisplayTime(time);
if(Key_Scan()) //行駛結束檢測
{
TR0=0;
EX0=0;
EA=0;
Stop();
while(1)
{
Stop();
}
}
}
}
void Lcd_Show()
{
DisplayOneChar(0, 0, 'S');
DisplayOneChar(1, 0, ':');
DisplayOneChar(7, 0, 'm');
DisplayOneChar(9, 0, 'T');
DisplayOneChar(10, 0,':');
DisplayOneChar(0, 1, 'L');
DisplayOneChar(1, 1, ':');
DisplayOneChar(9, 1, 'R');
DisplayOneChar(10, 1, ':');
}
void Tim0() interrupt 1 //0.5ms定時器中斷
{
TH0=0xfe;
TL0=0x33; //0.5ms定時
j++;
if(flag)BEEP=~BEEP;
if(j==2000)
{
time++;j=0;flag=0;
}
}
void Exti0() interrupt 0 //外部中斷0
{
if(!(dvalue2>dvalue1)) num++;
}
/********** 小車控制函數 **********/
void Turn_Left2()
{
while(dvalue1>dvalue2)
{
LDC_value1=filter1()/10;//采樣1
LDC_value2=filter2()/10;//采樣2
dvalue1=abs(LDC_value1-BASIC_VALUE1);
dvalue2=abs(LDC_value2-BASIC_VALUE2);
Left(-1);
Right(1);
Delay_ms(9);
Stop();
Delay_ms(16);
}
Go(BASIC_SPEED);
}
void Turn_Right2()
{
while(!(dvalue1>dvalue2))
{
LDC_value1=filter1()/10;//采樣1
LDC_value2=filter2()/10;//采樣2
dvalue1=abs(LDC_value1-BASIC_VALUE1);
dvalue2=abs(LDC_value2-BASIC_VALUE2);
Left(1);
Right(-1);
Delay_ms(9); //12
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
%LDC1000尋跡小車.rar
(78.41 KB, 下載次數: 18)
2018-8-26 15:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1