切换新版>>

Polo/Polo Plus论坛 >  成功将原厂储物盒改造成自动翻盖导航系统

发表于 2013-07-30 11:37    IP属地:未知

原帖由 悠然冷香 于 2013-7-30 05:21 发表
开始投票了吗,一定支持
没有
请关注此拉票帖:网页链接

[每日热点]:【酷车实拍】家里又添新车了 提哪吒L...

回复本楼 | 评分 | 举报

发表于 2013-08-11 16:10    IP属地:未知

原帖由 狭路相逢PP胜 于 2013-8-11 11:09 发表
楼主大大,让我自己做是下辈子的事情了,
所以如果委托你做一个要多少钱~!
抱歉,不做的啊。

[每日热点]:【旅行游记】人说山西好风光之黄河篇...

回复本楼 | 评分 | 举报

发表于 2013-08-30 12:44    IP属地:未知

原帖由 clq789 于 2013-8-30 11:23 发表
动手能力不是一般的强啊,有点阻碍视线吧?
不碍事的,照片拍的角度稍低,实际坐上位置后,导航上盖的上沿还比玻璃下缘低些。

[每日热点]:【保养维护】逍客烧机油难题被PNF技术完美解决...

回复本楼 | 评分 | 举报

发表于 2013-08-30 21:04    IP属地:未知

原帖由 yiaibi111 于 2013-8-30 20:48 发表
投了15票,老大。。
谢谢,请集中在此帖网页链接回复

[每日热点]:【休闲生活】丰宁坝上百里天路草原之巅...

回复本楼 | 评分 | 举报

发表于 2013-09-01 07:27    IP属地:未知

原帖由 urbaneinfo 于 2013-9-1 02:54 发表
没链接
来了网页链接

[每日热点]:【旅行游记】禅国囊谦 1000多个佛寺...

回复本楼 | 评分 | 举报

发表于 2014-03-13 19:54    IP属地:未知

我把当初编程时写的源代码公布给大家看看,本来准备写好详细的注释的,后来忙着忙着就耽误了。其实大部分注释都写好了,还剩下少部分,现在也没时间去补充了。
有兴趣就看看,看不懂也别问我,我没有精力去解答的。
以下是全部程序代码:
/*正式程序:
第一次上电自检,小幅度开盖然后闭盖,防止手动安装未到位及其他情形。
按一次按钮打开,再按一次按钮关闭;当打开时如果拔钥匙也将自动关机。
控制导航仪电源,由于特殊性,电源控制和盖子不一定同步。*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sfr WDT_CONTR=0xe1;                                 //启用看门狗
sbit power_gps=P1^5;                                //导航仪电源,0打开、1关闭
sbit led=P1^6;                                      //光电开关led电源(闭盖检测用),0打开、1关闭
sbit hall=P1^7;                                     //霍尔开关电源(开盖检测用),0打开、1关闭
sbit check_keyoff=P0^5;                             //读取钥匙电状态,0有电、1无电
sbit check_open=P0^6;                               //霍尔开关检测口,0收到信号、1没有信号
sbit check_close=P0^7;                              //光电开关检测口,0收到信号、1没有信号
sbit motor1=P1^0;                                   //motor1、motor2通过L298N控制电机
sbit motor2=P1^1;
sbit key=P2^2;                                      //中控开关按键
uchar flag,flag_open,flag_keyoff,x,y,flag_gpsoff;
//flag:盖子开闭标识;
/*flag_open:开盖程序中判断到位停止用,三种情形下开盖动作停止,
                        即开到位(霍尔开关收到信号)、开过程中按按键了、开过程中拔钥匙了;*/
