51单片机设计的防止幼儿误锁车内报警系统

2020-07-29来源: 51hei关键字:51单片机  防止幼儿误锁  车内报警系统

单片机源程序如下:

#include

#include

#include

#include

#include

#include


#define uchar unsigned char

#define uint  unsigned int

//---------------------------->Dispose

sbit FIR1 = P1^0;

sbit FIR2 = P1^1;


uchar delay_time=0;    //检测延时2s

uchar yanshi_time=0;

uchar count_time=0;    //锁车5s倒计时

bit   count_flag=0;

//---------------------------->Timer

uint  ms = 0;

uint  time=0;

//---------------------------->Display

bit Read_Weight = 0;    //重量标志位

bit Read_Temp = 0;      //温度标志位

int temp = 0;

sbit alarm = P3^5;      //继电器         0导通,        门未锁

uchar Door = 1;


//---------------------------->Key

sbit key1 = P3^3;            //控制继电器

sbit key2 = P3^4;                //控制布防、撤防


bit key1_flag=0;

bit key2_flag=0;


////---------------------------->电机驱动

uint Stop_time = 0;               //半圈计数变量

uchar zhuan = 0;                   //正反转标志

//---------------------------->Police

sbit beep = P2^4;

bit  beep1 = 0;

///--------------------------------------------->GSMsim800

//-----> Uart1 And GSM  Definition

unsigned char xdata Uart1_Buff[50];  //串口1缓冲数组

unsigned char Uart1_Count=0;         //串口1累加变量


unsigned char Quest_flag=1;                         //GSM状态标志位,等于0,进行初始化,等于一是进入发短信区域

unsigned int  GSM_Send_Time=0;                 //AT指令发送间隔时间

unsigned char GSM_Num=0;                         //AT指令指向

unsigned char GSM_Send=0;                         //发送短信使能标志位

unsigned char GSM_Send_Num=0;                 //短信编号

unsigned char Phone[12]={''};                 //定义手机号存储数组


bit memory_flag=0;


bit cx_flag=0;







//初始化显示,主要用在上电校准称重的时候显示界面

void display_int()

{

   

   LCD1602_write(0,0x80);                 

   LCD1602_writebyte("    Welcome    ");          

   LCD1602_write(0,0xC0);

   LCD1602_writebyte(" initialize... ");

}





void delay(uint z)

{

          while(z--);

}



void UartSend(unsigned char dat)  //发送一个字节

{

        SBUF=dat;

        while(!TI);

        TI=0;

}



void UartSendString(char *s) //发送一串数据

{

    while (*s)                 

    {

        UartSend(*s++);  

    }

}





void keyscan()

{

          if(!key1)

         {

                  if(key1_flag==1)

                 {

                          key1_flag=0;

                        Door=(Door+1)%2;            //0 门锁

                 }        

         }

        else key1_flag = 1;



          if(!key2)

         {

                  if(key2_flag==1)

                 {

                          key2_flag=0;

                        if(cx_flag==1)

                         {

                                  beep1=0;

                                zhuan=2;

                                cx_flag=0;

                         }

                 }        

         }

        else key2_flag = 1;



}



void display()

{

//第一行显示重量数据,有超重显示横杠的设定

   LCD1602_write(0,0x80);       

   LCD1602_writebyte("Weight:");

   if(Weight_Shiwu<10000)

    {

           LCD1602_write(1,0x30+Weight_Shiwu/1000%10);

           LCD1602_write(1,'.');

           LCD1602_write(1,0x30+Weight_Shiwu/100%10);

           LCD1602_write(1,0x30+Weight_Shiwu/10%10);

           LCD1602_write(1,0x30+Weight_Shiwu%10);


        }

        else

        {

           LCD1602_write(1,'-');

           LCD1602_write(1,'.');

           LCD1602_write(1,'-');

           LCD1602_write(1,'-');

           LCD1602_write(1,'-');

          

        }

    LCD1602_writebyte("Kg   ");  


    LCD1602_write(0,0xC0);

    LCD1602_writebyte("Dr: ");

    if(alarm==0)    LCD1602_writebyte("Open  ");

    else            LCD1602_writebyte("Close ");  


                LCD1602_write(1,0x30+temp/100%10);

                LCD1602_write(1,0x30+temp/10%10);

                LCD1602_writebyte(".");

                LCD1602_write(1,0x30+temp%10);

                LCD1602_write(1,0xdf);

                LCD1602_writebyte("C");


//

//                LCD1602_write(1,0x30+count_time/10%10);

//                LCD1602_write(1,0x30+count_time%10);

//                LCD1602_writebyte(" ");

//                LCD1602_write(1,0x30+delay_time/10%10);

//                LCD1602_write(1,0x30+delay_time%10);

//                LCD1602_write(0,0xc0);

//                LCD1602_write(1,0x30+yanshi_time/10%10);

//                LCD1602_write(1,0x30+yanshi_time%10);

}



void GSM_Init()         //GSM函数

