基于51单片机自行车码表霍尔测速里程显示超速报警方案原理图设计

硬件电路的设计

(下方附文件)
系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STC89C52单片机核心电路+DS1302时钟电路+5V电机调速控制电路+霍尔测速电路+蜂鸣器报警电路+按键电路+LCD1602液晶显示电路+电源电路组成。
1、通过时钟芯片DS1302获取时间。
2、LCD1602可以显示当前的速度,里程,时间。
3、按键功能:从左边第一个起,减键、加键、选择键、设置键。
4、可以通过电位器对电机进行调速。
5、具有超速报警功能,可以设置报警速度,当实际的速度大于当前的速度时就会由蜂鸣器产生报警。
6、可以查看总路程,并且可以对总路程进行清零操作。
7、可以按键修改当前的时间。
3.1.2系统总体结构
本系统具体框图如下图所示:
在这里插入图片描述

原理图:
在这里插入图片描述
DS1302时钟电路设计
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。其电路的接口简单、价格低廉、使用方便,被广泛地采用。DS1302具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。通过DS1302芯片为本设计提供时间数据。在本电路中,选择32.768KHZ晶振为DS1302提供时钟源,3V纽扣电池保证了DS1302掉电不丢失时间数据,电阻均为上拉电阻,使得DS1302工作更稳定。其电路原理图如下图所示。

在这里插入图片描述
A3144霍尔传感器芯片电路设计
霍尔元件是一种基于霍尔效应的磁传感器,已发展成一个品种多样的磁传感器产品族,并已得到广泛应用。霍尔元件是一种磁传感器。要他们可以检测磁场及其变化,可以在各种与磁场有关的场合中。霍尔器件以霍尔效应为其工作基础。霍尔线性器件的精度高、线性度好。A3144霍尔开关元件属于开关型霍尔传感器(集成霍尔开关),它是把霍尔片产生的霍尔电压放大后驱动触发电路,输出电压是能变化化的方脉冲。霍尔转速传感器的外形图和与磁场的作用关系如下图所示。磁场由磁钢提供,所以霍尔传感器和磁钢需要配对使用。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈,霍尔传感器便输出一个脉冲。通过单片机测量产生脉冲的频率就可以得出圆盘的转速。

系统软件设计

在这里插入图片描述

#include <reg52.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535

sbit clk = P1^3;	  //ds1302时钟线定义
sbit io =  P1^4;	  //数据线
sbit rst = P1^5;	  //复位线
						//秒  分   时   日   月  年   星期 	
uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //写地址
uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //读地址
uchar code init_ds[]  ={0x55,0x17,0x15,0x01,0x01,0x13,0x13};   
uchar miao,fen,shi,ri,yue,week,nian;
uchar i;

uchar t1_num,t2_num;	//计时间中断的次数
unsigned long speed1,juli,time2;
float f_hz	,speed_km,speed_m;

uchar TH11,TL11;
uchar flag_en;   //开始计算速度使能
uchar flag_stop_en;   //要确定车子是否停下了
unsigned char plu;
uint juli_s;	     //每秒走的距离
uint juli_z;         //总路程
float zhijing = 0.55;  //直径 0.55M
bit flag_1s = 1;	     //1s
uchar menu_1;        //菜单设置变量
uchar menu_2;        //菜单设置变量

long zong_lc;        //总量程

uchar flag_200ms;
uint shudu;   //定义速度的变量
uint bj_shudu = 40;	 //报警速度


//这三个引脚参考资料
sbit rs=P2^4;	 //寄存器选择信号 H:数据寄存器  	L:指令寄存器
sbit rw=P2^5;	 //寄存器选择信号 H:数据寄存器  	L:指令寄存器
sbit e =P2^6;	 //片选信号   下降沿触发

uchar code table_num[]="0123456789abcdefg";
uchar i;

sbit beep = P3^7;   //蜂鸣器IO口定义



/******************1ms 延时函数*******************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}


/********************************************************************
* 名称 : delay_uint()
* 功能 : 小延时。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay_uint(uint q)
{
	while(q--);
}

/********************************************************************
* 名称 : write_com(uchar com)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void write_com(uchar com)
{
	i =0;
	rs=0;
	rw=0;
	P0=com;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;
}

/********************************************************************
* 名称 : write_data(uchar dat)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void write_data(uchar dat)
{
	i =0;
	rs=1;
	rw=0;
	P0=dat;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;	
}

/********************************************************************
* 名称 : write_sfm2(uchar hang,uchar add,uchar date)
* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下
	 	 write_sfm1(1,5,23)
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void write_sfm2(uchar hang,uchar add,uint date)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	write_data(0x30+date/10%10);
	write_data(0x30+date%10);	
}

/********************************************************************
* 名称 : write_sfm4(uchar hang,uchar add,uchar date)
* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下
	 	 write_sfm1(1,5,23)
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void write_sfm4(uchar hang,uchar add,uint date)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	write_data(0x30+date/10000%10);
	write_data(0x30+date/1000%10);
	write_data('.');	
	write_data(0x30+date/100%10);	
	write_data(0x30+date/10%10);
	write_data(0x30+date%10);	
	write_data('k');	
	write_data('m');	
}

void write_sfm7(uchar hang,uchar add,uint date)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	write_data(0x30+date/100000%10);
	write_data(0x30+date/100000%10);
	write_data(0x30+date/10000%10);
	write_data(0x30+date/1000%10);
	write_data('.');	
	write_data(0x30+date/100%10);	
	write_data(0x30+date/10%10);
	write_data('k');	
	write_data('m');	
}

.

链接:https://pan.baidu.com/s/1H9dnBAMxzwC2fSOp68UGzQ
提取码:8hdp

.

  • 13
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值