欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
簡易小車簡單行駛程序
[打印本頁]
作者:
daming
時間:
2014-12-30 23:42
標題:
簡易小車簡單行駛程序
/* 程序名稱:簡易小車簡單行駛程序
功 能;用AT89S52、兩個步進電機、紅外線遙控控制小車的簡易行駛
運行環境:Keil Uvision2.0
程序說明:紅外線數據接受部分的程序未寫,變速可用變速箱
制 作:hankjulianth
*/
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
uint temp=0x88;
uint temp1=0x08;
uint temp2=0x80;
uint temp3=0x11;
sbit A1=P0^0;
sbit B1=P0^1;
sbit C1=P0^2;
sbit D1=P0^3;
sbit A2=P0^4;
sbit B2=P0^5;
sbit C2=P0^6;
sbit D2=P0^7;
void start();//小車啟動函數
void Rstart();//啟動倒退函數
void timestart();//設計計時函數
sbit CTR1=P3^0;//左電機1停止-左轉彎-控制信號
uint T1;//每次左轉彎時間 =T1*50ms
sbit CTR2=P3^1;//右電機2停止-右轉彎-控制信號
uint T2;//每次右轉彎時間 =T2*50ms
uint T3;//每次倒退時間 =T3*50ms
void set(Recieve()); //設置轉彎時間函數
sbit CTR=P3^2;//啟動信號
sbit RCTR=P3^3;//倒退控制信號
void delay();//延遲函數
void _init_();//轉彎中斷初始函數
void Recieve();//紅外線數據接受函數,包括T1、T2、CRT、CRT1、CRT2的狀態
void main()
{
while(1)
{
while(CTR)
{
set(Recieve());
start();
while(CRT1)
{ //t以毫秒為單位
_init_();
P0=temp1;
temp1>>=1;
if(temp1==0x0)
{temp1=0x08;}
delay();
if(t==T1)
{CRT1=0;}//中斷停止左轉彎
}
while(CRT2)
{
_init_();
P0=temp2;
temp2>>=1;
if(temp2==0x0)
{temp2=0x80;}
void delay();
if(t==T2)
{CRT2=0;}//中斷停止右轉彎
}
while(RCTR)
{Rstart();
if(t==T3)
{RCTR=0;}//中斷停止倒退
}
}
delay();
}
}
void _init_()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
ET0=1;
t=0;
}
void timer0() interrupt 1
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
ET0=1;
t++;
}
void set(Recieve())
{
T1=x;
T2=y;
}
void start()
{
P0=temp;
temp>>=1;
if(temp==0x0)
{temp=0x88;}
}
void Rstart()
{
P0=temp3;
temp3<<=1;
if(temp3==0)
{
temp1=0x11;
}
}
void delay()
{
uint i,j;
for(i=20;i>0;i--)
for(j=10;j>0;j--);
}
復制代碼
作者:
daming
時間:
2014-12-30 23:42
改進版:
/* 程序名稱:簡易小車簡單行駛程序
功 能;用AT89S52、兩個步進電機、紅外線遙控控制小車的簡易行駛
運行環境:Keil Uvision2.0
程序說明:紅外線數據接受部分的程序補上,變速可用變速箱
制 作:hankjulianth
*/
#include"reg52.h"
#include"stdio.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
uint temp=0x88;
uint temp1=0x08;
uint temp2=0x80;
uint temp3=0x11;
sbit A1=P0^0;
sbit B1=P0^1;
sbit C1=P0^2;
sbit D1=P0^3;
sbit A2=P0^4;
sbit B2=P0^5;
sbit C2=P0^6;
sbit D2=P0^7;
uint t=0;
void start();//小車啟動函數
void Rstart();//啟動倒退函數
void timestart();//設計計時函數
sbit CTR1=P3^0;//左電機1停止-左轉彎-控制信號
//uint T1=40;//每次左轉彎時間 =T1*50ms
sbit CTR2=P3^1;//右電機2停止-右轉彎-控制信號
//uint T2=40;//每次右轉彎時間 =T2*50ms
//uint T3=40;//每次倒退時間 =T3*50ms
sbit CTR=P3^2;//啟動信號
sbit RCTR=P3^3;//倒退控制信號
sbit STOP=P3^4;//停止鍵控制信號
void delay();//延遲函數
void _init_();//轉彎中斷初始函數
//*****************************************************************
//紅外控制程序段
//*****************************************************************
unsigned char irtime;//紅外用全局變量
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];
sbit IR=P3^2;//紅外接口標志
void Ircordpro()//紅外碼值處理函數
{
uchar i,j,k;
uchar cord,value;
k=1;
for(i=0;i<4;i--)//處理4個字節
{
for(j=8;j>0;j--)//處理一個字節八位
{
cord=irdata[k];
if(cord>7)//大于某值為1
{value=value|0x08;}
else
{value=value;}
if(j>0)
{value=value>>1;}
k++;
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;//處理完畢標志位置1
}
//******************************************************************
void Ir_work()//紅外鍵值散轉程序
{
switch(IRcord[2])//判斷第三個數碼值
{
case 0:CTR=1;break;//各鍵實現的功能:小車啟動鍵
case 1:RCTR=1;break;//小車倒退鍵
case 3:CTR2=1;break;//小車右轉彎鍵
case 4:CTR1=1;break;//小車左轉彎鍵
case 5:STOP=0;break;//小車停止鍵
}
irpro_ok=0;//處理完成標志
}
//******************************************************************
void ex0 () interrupt 0 using 0//外部中斷0服務函數
{
static uchar i;
static bit startflag;
if(startflag)
{
if(irtime<42&&ritime>=33)//引導碼TC9012的頭碼
{
i=0;
irdata[i]=irtime;//一次存儲32位電平寬度
irtime=0;
i++;
if(i=33)
{
irok=1;
i=0;
}
}
else
{irtime=0;startflag=1;}
}
}
//******************************************************************
void tim1 (void) interrupt 3 //定時器1中斷服務函數
{
irtime++;
}
void RAD_RESERCH();//紅外檢測函數
{
IT0=1;//外部0中斷開啟
EX0=1;
EA=1;
TMOD=0x11;
ET1=1;//開啟定時器1中斷
TH1=0;
TL1=0;
if(irok)
{
Ircordpro();//碼值處理
irok=0;
}
if(irpro_ok)//step press key
{
Ir_work();//碼值識別散轉
}
}
//***************************************************結束
//******************************************************************
void main()
{
while(1)
{//***********************************************紅外控制檢測
RAD_RESERCH();
//紅外檢測結束
while(CTR)
{
RAD_RESERCH();
start();
while(CTR1)
{ //t以毫秒為單位
_init_();
P0=temp1;
temp1>>=1;
if(temp1==0x0)
{temp1=0x08;}
delay();
if(t==40)
{CTR1=0;t=0;}//中斷停止左轉彎
}
while(CTR2)
{
_init_();
P0=temp2;
temp2>>=1;
if(temp2==0x0)
{temp2=0x80;}
void delay();
if(t==40)
{CTR2=0;t=0;}//中斷停止右轉彎
}
while(RCTR)
{
Rstart();
if(t==40)
{RCTR=0;t=0;}//中斷停止倒退
}
}
delay();
}
}
void _init_()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
ET0=1;
t=0;
}
void timer0() interrupt 1
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
ET0=1;
t++;
}
void start()
{
P0=temp;
temp>>=1;
if(temp==0x0)
{temp=0x88;}
}
void Rstart()
{
P0=temp3;
temp3<<=1;
if(temp3==0)
{
temp1=0x11;
}
}
void delay()
{
uint i,j;
for(i=20;i>0;i--)
for(j=10;j>0;j--);
}
復制代碼
作者:
whrui5033
時間:
2015-1-12 13:09
研究研究
作者:
LHQWELH
時間:
2015-1-18 10:50
ZHENHAO
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1