希望对大家有用
单片机源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define da P0
- sbit P10=P1^0; //控制左电机前进
- sbit P11=P1^1; //控制左电机后退
- sbit P12=P1^2; //控制右电机前进
- sbit P13=P1^3; //控制右电机后退
- sbit zuobian=P1^4; //左边传感器
- sbit youbian=P1^5; //右边传感器
- sbit zhongjian=P1^6; //中间传感器
- sbit RING=P2^7;
- //sbit cesuzuo=P3^2;
- //sbit cesuyou=P3^3;
- sbit rs=P2^0;
- sbit rw=P2^1;
- sbit en=P2^2;
- sbit buzz=P2^4;
- sbit shire=P3^2;//人体释热传感器
- void delay(unsigned int z);
- void LCDinit();
- void lcdwritecom(uchar com);
- void lcdwritedat(uchar dat);
- void display(uint rate);
- void display1(uint rate1);
- uint count=0,count1=0;
- uint t=0;
- uint P110=0,P111=0,P112=0,P113=0;
- uchar aa=0;
- uchar bb=0;
- uchar time=0;
- uchar bai0=0,shi0=0,ge0=0;
- uint sudu=0,temp=0,temp1=0;
- void qianjin()//小车前进
- {
- P10=0;
- P11=1;
- P12=0;
- P13=1;
- delay(25);
- P10=0;
- P11=0;
- P12=0;
- P13=0;
- delay(25);
- }
- void youguai() //小车右拐
- {
- uchar i;
- for(i=0;i<20;i++)
- {
- P10=0;
- P11=1;
- P12=0;
- P13=0;
- delay(17);
- P10=0;
- P11=0;
- P12=0;
- P13=0;
- delay(33);
- }
- }
- void zuoguai() //小车左拐
- {
- uchar i;
- for(i=0;i<21;i++)
- {
- P10=0;
- P11=0;
- P12=0;
- P13=1;
- delay(17);
- P10=0;
- P11=0;
- P12=0;
- P13=0;
- delay(33);
- }
- }
- void move()
- {
- if(zuobian==0&&zhongjian==0&&youbian==1) //右边检测到黑线
- youguai();
- if(zuobian==1&&zhongjian==0&&youbian==0) // 左边检测到黑线
- zuoguai();
- if(zuobian==0&&zhongjian==1&&youbian==0)
- qianjin();
- if(zuobian==0&&zhongjian==1&&youbian==1)
- youguai();
- if(zuobian==1&&zhongjian==1&&youbian==0)
- zuoguai();
- if(zuobian==0&&zhongjian==0&&youbian==0)
- qianjin();
- if(zuobian==1&&zhongjian==1&&youbian==1)
- qianjin();
- if(zuobian==1&&zhongjian==0&&youbian==1)
- qianjin();
- }
- void init_time0()
- {
-
- EA=1;
- EX0=1;
- IT0=1;
-
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- EX1=1;
- ET0=1;
- IT1=1;
- TR0=1;
-
- }
- void main(void)
-
- {
- LCDinit();
- init_time0();
- while(1)
- {
- move();
-
- if(time == 1)
- {
- time =0;
- t++;
- display(t);
- move();
- temp=bb*1.4;
- temp1=temp+temp1;
- move();
- display1(temp1);
- bb=0;
- }
- }
- }
- void lcdwritecom(uchar com)
- {
- rs=0;
- rw=0;
- da=com;
- delay(10);
- en=1;
- delay(10);
- en=0;
- }
- void lcdwritedat(uchar dat)
- {
- rs=1;
- rw=0;
- da=dat;
- delay(10);
- en=1;
- delay(10);
- en=0;
- }
- void LCDinit()
- {
- lcdwritecom(0x38);
- lcdwritecom(0x0c);
- lcdwritecom(0x06);
- lcdwritecom(0x01);
- lcdwritecom(0x80);
- lcdwritedat('T');
- lcdwritedat(':');
- lcdwritedat('0');
- lcdwritedat('0');
- lcdwritedat('0');
- lcdwritedat('s');
- lcdwritecom(0x80+0x40);
- lcdwritedat('S');
- lcdwritedat(':');
- lcdwritedat('0');
- lcdwritedat('0');
- lcdwritedat('0');
- lcdwritedat('0');
- lcdwritedat('c');
- lcdwritedat('m');
-
-
- }
- void display(uint rate)
- {
- uchar bai,shi,ge;
- EA=0;
- ge=rate%10;
- if(ge != 0)
- {
- lcdwritecom(0x80+4);
- lcdwritedat('0'+ge);
- }
- if(ge == 0 && rate%100/10 != 0)
- {
- shi=rate%100/10;
- lcdwritecom(0x80+3);
- lcdwritedat('0'+shi);
- lcdwritedat('0');
- }
- if(ge == 0 && rate/100 != 0)
- {
- bai=rate/100;
- lcdwritecom(0x80+2);
- lcdwritedat('0'+bai);
- lcdwritedat('0');
- lcdwritedat('0');
- }
- EA=1;
- }
- void alarm()//蜂鸣器报警
- {
- uchar i;
- buzz=0;
- for(i=0;i<30;i++)
- {
- if(zuobian==0&&zhongjian==0&&youbian==1) //右边检测到黑线
- youguai();
- if(zuobian==1&&zhongjian==0&&youbian==0) // 左边检测到黑线
- zuoguai();
- if(zuobian==0&&zhongjian==1&&youbian==0)
- qianjin();
- if(zuobian==0&&zhongjian==1&&youbian==1)
- youguai();
- if(zuobian==1&&zhongjian==1&&youbian==0)
- zuoguai();
- if(zuobian==0&&zhongjian==0&&youbian==0)
- qianjin();
- if(zuobian==1&&zhongjian==1&&youbian==1)
- qianjin();
- if(zuobian==1&&zhongjian==0&&youbian==1)
- qianjin();
- }
- buzz=1;
-
- }
- void display1(uint rate1)
- {
- uchar qian, bai,shi,ge;
- EA=0;
- qian=rate1/1000;
- bai=rate1/100%10;
- shi=rate1/10%10;
- ge=rate1%10;
- lcdwritecom(0x80+0x40+2);
- lcdwritedat('0'+qian);
- lcdwritedat('0'+bai);
- lcdwritedat('0'+shi);
- lcdwritedat('0'+ge);
- EA=1;
- }
- void delay(unsigned int z)
- {
- unsigned char a,b;
- for(a=z;a>0;a--)
- for(b=200;b>0;b--);
- }
- /*void alarm1() interrupt 4
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- alarm();
- }*/
- void time0() interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- aa++;
- if(aa==20)
- {
- aa=0;
- time=1;
-
- }
- }
- void service_int0() interrupt 0
- {
- alarm();
- }
- void service_int1() interrupt 2
- {
- bb++;
- }
复制代码
所有资料51hei提供下载:
xiaoche.rar
(36.81 KB, 下载次数: 5)
|