|

楼主 |
发表于 2015-8-1 22:55:58
|
显示全部楼层
....居然没有找到视频的连接按钮,想上个效果视频也不行了。给个源程序吧:
#include<reg52.h>
#include<intrins.h>
sfr P3M1=0xb1; // P3口输出功能地址
sfr P3M0=0xb2; //详细在单片机手册中有注明
sbit ss=P3^2; // 单片机P3.2口状态,即倒档信号输入端
sbit j2=P3^5; // J2继电器控制口
sbit j1=P3^4; // J1继电器控制口
sbit io=P3^3; //用于检测的端口
unsigned char t,flag; //flag标志位,程序使后视镜下翻时置1,复位时置0
void delay1(void) //短时间延时 大约是4个机器周期的时间
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay(unsigned int ti) //经典的延时函数
{
unsigned int a; //由于15F104W单片机的运算速度
unsigned char b; //比传统的51单片机快近10多倍,所以
for(a=ti;a>0;a--) //输入的数值也要相应该增大10倍以上
for(b=110;b>0;b--);
}
void xia(void) //控制倒后镜下翻功能
{
j1=1; //把P3.2脚输出高电平,驱动ULN2003
delay(25000); //再通过ULN2003驱动J1继电器使它吸合
j1=0; //延时大约1.5秒后,P3.2脚输出低电平,J1继电器释放
}
void shang(void) //控制倒后镜上翻功能
{
j2=1; //先把J2继电器吸合,实现电流方向转换
delay(500); //通过一个短的延时后,再把J1继电器接通
j1=1; //J1继电器接通后,倒后镜的垂直控制电机
delay(25000); //得电工作。同样延时1.5秒后,断开J1 J2断电器
j1=0;
delay(500);
j2=0;
}
void chuli(void) interrupt 0 // 检测倒档处理功能
{ // 采用中断检测功能,无论是进入倒档,还是退出倒档,都会激活本功能模块
unsigned char a; // 即当P3.2口出现电压跳变时,进入此功能
EX0=0; // 进入此功能后,EX=0先把外部中断功能关闭,以免产生中断重入
io=ss; //将P3.2口的状态送给检测口
if(io==1&&flag==0) // 如果P3.2口为高电平(即倒档状态),且标志位为0
{
delay(15000); //先延时1秒左右,一来防抖动,二来避开从N到P档时经过R档时的触发
io=ss;
delay1();
if(io==1) //若经过1秒后,P3.2口仍为高电平(即在倒档状态),可确定此时在倒车
{
xia(); // 执行后视镜下翻功能
flag=1; // 置标志位为1
t=30; // t是长时间倒车时间常数。这里设定约为30秒,若30秒还在倒车状态,即
} // 此时为长距离倒车,后视镜要上翻回正常的位置,实现这个功能在主程序里面
}
if(io==0&&flag==1) // 如果P3.2口为低电平(退出倒档状态),且标志位为1
{ // 先进行约5秒的延时,这里是预防有时在泊车时,需要不断在前进与后退之间
for(a=10;a>0;a--) // 做切换,所以在倒档退出的5秒内,后视镜依然保持下翻的状态。
delay(10000);
io=ss;
delay1();
if(io==0) // 超过5秒后,若P3.2口依旧为低电平,
{
shang(); // 这时执行后镜上翻功能
flag=0; // 同时置标志位为0
}
}
EX0=1; // 重新打开外部中断功能
}
main() //主程序
{
ss=1;
j1=0; //单片机上凳保?鱅O端口默认为高电平的,
j2=0;
io=0;
P3M0=0x30; //把P3.5 P3.4端口设为强推挽输出,输入高电平时就可以直接推动ULN2003
flag=0;
delay(25000);
IT0=0; //下面三行是打开外部中断设置命令
EX0=1;
EA=1;
while(1)
{
if(flag==1) //若标志位为1,则此时后视镜是处于下翻状态
{
while(t>0) // 延时约30秒
{
delay(18000);
t--;
}
if(flag==1) //若超过30秒后,后视镜还是处于下翻状态,
{ //判断为处于长距离倒车
shang(); //后视镜上翻复位,恢复原来视线
flag=0; //同时置标志位为0,可以避免一会退出倒档时,
} //再重复印执行视镜上翻功能
}
PCON=0x2; //进入停机模式,降低功耗
delay1();
}
} |
|