{

   unsigned char G_Tab[20];

   if(Quest_flag==1) //开始查询GSM状态//此时还没有初始化完成,首先,先初始化 ,发AT,能够响应上,关回显,设置短信处理方式

         {


                switch(GSM_Num)

                {

                        case 0: UartSendString("ATrn");                  break; //AT

                        case 1: UartSendString("ATE1rn");                break;//关回显

                        case 2: UartSendString("AT+CNMI=3,2,2,0,1rn");  break;//设置

                        case 3: UartSendString("AT+CMGF=1rn");          break; //配制

                        case 4: UartSendString("AT+COPS?rn");            break; //查询网络

                        case 5: Quest_flag=0;  GSM_Num=0;                       break; //初始化彻底结束

            }

                GSM_Send_Time=100;

         }

         else

         {

                                          

[1] [2] [3] [4] [5]
关键字:51单片机  防止幼儿误锁  车内报警系统 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic504668.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机编程里软件定时器使用技巧
下一篇:单片机智能秒表的制作与调试课程设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

51单片机的准备工作
。     第三,编译软件,KEIL C,全名是keil uvision,下载地址:http://www.51hei.com/keil%CF%C2%D4%D8.html  它是美国Keil Software公司研发的51系列兼容单片机的C语言软件开发系统,我这一代人学51用的都是它。在2005年的时候被ARM公司收购,所以,现在基于ARM内核的STM32单片机也可以用这个软件开发,但是要去官网下载相应的版本。启动界面如下:     另外说一句,现在国内用的基本都是破-解-版,使用上没有问题,也就不要大声嚷嚷了,仅做学习交流用,不要有商业
发表于 2020-07-23
学<font color='red'>51单片机</font>的准备工作
51单片机-KEIL的使用与程序的下载
      很多人学单片机的时候都会遇到的情况,程序写的漂漂亮亮,原理理解的通通透透,但是.......不会用编译软件,不知道怎么下载程序,貌似大学的时候我老师就没讲过,呵呵。所以今天主要讲一下这两个软件的应用。      注:单片机种类多种多样,编译环境自然也有很多种。学习一种编译软件肯定需要一定的时间,不过软件界面基本都是大同小异,会了一个再去学另一个会很快。还有个现象,很多人喜欢用汉化版,个人感觉没必要。首先,汉化的不一定标准;其次,工具英语就那么几个单词,记下来就OK了,汉化反而会增加不必要的麻烦。      好了
发表于 2020-07-23
学<font color='red'>51单片机</font>-KEIL的使用与程序的下载
51单片机-指令周期与LED闪烁
      之前讲了如何点亮LED,包括硬件电路和程序,今天说一下如何让LED闪烁。单片机控制LED闪烁有两种方法,一种是软件延时,另一种是定时器中断。因为涉及到单片机指令集的问题,还有一些简单的C语言,今天只讲第一种。      先说指令集,早期的51单片机都是复杂指令集,因为沿用的习惯现在用的STC89C52单片机也是复杂指令集,和复杂指令集对应的,就是精简指令集,常见的有AVR和430单片机。      这两种指令集的区别是啥?最明显的就是一条指令执行的时间,举个例子:51单片机和AVR单片机都外接一个12M的晶体
发表于 2020-07-22
学<font color='red'>51单片机</font>-指令周期与LED闪烁
51单片机-定时中断与LED闪烁
同时清零了中断标志;去付款,处理了中断子程序;付完款继续吃饭,回到了主程序。STC89C52RC单片机中的中断分为三种:外部中断,一般是IO口的高低电平触发;定时/计数器溢出中断,一般是内部定时/计数器溢出中断;UART口中断,收发数据时引发的中断。这次只说定时/计数器溢出中断。程序如下:/**********************51单片机学习例程************************  平台:Keil U4 + STC89C52*  名称:LED闪烁*  晶体:11.0592
发表于 2020-07-22
51单片机-按键的扫描检测与消抖
; 接下来说应用电路,如下图所示,这是常见的应用电路:     检测方式有两种,一种是扫描检测,另一种是中断检测。这次先说第一种,什么是扫描检测?     就是单片机每隔一段时间,就去检测一下IO口的状态,未触发的时候,该引脚是高电平,触发的时候是低电平。     有人会有疑问,这种方式会不会有遗漏?基本不会,因为单片机以微秒甚至纳秒的级别运行指令,而触发一次按键至少需要几十毫秒,汽车电子里面用到的触发按键,它的触发时间到了100毫秒。只要扫描次数足够,基本不会有遗漏。    
发表于 2020-07-22
学<font color='red'>51单片机</font>-按键的扫描检测与消抖
51单片机-按键的中断检测
      接着昨天,继续说按键的事。昨天说的是扫描检测,今个说一下中断检测。先插播一个小故事~~      当年我和凯凯学单片机的时候,我用扫描检测的方法做的项目,他用中断检测的方法做的项目。当我俩坐一起交流按键检测的方式时,他火了,直接跳起来跟我吼:你不用中断怎么检测?      当时我就意识到他可能陷入了只能用中断的误区,然后就乐呵呵的说:用扫描啊~      他继续吼,我继续乐,我俩就这样陷入了死循环。终于都累了,然后把程序和原理给他看,了解~   
发表于 2020-07-22
学<font color='red'>51单片机</font>-按键的中断检测
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved