?? 222.c
字號:
#include<intrins.h>
#include<reg51.h>
#include<1602.h>
unsigned char code xiaoche[] = {"xiaoche"};
unsigned char code mm[] = {"mm"};
unsigned char code distance[]={"distance"};
unsigned char code time[]={"time"};
unsigned char zkbz=0 ; /*占空比*/
unsigned char zkby=0 ;
unsigned char t=0; /* 定時器中斷計數器 */
unsigned int juli=0; /*距離*/
unsigned char a=0;
unsigned char sl=0; /*時間秒*/
unsigned char sh=0; /*時間秒*/
unsigned char fl=0; /*時間分*/
unsigned char fh=0; /*時間分*/
unsigned int dis=0; /*實際距離*/
bit flag=0; /*標志位*/
sbit gm=P2^3; /*光敏*/
/********************************************************
控制口定義
*********************************************************/
sbit en1 =P1^1; /* L298的Enable A */
sbit s1 =P1^0; /* L298的Input 1 */
sbit s2 =P1^2; /* L298的Input 2 */
sbit en2 =P1^4; /* L298的Enable A */
sbit s3 =P1^3; /* L298的Input 1 */
sbit s4 =P1^5; /* L298的Input 2 */
sbit Guandian0=P2^0;
sbit Guandian1=P2^1;
sbit Guandian2=P2^2;
/*******************************************************
外部中斷 計算路程
********************************************************/
void service_int0() interrupt 0
{
EX0=0;
if(flag==0)juli++;
else juli--;
dis=juli*5;
DispOneChar(9,1,dis/10000);
DispOneChar(11,1,dis/1000%10);
DispOneChar(12,1,dis/100%10);
EX0=1;
}
/*************************************************************
定時器0服務程序
*************************************************************/
void timer0() interrupt 1 /* T0中斷服務程序 */
{
if(t<zkbz) en1=1; else en1=0; /* 產生電機1的PWM信號 */
if(t<zkby) en2=1; else en2=0;/* 產生電機1的PWM信號 */
t++;
if(t>=100) t=0; /* 1個PWM信號由100次中斷產生 */
}
/*************************************************************
定時器1服務程序
*************************************************************/
void timer1() interrupt 3
{
unsigned char cnt;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
cnt=0;
++sl;
if(sl==10)
{
sl=0;
++sh;
if(sh==6)
{
sh=0;
++fl;
if(fl==10)
{
fl=0;
++fh;
}
}
}
}
}
/*************************************************************
循跡程序
*************************************************************/
void xunji(void)
{
switch(a)
{
case 0x02:flag=0;s1=0;s2=1;s3=0;s4=1;zkbz=40;zkby=40;break;
case 0x01:flag=0;s1=0;s2=1;s3=1;s4=0;zkbz=70;zkby=15;break;
case 0x04:flag=0;s1=1;s2=0;s3=0;s4=1;zkbz=15;zkby=70;break;
case 0x03:flag=0;s1=0;s2=1;s3=0;s4=1;zkbz=65;zkby=15;break;
case 0x06:flag=0;s1=0;s2=1;s3=0;s4=1;zkbz=15;zkby=75;break;
case 0x00:flag=1;s1=1;s2=0;s3=1;s4=0;zkbz=30;zkby=30;break;
default:break;
}
Delay5Ms();
}
/**************************************************************
內部資源初始化
*******************************************************************/
void Init(void)
{
TMOD=0x12; /* 設定T0的工作模式為2,設定T0的工作模式為1 */
TH0=0xB6; /* 裝入定時器的初值 */
TL0=0xB6;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
IT0=1;
IP=0x03;
EA=1; /* 開總中斷 */
ET0=1; /* 定時器0允許中斷 */
ET1=1; /* 定時器1允許中斷 */
TR1=1; /* 啟動定時器1 */
TR0=1; /* 啟動定時器0 */
EX0=1; /*開中斷0*/
}
void main(void)
{
Init(); /*系統初始化*/
LcdReset(); /*液晶初始化*/
DisplayListChar(0,0,"time",4) ;
DispOneChar(7,0,':');
DisplayListChar(0,1,"distance",8) ;
DispOneChar(10,1,':');
zkbz=40;
zkby=40;
s1=0;s2=1;s3=0;s4=1;
do{ /*循跡*/
a=P2;
a=a&0x07;
xunji();
}while(a!=0x07);
zkbz=40; /*避障*/
zkby=40;
s1=0;s2=1;s3=0;s4=1; //前
delay(20000);
s1=0;s2=1;s3=1;s4=0; //左
delay(65000);
s1=0;s2=1;s3=0;s4=1; //前
delay(60000);
s1=1;s2=0;s3=0;s4=1; //右
delay(50000);
s1=0;s2=1;s3=0;s4=1; //前
delay(60000);
/* s1=1;s2=0;s3=0;s4=1; //右
delay(60000);
s1=0;s2=1;s3=0;s4=1; //前
delay(60000);
s1=0;s2=1;s3=1;s4=0; //左
delay(60000);*/
s1=0;s2=1;s3=0;s4=1; //前
do /*趨光*/
{
a=P2;
a=a&0x07;
if(!gm)
{
zkbz=60;zkby=0;}
else
{zkbz=0;zkby=70;}
delay(10000);
}while(a==0);
s1=s2=s3=s4=0;
s1=0;s2=1;s3=0;s4=1;
delay(20000);
EA=0;
do{s1=s2=s3=s4=0;
DispOneChar(5,0,fh+0x30);
DispOneChar(6,0,fl+0x30);
DispOneChar(8,0,sh+0x30);
DispOneChar(9,0,sl+0x30);}while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -