小车程序.docx
- 文档编号:8586539
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:14
- 大小:16.86KB
小车程序.docx
《小车程序.docx》由会员分享,可在线阅读,更多相关《小车程序.docx(14页珍藏版)》请在冰豆网上搜索。
小车程序
//赛车主程序(前进,后退,寻迹,计时)时间:
9.7下午
#include //SFRdeclarations
#include
//
sfr16DP =0x82; //datapointer
sfr16TMR3RL =0x92; //Timer3reloadvalue
sfr16TMR3 =0x94; //Timer3counter
sfr16ADC0 =0xbe; //ADC0data
sfr16ADC0GT =0xc4; //ADC0greaterthanwindow
sfr16ADC0LT =0xc6; //ADC0lessthanwindow
sfr16RCAP2 =0xca; //Timer2capture/reload
sfr16T2 =0xcc; //Timer2
sfr16RCAP4 =0xe4; //Timer4capture/reload
sfr16T4 =0xf4; //Timer4
sfr16DAC0 =0xd2; //DAC0data
sfr16DAC1 =0xd5; //DAC1data
//
sbit sensor1=P2^0;//从左往右数,寻迹用
sbit sensor2=P2^1;
sbit sensor3=P2^2;
//LCD初始化置位
sbitled=P2^4;
sbitLCD_E=P2^7;
sbitLCD_RW=P2^6;
sbitLCD_RS=P2^5;
//测试的
sbitpingheng=P2^1;
//函数定义
//-----------------------------------------------------------------------------
voidTimer3_Init(intcounts);//计100ms
//voidLCD_Display(void);
voidSYSCLK_Init(void);
voidPORT_Init(void);
voidTimer3_ISR(void);
//时间
voiddelay(void);
voidTimer(void);
void Timer_5S(void);
//显示
voidLCD_Init(void);
voidLCD_Display(void);
voidtrans(unsignedintdat);
//
unsignedlong x;
unsignedcharxdataFirst_data[16]={0x41,0x43,0x3a};
unsignedcharascii[10]={'0','1','2','3','4','5','6','7','8','9'};
unsignedcharascii_p[4]={0,0,0,0};
unsignedintk,m,chushi,bac; //时间,平衡,初始计时信号
unsignedchar*lcdpoint; //指向lcddata数组的指针
unsignedcharlcd_data_count;
longint delay1;
//动作函数
//voidPORT_Init(void);
voidPCA0_Init(void);
void PCA1_Init(void);
voidxunji(void);//寻迹
voidleft(void);
voidright(void);
voidstop(void);
voidmove(void);
voidback(void);
voidleft_back(void);
voidright_back(void);
//
void main(void)
{
WDTCN=0xde; //disablewatchdogtimer
WDTCN=0xad;
SYSCLK_Init();
bac=0;
chushi=1;
PORT_Init();
LCD_Init();
PCA0_Init();
PCA1_Init();
Timer3_Init(65535);
//P0=0x00;
//P3=0x00;
PCA0CPH0 =0x00;
PCA0CPH1 =0x00;//闪电速度
EA=1;
TMR3CN|=0x04;
//stop();
//xunji();
//初始计时
label:
P2=0x0f;
if(sensor2==0&&chushi==1)
{
delay();
//while
(1)
P2=0x0f;
if(sensor2==0&&chushi==1)
{chushi=2;
Timer();}
//elsebreak;
//chushi=1;
//xunji();
}
P2=0x0f;
if(sensor2==0&&chushi==2)
{
delay();
//while
(1)
P2=0x0f;
if(sensor2==0&&chushi==2)
{chushi=3;
PCA0CPL0 =0x00;
PCA0CPH0 =0x00;
PCA0CPL1=0x00;
PCA0CPH1 =0x00;
Timer();}
//elsebreak;
//chushi=2;
}
//
xunji();
gotolabel;}//计时
voidTimer(void)
{
//
{switch(chushi)
{
case2:
{stop();for(delay1=0;delay1<600000;delay1++);k=0;TMR3CN|=0x04;led=1;Timer_5S();led=0;
k=0;TMR3CN|=0x04;
move();
for(delay1=0;delay1<1000000;delay1++);
PCA0CPL0 =0x1f;PCA0CPH0=0x1f;
PCA0CPL1=0x1f;PCA0CPH1=0x1f;}break;
case3:
{stop();k=0;led=1;Timer_5S();led=0;back();bac=1;
k=0;TMR3CN|=0x04;
for(delay1=0;delay1<1000000;delay1++);
}break;//backxunji();
//case4:
{
} //startTimer3
}
}
voidxunji(void)
{//while
(1)
if(bac==0)
{P2=0x0f;
if((sensor1==0)&&(sensor3==1))
{
// delay();//延时
// c0=0;
right();
while
(1)
{P2=0x0f;
if((sensor1==1)&&(sensor3==1))
move();
break;
}
}
else
;
P2=0x0f;
if((sensor1==1)&&(sensor3==0))
{
// delay();//延时
left();//c1=0;
while
(1)
{ P2=0x0f;
if((sensor1==1)&&(sensor3==1))
move();//c1=1;
break;
}
}
else
;
P2=0x0f;
if((sensor1==1)&&(sensor3==1))
{
//delay();//延时
//move();//c1=0;
while
(1)
{ P2=0x0f;
if((sensor1==1)&&(sensor3==1))
move();//c1=1;
break;
}}
else;}
else
{P2=0x0f;
if((sensor1==0)&&(sensor3==0))
{stop();TMR3CN|=0x00;EA=0;}}
}
//P2=0x0f;
//if((sensor1==0)&&(sensor3==0))
//stop();//break;
//Timer_5S();
//back();
//j计回车
//计时
// TMR3CN=0x00; //StopTimer3;ClearTF3;
voidSYSCLK_Init(void)
{
inti; //delaycounter
OSCXCN=0x67; //startexternaloscillatorwith
for(i=0;i<256;i++); //Waitforosc.tostartup
while(!
(OSCXCN&0x80)); //Waitforcrystalosc.tosettle
OSCICN=0x88; //selectexternaloscillatorasSYSCLK
}
//端口配置
//
voidPORT_Init(void)
{
XBR0=0x28;
XBR1=0x00;
XBR2=0x40; //Enablecrossbarandweakpull-ups
P1MDIN=0x00;
P0MDOUT=0xFF;
P1MDOUT=0xFF;
P2MDOUT=0xF0; //P2口设为推挽方式
P3MDOUT=0xFF; //P2口设为推挽方式
P74OUT=0xFF;
P2=0x0F;
}
//
voidright(void)
{P4=0x20;
}
void left(void)
{P4=0x02;
}
void stop(void)
{P4=0x00;
}
void move(void)
{P4=0x22;
}
voidback(void)
{
P4=0x88;
}
voidleft_back(void)
{
P4=0x80;
}
voidright_back(void)
{
P4=0x08;
}
//脉宽
voidPCA0_Init(void) //8位脉宽输出
{
//允许PCA工作
PCA0CPM0 =0x42;
PCA0CPL0 =0x00;
PCA0CPH0 =0x00;
PCA0L=0x88;
PCA0CN =0x40;
}
void PCA1_Init(void)//0.1口输出
{
PCA0CPM1 =0x42; //8位脉宽输出
PCA0CPL1 =0x00;
PCA0CPH1 =0x00;
PCA0L=0x88;
PCA0CN =0x40;
}
//平衡函数
voidbalence(void)
{TMR3CN=0x00; //StopTimer3;ClearTF3;
k=0;
TMR3CN|=0x04; //startTimer3
while(k<=5)
{trans(k);
LCD_Display();
}
}
//
voidTimer3_Init(counts)//counts=20000个时钟周期
{
TMR3CN=0x00; //StopTimer3;ClearTF3;
TMR3RL=-counts; //Initreloadvalues
TMR3=0xffff; //settoreloadimmediately
EIE2|=0x01; //enableTimer3interrupts
// TMR3CN|=0x04; //startTimer3
EIP2=0x01;
}
//
voidTimer3_ISR(void)interrupt14
{ staticinti=0;
TMR3CN&=~(0x80);//clearTF3(溢出标志清零)
TMR3CN|=0x04; //startTimer3
i++;
if(i==45)
{i=0;
k++;
trans(k);
LCD_Display();
}
}
//
voidLCD_Display(void)
{
staticunsignedchardata1;
LCD_RS=1;
LCD_RW=0;
LCD_E=1;
for(x=0;x<5000;x++);
lcdpoint=&First_data;
for(lcd_data_count=7;lcd_data_count>0;lcd_data_count--)
{
data1=*lcdpoint; //读出数据
P3=data1; //写数据到端口
LCD_E=0;
LCD_E=1; //控制LCD
lcdpoint++;
for(x=0;x<1000;x++);
}
LCD_RS=0;
LCD_RW=0;
LCD_E=1;
P3=0xc0;
LCD_E=0;
}
//
voidtrans(unsignedintdat)
{
ascii_p[3]=dat%10;
dat=dat/10;
ascii_p[2]=dat%10;
dat=dat/10;
ascii_p[1]=dat%10;
dat=dat/10;
ascii_p[0]=dat%10;
dat=dat/10;
First_data[6]=ascii[ascii_p[3]];
First_data[5]=ascii[ascii_p[2]];
First_data[4]=ascii[ascii_p[1]];
First_data[3]=ascii[ascii_p[0]];
}
//LCD初始化
voidLCD_Init(void)
{
LCD_RS=0;
LCD_RW=0;
LCD_E=1;
for(x=0;x<10000;x++);
P3=0x38;
LCD_E=0;
LCD_E=1;
for(x=0;x<2000;x++);
P3=0x0e;
LCD_E=0;
LCD_E=1;
for(x=0;x<2000;x++);
P3=0x06;
LCD_E=0;
LCD_E=1;
for(x=0;x<2000;x++);
P3=0x01;
LCD_E=0;
}
//延时
voiddelay(void)
{
inta=1000;
while(a!
=0)
{
a--;
}
}
//5s定时
void Timer_5S(void)
{k=0;
TMR3CN=0x00;
TMR3CN|=0x04; //startTimer3
stop(); //开始计时
LCD_Init();
while
(1)
{if(k==5)//5
{TMR3CN=0x00;break;}
}//StopTimer3;ClearTF3;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小车 程序