目录
一、主要功能
基于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\