15【Proteus仿真】基于51单片机的智能车位锁系统(电流检测、电压检测、红外检测、灯光报警)

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于STC89C51单片机,具有复位电路和晶振电路;
1.按下升起的按键后,然后用GP2D12红外传感器判断车辆是否在位,若不在位,升降杆高度为0,L298N驱动电机顺时针运转,升降杆起升,高度慢慢提高;假设提高到10,电机停止;高度通过LCD1602显示屏显示;
2.按下下降的按键后,用GP2D12红外传感器判断车辆是否在位,若不在位,还得判断高度,高度为10的话,L298N驱动电机逆时针转动,升降杆下降,检测高度为0,电机停止;5S后再判断GP2D12红外传感器判断车辆是否在位,若不在位,L298N驱动电机顺时针转动,升杆,升到最高处停止;高度通过LCD1602显示屏显示;
3.滑动变阻器连接ADC0832数模转换器,体现电流,电流过大,电机停止,蜂鸣器报警,灯光亮起,5S后没有任何信号,全部不显示;滑动变阻器连接ADC0832数模转换器,体现电压,若电压过低,则蜂鸣器发出警告,但不影响其他工作;电流和电压通过LCD1602显示屏显示;
在这此中,将电压和电流测量加入外部中断,周期每隔50ms检测,1S内检测20次,保证随时生效;

仿真图 :

编辑

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

单片机STC895C1
电机是L298N驱动器,驱动直流电机
红外传感器:GP2D12型号
数模转换器:ADC0832
显示屏:LCD1602显示屏

全部资源包括:

编辑

三、程序编程

/*全部代码看页尾*/

#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned  int
typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
sbit CS  = P1^0;        //红外传感器
sbit CLK = P1^1;
sbit DIO = P1^2;
sbit CS1  = P3^5;        //电流
sbit CLK1 = P3^6;
sbit DIO1 = P3^7;
sbit CS2  = P3^2;        //电压
sbit CLK2 = P3^3;
sbit DIO2 = P3^4;
sbit motor1_EN  = P1^7;
sbit motor1_IN1 = P1^5;
sbit motor1_IN2 = P1^6;
sbit key1 = P1^3;
sbit key2 = P1^4;
sbit LED  = P2^4;
sbit BEEP = P2^3;

/*变量定义*/
static int flag = 0 , flag2 = 0,flag3 = 0;
int gaodu= 0;					
static 	char u,DL,DY;
unsigned char count;

/*函数定义*/
void anjianpd();//按键函数定义
void MOTORRIGHT_MOVE();
void MOTORLEFT_MOVE();
void MOTOR_STOP();
void gdpdss();
void gdpdxj();
void dianpd();
void dianpd1();
void pdsq();

uchar get\_AD\_Res()          //ADC0832启动读取红外的值
{
   
   
	uchar i, data1=0, data2=0;
	CS=0;
	
	CLK=0;DIO=1;\_nop\_();
	CLK=1;\_nop\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值