首页 > 其他分享 >通过电动车防盗系统来学习基本IO口

通过电动车防盗系统来学习基本IO口

时间:2023-05-08 23:34:37浏览次数:40  
标签:电动车 Delay1000ms 防盗 RELAY -- while IO sbit include

  在进行小项目学习IO前,先来一个类似于编程语言的hello world,也就是点灯和灯闪烁,来简单来调试一下硬件和软件编程环境。

点灯
#include "reg52.h"

sbit LED1 = P3^7;

int main()
{
    while(1){
        LED1 = 0;
    }
}

led灯闪烁
#include "reg52.h"
#include "intrins.h"
sbit LED1 = P3^7;

void Delay1000ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 8;
    j = 1;
    k = 243;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

1.简单分析

  设计一个电动车防盗系统,首先想到的是我们要有一个震动传感器模块,在我们被推车的时候能感知到,其次需要喇叭,但是单片机为喇叭供电会因为功率问题导致不能用单片机为喇叭供电,所以还需要电池,电池不能一直导通,还需要继电器,以及我们遥控用的遥控发送接收433M模块。

2.简单原理图

 

3.震动传感器

产品不震动,输出高电平
产品震动,输出低电平,绿色指示灯灯亮

震动传感器来控制led
#include "reg52.h"
#include "intrins.h"

sbit LED1 = P3^7;
sbit SS = P2^6;

void Delay1000ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 8;
    j = 1;
    k = 243;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

int main()
{
    while(1){
        if(SS == 0){
            LED1 = 0;
            Delay1000ms();
            LED1 = 1;
        }else{
            LED1 = 1;
        }
    }
}

4.继电器

4.1实物

 4.2原理图

 4.3控制继电器

#include "reg52.h"
#include "intrins.h"

sbit SS = P2^6;
sbit    RELAY = P0^3;

void Delay1000ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 8;
    j = 1;
    k = 243;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

int main()
{
    while(1){
        if(SS == 0){
            RELAY = 0;
            Delay1000ms();
            RELAY = 1;
        }else{
            RELAY = 1;
        }
    }
}

5.遥控发送接收433M

 6.分析整合

  遥控器有ABCD四个按键,只使用A,B来控制警报状态,做出如下分析:

  1.按下A,喇叭长响,进入警戒模式

  2.按下B,喇叭短响,退出警戒模式

  3.在警戒模式中,产生震动,喇叭响一段时间,不产生震动,喇叭不响

  4.不在警戒模式,不做出反应

#include "reg52.h"
#include "intrins.h"

sbit SS = P2^6;
sbit    RELAY = P0^3;
sbit CONTROLA = P1^2;
sbit CONTROLB = P1^3;

void Delay1000ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 8;
    j = 1;
    k = 243;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

int main()
{
    int mark = 0;
    while(1){
        if(CONTROLA == 1){
            RELAY = 0;
            Delay1000ms();
            Delay1000ms();
            RELAY = 1;
            mark = 1;
        }
        
        if(CONTROLB == 1){
            RELAY = 0;
            Delay1000ms();
            RELAY = 1;
            mark = 0;
        }
        
        if(mark == 1){
            if(ss == 0){
                RELAY = 0;
                Delay1000ms();
                Delay1000ms();
                Delay1000ms();
            }else{
                RELAY = 1;
            }
        }
    }
}        

但是有小bug,在产生震动的时候喇叭响,没办法解除警戒,需要引入中断。

 

标签:电动车,Delay1000ms,防盗,RELAY,--,while,IO,sbit,include
From: https://www.cnblogs.com/Lynchteacher/p/17383514.html

相关文章

  • Keycloak: Authorization Code Grant Example
    Keycloak:AuthorizationCodeGrantExamplehttps://www.appsdeveloperblog.com/keycloak-authorization-code-grant-example/ 适合web应用 Inthistutorial,youwilllearnhowtogetanaccesstokenfromtheKeycloakauthorizationserverusingtheOAuthAuthor......
  • 游戏/微课堂录屏Camtasia Studio 2023中文版功能介绍及ppt录制微课软件哪个好
    CamtasiaStudio2023是一款屏幕录制和视频剪辑软件,教授课程,培训他人,以更快的速度和更吸引人的方式进行沟通和屏幕分享。使您在Windows和Mac上进行录屏和剪辑创作专业外观的视频变得更为简单。让您用更短的时间创作更多的视频。无需任何经验,0基础也能轻松上手,使用Camtasia创作出专......
  • Python_16 session、cookie 鉴权
    一、查缺补漏1.pprint https://www.cnblogs.com/yjybupt/p/10669988.html https://www.cnblogs.com/wongbingming/p/12854618.html 2.鉴权: http://testingpai.com/article/1621929988356 3.importjson json.du......
  • Java-Day-17( 集合( Collection 里的 List、Set ) )
    Java-Day-17集合先前用于保存多个数据使用的是——数组长度开始必须指定,且不能更改保存的必须为同一类型的元素使用数组进行增删元素的代码较为麻烦例:扩容的要先建新数组,再拷贝原数据、添加新对象引出集合可以动态保存任意多个对象,使用比较方便提供了一系列......
  • atomically try catch and avoid throw exception
    #include<assert.h>#include<atomic>#include<chrono>#include<fstream>#include<iomanip>#include<iostream>#include<numeric>#include<thread>#include<unistd.h>#include<uuid/uuid.h>......
  • 在 Python 中将 Tqdm 与 Asyncio 结合使用
    动动发财的小手,点个赞吧!简介困扰在Python中使用并发编程来提高效率对于数据科学家来说并不罕见。在后台观察各种子进程或并发线程以保持我的计算或IO绑定任务的顺序总是令人满意的。但是还有一点困扰我的是,当我在后台并发处理成百上千个文件或者执行成百上千个进程时,我总......
  • Windows系列---【浏览器突然连不上网,报"ERR_PROXY_CONNECTION_FAILED"的解决方案】
    浏览器突然连不上网,报"ERR_PROXY_CONNECTION_FAILED"的解决方案1.问题电脑的浏览器里装的有梯子,突然有一天浏览器访问不了外网了,打开哪个网站都报"ERR_PROXY_CONNECTION_FAILED",但是微信可以正常使用。2.分析微信可以使用,显然是浏览器的问题,再看错误,明显是代理有问题。3.解......
  • java.lang.NullPointerException解决方案,以及发生的原因。
    其实解决方案,倒是挺简单的,eclipse的console里,报错的地方点一下,就知道在哪一行了。真正要注意的是怎么避免这种情况的发生。通常情况下,这种错,发生在取数据的过程,比方从数据库查询数据,亦或者说是,发生在数据传输的过程中。譬如1packagetest;23importjava.util.List;......
  • Andriod界面
    顶层架构viewmodel生命周期很长直到oncleared() 这时viewmodels会出现问题,说要实现这个类但是我引入了呀后备属性就是一个主属性再加额外的属性一些具体的方法列表,数组的随机获取方法字符数组的shullfe方法 延迟初始化的lateinit方法字符串的判断相......
  • Django高级之-cookie与session
    目录1背景信息cookie的介绍cookie的由来什么是cookiecookie的原理Cookie规范Cookie的覆盖在浏览器中查看cookiesession的介绍session的由来什么是sessiontoken的介绍token的由来什么是token?Django操作cookie设置cookie获取cookie删除CookieCookie版登录校验案例Django操作Session......