//flag_keyoff,x,y:定时器0中判断是否拔钥匙动作;
//flag_gpsoff:反映导航仪电源三种状态,由定时器1判断
uint num_keyoff,num_gpsoff;                     //判断拔钥匙和导航电源两个定时器里用的计数
void delayms(uint xms)                          //延时子程序
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}
void open(uchar z)                              //控制开盖子程序,参数z为1进入正常的开机程序,非1用于自检
{
        motor1=1;motor2=0;                      //电机开
        delayms(750);                           //延时目的是打开让光电开关能动作的角度
        if(z==1)                                //开机自检就略过此段
        {
                hall=0;
                x=1;y=1;
                num_keyoff=0;
                TR0=1;
                flag_keyoff=0;
                flag_open=1;
                if(flag_gpsoff==1)
                {
                        power_gps=0;
                        TR1=1;
                }
                if(flag_gpsoff==2)
                {
                        power_gps=0;
                        TR1=0;
                        num_gpsoff=0;
                }
                while(flag_open)
                {
                        WDT_CONTR=0x35;
                        if(check_open==0)
                        {
                                flag_open=0;
                                if(flag_gpsoff==1)
                                {
                                        power_gps=0;
                                        TR1=1;
                                }
                        }
                        if(key==0)
                        {
                                delayms(10);
                                if(key==0)
                                {
                                        while(!key);
                                        flag_open=0;
                                        flag_keyoff=1;
                                }
                        }
                        if(flag_keyoff==1)
                                flag_open=0;
                }
                hall=1;
                flag=1;
        }
        motor1=1;motor2=1;
}
void close()                                //控制闭盖子程序
{
        uchar num,num1,num2,a,b;
        if(flag_gpsoff==2)
        {
                power_gps=1;
                TR1=1;
        }
        motor1=0;motor2=1;
        TR0=0;
        led=0;
        num=0;num1=0;
        while(num<14)
        {
                num=0;
                for(num2=32;num2>0;num2--)
                {
                        num1++;
                        if(num1==2)
                                num1=0;
                        if(num1==1)
                        {
                                led=1;
                                delayms(1);
                                if(check_close==1)
                                        a=1;
                                else
                                        a=0;
                        }
                        if(num1==0)
                        {
                                led=0;
                                delayms(1);
                                if(check_close==0)
                                        b=1;
                                else
                                        b=0;
                                if(a==b)
                                        num++;
                        }
                }
                WDT_CONTR=0x35;
        }
        delayms(300);
        motor1=1;motor2=1;
        flag=0;
        led=1;
}
void keyscan()                                //按钮扫描子程序
{
        if(key==0)
        {
                delayms(10);
                if(key==0)
                {
                        while(!key);
                        switch(flag)
                        {
                                case 0:
                                        open(1);
                                        break;
                                case 1:
                                        close();
                                        break;
                        }
                }
        }
}
void init()                                //上电初始化程序,导航盖打开很小角度后再闭合
{
        led=1;hall=1;power_gps=1;
        TMOD=0x11;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        EA=1;
        ET0=1;
        ET1=1;
        flag_gpsoff=1;
        open(0);
        WDT_CONTR=0x35;
        delayms(100);
        close();
}
未完,下页继续

[每日热点]:【旅行游记】打卡妈屿岛...

回复本楼 | 评分 | 举报

发表于 2014-03-13 19:54    IP属地:未知

接上页
void main()                                //主程序
{
        WDT_CONTR=0x35;
        init();
        while(1)
        {
                WDT_CONTR=0x35;
                keyscan();
                if(flag==1)
                {
                        if(flag_keyoff==1)
                        {
                                flag_keyoff=0;
                                close();
                        }
                        if(num_keyoff>24000&&check_keyoff==1)
                        {
                                num_keyoff=0;
                                close();
                        }
                }
                if(flag==0)
                {
                        if(flag_gpsoff==2)
                        {
                                power_gps=1;
                                TR1=1;
                        }
                }
        }
}
void time0() interrupt 1                 //定时器0,用于判断是否有钥匙拔掉动作
{
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        if(num_keyoff%2==0)              //对2求模值为0、1,即奇数偶数。钥匙电的电平分别赋值给x、y,
        {                                //只要后数大于前数,则说明有0-1的变化,即钥匙拔了(有电时值为0)
                x=check_keyoff;
                if(x>y)
                        flag_keyoff=1;
        }
        if(num_keyoff%2==1)
        {        
                y=check_keyoff;
                if(y>x)
                        flag_keyoff=1;
        }
        num_keyoff++;
}
void time1() interrupt 3                  //定时器1,用于控制导航仪电源
{
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;            //导航仪三种状态
        if(flag_gpsoff==1)                //①开机到完全正常使用,这段时间要一直保持正常供电
        {
                num_gpsoff++;
                if(num_gpsoff==1940)
                {
                        flag_gpsoff=2;    //状态①转到状态②后定时器自动停止
                        TR1=0;
                        num_gpsoff=0;
                }
        }
        if(flag_gpsoff==2)                //②正常界面,随时可以断电
        {
                num_gpsoff++;
                if(num_gpsoff==700)
                {
                        flag_gpsoff=3;    //状态②转到状态③后定时器继续运行
                        num_gpsoff=0;
                }
        }
        if(flag_gpsoff==3)                //③关机阶段,不可以送电
        {
                num_gpsoff++;
                if(num_gpsoff==160)
                {
                        flag_gpsoff=1;    //状态③转到状态①后定时器停止
                        TR1=0;
                        num_gpsoff=0;
                }
        }
}

[每日热点]:【自驾游记】中原游之须弥福寿之庙...

回复本楼 | 评分 | 举报