自行车简易数字里程表设计毕业设计论文

毕业设计论文

摘 要

随着居民生活水平的不断提高,自行车已经不仅仅是普通的代步、运输工具,而是成为人们娱乐、休闲、锻炼的首选。自行车简易数字里程表能够满足人们最基本的需求,让人们能清楚地知道当前的速度、里程等物理量。本论文主要阐述一种基于霍尔元件的自行车速度里程表的设计。以 STC89C52单片机为核心,A44E 霍尔传感器测转数,实现对自行车里程/速度的测量,采用1602LCD显示自行车的里程数及速度。文章详细介绍了自行车的速度里程表的硬件电路。硬件部分利用霍尔元件将自行车每转一圈的脉冲数传入单片机系统,然后单片机系统将信号经过处理送显示。软件部分用C语言进行编程,采用模块化设计思想。该系统硬件电路简单,子程序具有通用性,完全符合设计要求。

关键字:里程/速度;霍尔元件;单片机;LCD显示

ABSTRACT

With the developing of people’s life, the bicycle is not only the universal tool of transportation and substitute for walking, but becomes the first choice of entertainment and exercising. The bicycle mileage/speed can fulfill the basic need of people’s life, so that they can learn the speed and the mileage of the bicycle. In this paper, the bicycle mileage/speed design based on the Hall element is elaborated. By STC89C52as kernel, using A44E Hall element to measure revolution, the measure and statistic are achieved. (Saved by 1602LCD , the bicycle speed can be displayed on LED. )In this article, the hardware circuit design of bicycle mileage/speed instrument are introduced in detail. About the hardware, the pulse number is transmitted of one cycle of the bicycle into Single Chip Microcomputer system. Then the signal processed by Single Chip Microcomputer system is sent to display scream. About the software, in C language; the program is designed in the mode of modules. The system has simple hardware, common sub-program, and meets the demand of design.

KEY WORDS: Mileage / speed; Hall element; Single chip microcomputer; LCD

目录

引 言 ................................................................................................................................................ 5

第一部分 设计任务 ......................................................................................................................... 6

1.1 设计要求 ........................................................................................................................... 6

1.2 方案设计 ........................................................................................................................... 6

第二部分 系统硬件平台的设计 ..................................................................................................... 6

2.1 总体设计方案说明 ........................................................................................................... 6

2.2 单片机最小系统 ............................................................................................................... 7

2.2.1 STC89C52单片机 .................................................................................................. 7

2.2.2 时钟电路 ............................................................................................................... 7

2.2.3 复位电路 ............................................................................................................... 8

2.3 显示模块 ........................................................................................................................... 8

2.4 霍尔传感器的测量原理 ................................................................................................. 10

2.5 DS1302时钟芯片 ............................................................................................................ 10

第三部分 系统软件的设计与实现 ............................................................................................... 11

3.1 主程序流程图 ................................................................................................................. 11

3.2 显示流程图 ..................................................................................................................... 11

3.3 速度处理流程图 ............................................................................................................. 12

3.4 电路仿真 ......................................................................................................................... 13

3.4.1 仿真软件简介 ..................................................................................................... 13

3.4.2 仿真结果 ............................................................................................................. 13

第四部分 安装调试与性能测量 ................................................................................................... 14

第五部分 设计总结 ....................................................................................................................... 14

参考文献......................................................................................................................................... 14

引 言

自行车被发明及使用到现在已有两百多年的历史,这两百年间人类在不断的尝试与研发过程中,将玩具式的木马车转换到今日各式新颖休闲运动自行车,自行车发展的目的也从最早的交通代步的工具转换成休闲娱乐运动的用途。

随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。因此,人们希望自行车的功用更强大,能给人们带来更多的方便。自行车简易数字里程表作为自行车的一大辅助工具也随着这个需求而面世,其功能也逐渐从单一的里程显示发展到速度、时间显示。本设计采用了MCS-51系列单片机设计一种体积小、操作简单的便携式自行车的速度里程表,它能自动地显示当前自行车行驶的里程及速度。

本课题主要任务是利用霍尔元件、单片机等部件设计一个可用1602液晶显示里程和速度的自行车速度里程表。本文主要介绍了自行车的速度里程表的设计思想、电路原理和元件的选择等内容,整体上分为硬件部分设计和软件部分设计。

本文首先扼要对该课题的任务进行方案论证,包括硬件方案和软件方案的设计;继而具体介绍了自行车的速度里程表的硬件设计,包括单片机的选择、传感器的选择、显示电路的设计;然后简要阐述了自行车的速度里程表的软件设计思路;最后针对仿真过程遇到的问题进行了说明与分析,对本次设计进行了系统的总结。

具体的硬件电路包括STC89C52单片机的外围电路以及液晶显示电路等。 软件设计包括:芯片的初始化程序、定时中断子程序、显示子程序等,软件采用C语言编写。

引 言

自行车被发明及使用到现在已有两百多年的历史,这两百年间人类在不断的尝试与研发过程中,将玩具式的木马车转换到今日各式新颖休闲运动自行车,自行车发展的目的也从最早的交通代步的工具转换成休闲娱乐运动的用途。

随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。因此,人们希望自行车的功用更强大,能给人们带来更多的方便。自行车简易数字里程表作为自行车的一大辅助工具也随着这个需求而面世,其功能也逐渐从单一的里程显示发展到速度、时间显示。本设计采用了MCS-51系列单片机设计一种体积小、操作简单的便携式自行车的速度里程表,它能自动地显示当前自行车行驶的里程及速度。

本课题主要任务是利用霍尔元件、单片机等部件设计一个可用1602液晶显示里程和速度的自行车速度里程表。本文主要介绍了自行车的速度里程表的设计思想、电路原理和元件的选择等内容,整体上分为硬件部分设计和软件部分设计。

本文首先扼要对该课题的任务进行方案论证,包括硬件方案和软件方案的设计;继而具体介绍了自行车的速度里程表的硬件设计,包括单片机的选择、传感器的选择、显示电路的设计;然后简要阐述了自行车的速度里程表的软件设计思路;最后针对仿真过程遇到的问题进行了说明与分析,对本次设计进行了系统的总结。

具体的硬件电路包括STC89C52单片机的外围电路以及液晶显示电路等。 软件设计包括:芯片的初始化程序、定时中断子程序、显示子程序等,软件采用C语言编写。

第一部分 设计任务

1.1 设计要求

(1)设计一个可以适用各种自行车的数字里程表,可显示里程、速度等信息。 (2)学习、了解自行车数字里程表的基本工作原理。

1.2 方案设计

采用单片机实现:用霍尔传感器将所测转速转变为数字脉冲信号,然后再将数字脉冲信号数据传输于核心单片机处理,单片机将根据设计程序计算在一定时间内数字脉冲的频率,再由计数值最终得到里程数并通过终端显示设备显示出来。且附加报警功能,在速度超过某一个固定值后,蜂鸣器响,提示需要减速。

第二部分 系统硬件平台的设计

2.1 总体设计方案说明

本设计的任务是:以通用MCS-51单片机为处理核心,用传感器将车轮的转

数转换为电脉冲,进行处理后送入单片机。里程及速度的测量,是经过MCS-51的定时/计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出,其结果通过LED显示器显示出来。

本系统总体思路如下:假定轮圈的周长为L,在轮圈上安装a个永久磁铁,则测得的里程值最大误差为L/a。经综合分析,本设计中取a=1。当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并从引脚P3.2中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。每次中断代表车轮转动一圈,中断数n与轮圈的周长L的乘积为里程值。计数器T1计算每转一圈所用的时间time,就可以计算出即时速度speed。若自行车超过限定速度,系统发出报警信号,蜂鸣器响。

要求达到的各项指标及实现方法如下: 1. 利用霍尔传感器产生里程数的脉冲信号。 2. 对脉冲信号进行计数。

实现:利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数。 3. 对数据进行处理,要求用LED显示里程总数和即时速度。 实现:利用软件编程,对数据进行处理得到需要的数值。

最终实现目标:自行车的速度里程表具有里程、速度测试与显示功能,采用单片机作控制,显示电路可显示里程及速度。

图1 系统框图

2.2 单片机最小系统

2.2.1 STC89C52单片机

在单片机内有一个高增益反相放大器,反相放大器的输入端为XTAL,输出

端为XTAL2,由该放大器、晶振和两个33PF的电容构成的振荡电路做单片机的时钟电路。

图3 时钟电路

2.2.3 复位电路

复位电路原理是单片机RST引脚接收到2us以上电平信号,只要保证电容的充放电时间大于2us,即可复位,所以电路中的电容是可改变的,按键按下,电容处于一个短路电路中,电容释放所有的电能,电阻两端电压升高系统复位。且 振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周 期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。

图4 复位电路

2.3 显示模块

1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背

光的比不带背光的厚,是否带背光在应用中并无差别, 1602LCD及两者尺寸差别如下图所示:

图6 液晶显示模块图

1602引脚说明表格如下:

液晶引脚与单片机连接: 第1脚:VSS接地。

第2脚:VDD接5V正电源。

第3脚:VO接3K的电位器调整对比度。 第4脚:RS为寄存器选择。 第5脚:R/W为读写信号线。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线接单片机P0口。 第15脚:背光源正极接电源。 第16脚:背光源负极接地。

2.4 霍尔传感器的测量原理

图7 霍尔传感器

霍尔传感器是利用霍尔效应制成的一种磁敏传感器。在置于磁场中的导体或半导体通入电流I,若电流垂直磁场B,则在与磁场和电流都垂直的方向上会出现一个电势差Uh,这种现象称为霍尔效应。利用霍尔效应制成的元件称为霍尔元件。因为它具有结构简单、频率响应宽、灵敏度高、测量线性范围大、抗干扰能力强以及体积小、使用寿命长等一系列特点,因此被广泛应用于测量、自动控制及信息处理等领域。

2.5 DS1302

图8 时钟芯片

本设计时间芯片采用的了DS1302,DS1302是由美国DALLAS公司推出的一种具有涓细电流充电能力的低功耗实时时钟电路,具有可对年、月、周、日、时、分、秒进行计时等的功能,工作电压为2.5V~5.5V。主要的特点是采用串行数据传输,即使掉电亦不丢失,在DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302与STC89C52的连接线有三条线:RST引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2作为备用电源,芯片外接晶振X2,为芯片提供计时脉冲。

第三部分 系统软件的设计与实现

3.1 主程序流程图

图9 主程序流程图

3.2 显示流程图

该子程序用LCD动态扫描显示方式。先将单片机的P2.2口连接使能端口E。接着将单片机的P2.0口连接数据/命令选择端RS,P0口连接数据端D0~D7,然后将要显示的数字的值发送给P0口。然后调用延时,接着将P2.2口置0,P2.0口置1,写指令,将P2.2口置1,P2.0口置1,写数据,直到要显示的数字全部显示在液晶上。显示流程图如图10所示。

图10 显示流程图

3.3 速度处理流程图

图11 速度处理流程图

3.4 电路仿真

3.4.1 仿真软件简介

Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面, 它也支持IAR、Keil和MPLAB等多种编译器。

3.4.2 仿真结果

图12 仿真结果

第四部分 安装调试与性能测量

电路实物图如图13所示。

图13 电路实物图

第五部分 设计总结

通过本次设计,使我对单片机知识和理解更一步加深了,掌握了简易数字里程表的设计,组装和调试方法。并且使我更加熟练的应用仿真软件,让我学到了如何运用软件测试电路的可行性,并且对电路的调试改进都有一个很大的提高。

这个过程中我遇到了很多困难,比如如何运用仿真软件画图,如何组织一些比较专业的语言,以及上网查阅资料。虽说费劲,但是乐趣也不少。通过这次设计,我们了解到平时知识的积累真的很重要,在遇到困难时一定要向认真思考,查阅相关资料,不可盲目退缩,努力后就一定会有收获。

这次毕业设计收获颇丰,不仅是对自己个人能力的提高,也让我认识到了自己的局限,通过这次的毕业设计为以后的学习奠定了一个更好的基础。

参考文献

[1] 李朝青. 单片机原理及接口技术. 北京航空航天大学出版社, 1994 [2] 张毅刚, 刘杰. MCS-51单片机原理及应用. 哈尔滨工业大学出版社,2004 [3] 楼然苗, 李光飞. 51系列单片机设计实例. 北京航空航天大学出版社, 2006 [4] 松井邦彦, 梁瑞林. 传感器应用技术141例. 科学出版社, 2006 [5] 张洪润, 张亚凡. 传感器技术与应用教程. 清华大学出版社, 2005 [6] 刘灿军. 实用传感器. 国防工业出版社, 2004 [7] 何希才. 传感器及其应用. 国防工业出版社, 2001

[8] 刁文兴. 自行车电子里程表的初步设计. 南京工业职业技术学院学报, 2004, 6: 25-28 [9] 安宗权. 电动电子车速里程表分频电路设计. 自动化与仪器仪表, 2001, 5: 39-44 [10] 阎焕忠, 王长涛, 马斌. 单片机控制里程转速表的设计. 沈阳建筑工程学院学报(自

然科学版),2002, 4: 145-148

[11] 谢自美. 电子线路设计.实验.测试[M].武汉:华中科技大学出版社,2000:212-230 [12] 张福学. 传感器使用电路150例.中国技术出版社.1992

程序

#include //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255

#define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include "eeprom52.h"

/******************

ds1302 内部RAM RAM0 1100 000R/W 1读 0写

RAM1 1100 001R/W

....... RAM30 1111 110R/W

********************/

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; //dlaout time1 ,speed_km,speed_m; uchar TH11,TL11;

uchar flag_en; //开始计算速度使能 uchar flag_stop_en; //要确定车子是否停下了

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 = 80; //报警速度

//这三个引脚参考资料

sbit rs=P1^0; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit rw=P1^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit e =P1^2; //片选信号 下降沿触发

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

for(j=0;j

/******************把数据保存到单片机内部eepom中******************/ void write_eeprom()

{

SectorErase(0x2000);

byte_write(0x2000, bj_shudu % 256);

byte_write(0x2001, bj_shudu / 256);

byte_write(0x2002, zong_lc % 256);

byte_write(0x2003, zong_lc / 256 % 256);

byte_write(0x2004, zong_lc / 256 / 256 % 256);

byte_write(0x2055, a_a); }

/******************把数据从单片机内部eepom中读出来*****************/ void read_eeprom() {

uint value;

bj_shudu = byte_read(0x2001); bj_shudu

bj_shudu |= byte_read(0x2000); zong_lc = byte_read(0x2004); zong_lc

value = byte_read(0x2003); zong_lc |= (value

zong_lc |= byte_read(0x2002); a_a = byte_read(0x2055); }

/**************开机初始化保存的数据*****************/

void init_eeprom() //开机初始化保存的数据* {

read_eeprom(); //先读

if(a_a != 1) //新的单片机初始单片机内问eeprom {

bj_shudu = 50; a_a = 1;

write_eeprom(); //保存数据

} }

/******************************************************************** * 名称 : delay_uint() * 功能 : 小延时。 * 输入 : 无 * 输出 : 无

***********************************************************************/ void delay_uint(uint q) {

while(q--); }

/******************************************************************** * 名称 : write_com(uchar com) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无

***********************************************************************/ void write_com(uchar com) {

i =0; e=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; e=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'); }

/***********************lcd1602上显示两位十进制数************************/

void write_sfm1(uchar hang,uchar add,uchar date) {

if(hang==1)

write_com(0x80+add); else

write_com(0x80+0x40+add); write_data(0x30+date % 10); }

/******************************************************************** * 名称 : write_string(uchar hang,uchar add,uchar *p) * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据 * 输出 : 无

***********************************************************************/ void write_string(uchar hang,uchar add,uchar *p) {

if(hang==1)

write_com(0x80+add); else

write_com(0x80+0x40+add); while(1) {

if(*p == '\0') break; write_data(*p); p++; } }

/***********************lcd1602上显示两位十进制数************************/ void write_sfm2_ds1302(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add); else

write_com(0x80+0x40+add); write_data(table_num[date / 16]); write_data(table_num[date % 16]); }

/*****************控制光标函数********************/

void write_guanbiao(uchar hang,uchar add,uchar date) {

if(hang==1)

write_com(0x80+add); else

write_com(0x80+0x40+add); if(date == 1)

write_com(0x0f); //显示光标并且闪烁 else

write_com(0x0c); //关闭光标 }

/******************************************************************** * 名称 : init_1602()

* 功能 : 初始化1602液晶 * 输入 : 无 * 输出 : 无

***********************************************************************/ void init_1602() //1602初始化 {

write_com(0x38); write_com(0x0c); write_com(0x06); delay_uint(1000);

write_string(1,0,"sd:00km/h 00:00");

write_string(2,0,"lc:00.00km "); }

// E309R

/*************写一个数据到对应的地址里***************/

void write_ds1302(uchar add,uchar dat) {

rst = 1; //把复位线拿高

for(i=0;i

{ //低位在前 clk = 0; //时钟线拿低开始写数据

io = add & 0x01; add >>= 1; //把地址右移一位

clk = 1; //时钟线拿高

}

for(i=0;i

clk = 0; //时钟线拿低开始写数据

io = dat & 0x01;

dat >>= 1; //把数据右移一位

clk = 1; //时钟线拿高 }

rst = 0; //复位线合低

clk = 0; io = 0; }

/*************从对应的地址读一个数据出来***************/ uchar read_ds1302(uchar add) {

uchar value,i;

rst = 1; //把复位线拿高

for(i=0;i

{ //低位在前 clk = 0; //时钟线拿低开始写数据

io = add & 0x01; add >>= 1; //把地址右移一位

clk = 1; //时钟线拿高

}

for(i=0;i

clk = 0; //时钟线拿低开始读数据

value >>= 1; if(io == 1)

value |= 0x80;

clk = 1; //时钟线拿高 }

rst = 0; //复位线合低

clk = 0; io = 0;

return value; //返回读出来的数据 }

/*************把要的时间 年月日 都读出来***************/ void read_time() {

miao = read_ds1302(read_add[0]); //读秒

fen = read_ds1302(read_add[1]); //读分

shi = read_ds1302(read_add[2]);

//读时

ri = read_ds1302(read_add[3]); //读日

yue = read_ds1302(read_add[4]); //读月

nian = read_ds1302(read_add[5]); //读年

week = read_ds1302(read_add[6]); //读星期 }

/*************把要写的时间 年月日 都写入ds1302里***************/ void write_time() {

write_ds1302(0x8e,0x00); //打开写保护

write_ds1302(write_add[0],miao); //写秒

write_ds1302(write_add[1],fen); //写分

write_ds1302(write_add[2],shi); //写时

write_ds1302(write_add[3],ri); //写日

write_ds1302(write_add[4],yue); //写月

write_ds1302(write_add[5],nian); //写星期

write_ds1302(write_add[6],week); //写年

write_ds1302(0x8e,0x80); //关闭写保护 }

/*************把数据保存到ds1302 RAM中**0-31*************/

void write_ds1302ram(uchar add,uchar dat) {

add

/*************把数据从ds1302 RAM读出来**0-31*************/

uchar read_ds1302ram(uchar add) {

add

add |= 0x01; //把最高位置1 是读命令 add |= 0xc0; //地址最高两位为 1 return(read_ds1302(add)); }

/*************初始化ds1302时间***************/ void init_ds1302() {

uchar i;

rst = 0; //第一次读写数据时要把IO品拿低 clk = 0; io = 0;

i = read_ds1302ram(30); if(i != 3) {

i = 3;

write_ds1302ram(30,i);

write_ds1302(0x8e,0x00); //打开写保护

for(i=0;i

write_ds1302(write_add[i],init_ds[i]); //把最高位值0 允许ds1302工作

write_ds1302(0x8e,0x80); //关写保护

毕业设计论文

摘 要

随着居民生活水平的不断提高,自行车已经不仅仅是普通的代步、运输工具,而是成为人们娱乐、休闲、锻炼的首选。自行车简易数字里程表能够满足人们最基本的需求,让人们能清楚地知道当前的速度、里程等物理量。本论文主要阐述一种基于霍尔元件的自行车速度里程表的设计。以 STC89C52单片机为核心,A44E 霍尔传感器测转数,实现对自行车里程/速度的测量,采用1602LCD显示自行车的里程数及速度。文章详细介绍了自行车的速度里程表的硬件电路。硬件部分利用霍尔元件将自行车每转一圈的脉冲数传入单片机系统,然后单片机系统将信号经过处理送显示。软件部分用C语言进行编程,采用模块化设计思想。该系统硬件电路简单,子程序具有通用性,完全符合设计要求。

关键字:里程/速度;霍尔元件;单片机;LCD显示

ABSTRACT

With the developing of people’s life, the bicycle is not only the universal tool of transportation and substitute for walking, but becomes the first choice of entertainment and exercising. The bicycle mileage/speed can fulfill the basic need of people’s life, so that they can learn the speed and the mileage of the bicycle. In this paper, the bicycle mileage/speed design based on the Hall element is elaborated. By STC89C52as kernel, using A44E Hall element to measure revolution, the measure and statistic are achieved. (Saved by 1602LCD , the bicycle speed can be displayed on LED. )In this article, the hardware circuit design of bicycle mileage/speed instrument are introduced in detail. About the hardware, the pulse number is transmitted of one cycle of the bicycle into Single Chip Microcomputer system. Then the signal processed by Single Chip Microcomputer system is sent to display scream. About the software, in C language; the program is designed in the mode of modules. The system has simple hardware, common sub-program, and meets the demand of design.

KEY WORDS: Mileage / speed; Hall element; Single chip microcomputer; LCD

目录

引 言 ................................................................................................................................................ 5

第一部分 设计任务 ......................................................................................................................... 6

1.1 设计要求 ........................................................................................................................... 6

1.2 方案设计 ........................................................................................................................... 6

第二部分 系统硬件平台的设计 ..................................................................................................... 6

2.1 总体设计方案说明 ........................................................................................................... 6

2.2 单片机最小系统 ............................................................................................................... 7

2.2.1 STC89C52单片机 .................................................................................................. 7

2.2.2 时钟电路 ............................................................................................................... 7

2.2.3 复位电路 ............................................................................................................... 8

2.3 显示模块 ........................................................................................................................... 8

2.4 霍尔传感器的测量原理 ................................................................................................. 10

2.5 DS1302时钟芯片 ............................................................................................................ 10

第三部分 系统软件的设计与实现 ............................................................................................... 11

3.1 主程序流程图 ................................................................................................................. 11

3.2 显示流程图 ..................................................................................................................... 11

3.3 速度处理流程图 ............................................................................................................. 12

3.4 电路仿真 ......................................................................................................................... 13

3.4.1 仿真软件简介 ..................................................................................................... 13

3.4.2 仿真结果 ............................................................................................................. 13

第四部分 安装调试与性能测量 ................................................................................................... 14

第五部分 设计总结 ....................................................................................................................... 14

参考文献......................................................................................................................................... 14

引 言

自行车被发明及使用到现在已有两百多年的历史,这两百年间人类在不断的尝试与研发过程中,将玩具式的木马车转换到今日各式新颖休闲运动自行车,自行车发展的目的也从最早的交通代步的工具转换成休闲娱乐运动的用途。

随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。因此,人们希望自行车的功用更强大,能给人们带来更多的方便。自行车简易数字里程表作为自行车的一大辅助工具也随着这个需求而面世,其功能也逐渐从单一的里程显示发展到速度、时间显示。本设计采用了MCS-51系列单片机设计一种体积小、操作简单的便携式自行车的速度里程表,它能自动地显示当前自行车行驶的里程及速度。

本课题主要任务是利用霍尔元件、单片机等部件设计一个可用1602液晶显示里程和速度的自行车速度里程表。本文主要介绍了自行车的速度里程表的设计思想、电路原理和元件的选择等内容,整体上分为硬件部分设计和软件部分设计。

本文首先扼要对该课题的任务进行方案论证,包括硬件方案和软件方案的设计;继而具体介绍了自行车的速度里程表的硬件设计,包括单片机的选择、传感器的选择、显示电路的设计;然后简要阐述了自行车的速度里程表的软件设计思路;最后针对仿真过程遇到的问题进行了说明与分析,对本次设计进行了系统的总结。

具体的硬件电路包括STC89C52单片机的外围电路以及液晶显示电路等。 软件设计包括:芯片的初始化程序、定时中断子程序、显示子程序等,软件采用C语言编写。

引 言

自行车被发明及使用到现在已有两百多年的历史,这两百年间人类在不断的尝试与研发过程中,将玩具式的木马车转换到今日各式新颖休闲运动自行车,自行车发展的目的也从最早的交通代步的工具转换成休闲娱乐运动的用途。

随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。因此,人们希望自行车的功用更强大,能给人们带来更多的方便。自行车简易数字里程表作为自行车的一大辅助工具也随着这个需求而面世,其功能也逐渐从单一的里程显示发展到速度、时间显示。本设计采用了MCS-51系列单片机设计一种体积小、操作简单的便携式自行车的速度里程表,它能自动地显示当前自行车行驶的里程及速度。

本课题主要任务是利用霍尔元件、单片机等部件设计一个可用1602液晶显示里程和速度的自行车速度里程表。本文主要介绍了自行车的速度里程表的设计思想、电路原理和元件的选择等内容,整体上分为硬件部分设计和软件部分设计。

本文首先扼要对该课题的任务进行方案论证,包括硬件方案和软件方案的设计;继而具体介绍了自行车的速度里程表的硬件设计,包括单片机的选择、传感器的选择、显示电路的设计;然后简要阐述了自行车的速度里程表的软件设计思路;最后针对仿真过程遇到的问题进行了说明与分析,对本次设计进行了系统的总结。

具体的硬件电路包括STC89C52单片机的外围电路以及液晶显示电路等。 软件设计包括:芯片的初始化程序、定时中断子程序、显示子程序等,软件采用C语言编写。

第一部分 设计任务

1.1 设计要求

(1)设计一个可以适用各种自行车的数字里程表,可显示里程、速度等信息。 (2)学习、了解自行车数字里程表的基本工作原理。

1.2 方案设计

采用单片机实现:用霍尔传感器将所测转速转变为数字脉冲信号,然后再将数字脉冲信号数据传输于核心单片机处理,单片机将根据设计程序计算在一定时间内数字脉冲的频率,再由计数值最终得到里程数并通过终端显示设备显示出来。且附加报警功能,在速度超过某一个固定值后,蜂鸣器响,提示需要减速。

第二部分 系统硬件平台的设计

2.1 总体设计方案说明

本设计的任务是:以通用MCS-51单片机为处理核心,用传感器将车轮的转

数转换为电脉冲,进行处理后送入单片机。里程及速度的测量,是经过MCS-51的定时/计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出,其结果通过LED显示器显示出来。

本系统总体思路如下:假定轮圈的周长为L,在轮圈上安装a个永久磁铁,则测得的里程值最大误差为L/a。经综合分析,本设计中取a=1。当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并从引脚P3.2中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。每次中断代表车轮转动一圈,中断数n与轮圈的周长L的乘积为里程值。计数器T1计算每转一圈所用的时间time,就可以计算出即时速度speed。若自行车超过限定速度,系统发出报警信号,蜂鸣器响。

要求达到的各项指标及实现方法如下: 1. 利用霍尔传感器产生里程数的脉冲信号。 2. 对脉冲信号进行计数。

实现:利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数。 3. 对数据进行处理,要求用LED显示里程总数和即时速度。 实现:利用软件编程,对数据进行处理得到需要的数值。

最终实现目标:自行车的速度里程表具有里程、速度测试与显示功能,采用单片机作控制,显示电路可显示里程及速度。

图1 系统框图

2.2 单片机最小系统

2.2.1 STC89C52单片机

在单片机内有一个高增益反相放大器,反相放大器的输入端为XTAL,输出

端为XTAL2,由该放大器、晶振和两个33PF的电容构成的振荡电路做单片机的时钟电路。

图3 时钟电路

2.2.3 复位电路

复位电路原理是单片机RST引脚接收到2us以上电平信号,只要保证电容的充放电时间大于2us,即可复位,所以电路中的电容是可改变的,按键按下,电容处于一个短路电路中,电容释放所有的电能,电阻两端电压升高系统复位。且 振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周 期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。

图4 复位电路

2.3 显示模块

1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背

光的比不带背光的厚,是否带背光在应用中并无差别, 1602LCD及两者尺寸差别如下图所示:

图6 液晶显示模块图

1602引脚说明表格如下:

液晶引脚与单片机连接: 第1脚:VSS接地。

第2脚:VDD接5V正电源。

第3脚:VO接3K的电位器调整对比度。 第4脚:RS为寄存器选择。 第5脚:R/W为读写信号线。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线接单片机P0口。 第15脚:背光源正极接电源。 第16脚:背光源负极接地。

2.4 霍尔传感器的测量原理

图7 霍尔传感器

霍尔传感器是利用霍尔效应制成的一种磁敏传感器。在置于磁场中的导体或半导体通入电流I,若电流垂直磁场B,则在与磁场和电流都垂直的方向上会出现一个电势差Uh,这种现象称为霍尔效应。利用霍尔效应制成的元件称为霍尔元件。因为它具有结构简单、频率响应宽、灵敏度高、测量线性范围大、抗干扰能力强以及体积小、使用寿命长等一系列特点,因此被广泛应用于测量、自动控制及信息处理等领域。

2.5 DS1302

图8 时钟芯片

本设计时间芯片采用的了DS1302,DS1302是由美国DALLAS公司推出的一种具有涓细电流充电能力的低功耗实时时钟电路,具有可对年、月、周、日、时、分、秒进行计时等的功能,工作电压为2.5V~5.5V。主要的特点是采用串行数据传输,即使掉电亦不丢失,在DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302与STC89C52的连接线有三条线:RST引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2作为备用电源,芯片外接晶振X2,为芯片提供计时脉冲。

第三部分 系统软件的设计与实现

3.1 主程序流程图

图9 主程序流程图

3.2 显示流程图

该子程序用LCD动态扫描显示方式。先将单片机的P2.2口连接使能端口E。接着将单片机的P2.0口连接数据/命令选择端RS,P0口连接数据端D0~D7,然后将要显示的数字的值发送给P0口。然后调用延时,接着将P2.2口置0,P2.0口置1,写指令,将P2.2口置1,P2.0口置1,写数据,直到要显示的数字全部显示在液晶上。显示流程图如图10所示。

图10 显示流程图

3.3 速度处理流程图

图11 速度处理流程图

3.4 电路仿真

3.4.1 仿真软件简介

Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面, 它也支持IAR、Keil和MPLAB等多种编译器。

3.4.2 仿真结果

图12 仿真结果

第四部分 安装调试与性能测量

电路实物图如图13所示。

图13 电路实物图

第五部分 设计总结

通过本次设计,使我对单片机知识和理解更一步加深了,掌握了简易数字里程表的设计,组装和调试方法。并且使我更加熟练的应用仿真软件,让我学到了如何运用软件测试电路的可行性,并且对电路的调试改进都有一个很大的提高。

这个过程中我遇到了很多困难,比如如何运用仿真软件画图,如何组织一些比较专业的语言,以及上网查阅资料。虽说费劲,但是乐趣也不少。通过这次设计,我们了解到平时知识的积累真的很重要,在遇到困难时一定要向认真思考,查阅相关资料,不可盲目退缩,努力后就一定会有收获。

这次毕业设计收获颇丰,不仅是对自己个人能力的提高,也让我认识到了自己的局限,通过这次的毕业设计为以后的学习奠定了一个更好的基础。

参考文献

[1] 李朝青. 单片机原理及接口技术. 北京航空航天大学出版社, 1994 [2] 张毅刚, 刘杰. MCS-51单片机原理及应用. 哈尔滨工业大学出版社,2004 [3] 楼然苗, 李光飞. 51系列单片机设计实例. 北京航空航天大学出版社, 2006 [4] 松井邦彦, 梁瑞林. 传感器应用技术141例. 科学出版社, 2006 [5] 张洪润, 张亚凡. 传感器技术与应用教程. 清华大学出版社, 2005 [6] 刘灿军. 实用传感器. 国防工业出版社, 2004 [7] 何希才. 传感器及其应用. 国防工业出版社, 2001

[8] 刁文兴. 自行车电子里程表的初步设计. 南京工业职业技术学院学报, 2004, 6: 25-28 [9] 安宗权. 电动电子车速里程表分频电路设计. 自动化与仪器仪表, 2001, 5: 39-44 [10] 阎焕忠, 王长涛, 马斌. 单片机控制里程转速表的设计. 沈阳建筑工程学院学报(自

然科学版),2002, 4: 145-148

[11] 谢自美. 电子线路设计.实验.测试[M].武汉:华中科技大学出版社,2000:212-230 [12] 张福学. 传感器使用电路150例.中国技术出版社.1992

程序

#include //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255

#define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include "eeprom52.h"

/******************

ds1302 内部RAM RAM0 1100 000R/W 1读 0写

RAM1 1100 001R/W

....... RAM30 1111 110R/W

********************/

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; //dlaout time1 ,speed_km,speed_m; uchar TH11,TL11;

uchar flag_en; //开始计算速度使能 uchar flag_stop_en; //要确定车子是否停下了

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 = 80; //报警速度

//这三个引脚参考资料

sbit rs=P1^0; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit rw=P1^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit e =P1^2; //片选信号 下降沿触发

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

for(j=0;j

/******************把数据保存到单片机内部eepom中******************/ void write_eeprom()

{

SectorErase(0x2000);

byte_write(0x2000, bj_shudu % 256);

byte_write(0x2001, bj_shudu / 256);

byte_write(0x2002, zong_lc % 256);

byte_write(0x2003, zong_lc / 256 % 256);

byte_write(0x2004, zong_lc / 256 / 256 % 256);

byte_write(0x2055, a_a); }

/******************把数据从单片机内部eepom中读出来*****************/ void read_eeprom() {

uint value;

bj_shudu = byte_read(0x2001); bj_shudu

bj_shudu |= byte_read(0x2000); zong_lc = byte_read(0x2004); zong_lc

value = byte_read(0x2003); zong_lc |= (value

zong_lc |= byte_read(0x2002); a_a = byte_read(0x2055); }

/**************开机初始化保存的数据*****************/

void init_eeprom() //开机初始化保存的数据* {

read_eeprom(); //先读

if(a_a != 1) //新的单片机初始单片机内问eeprom {

bj_shudu = 50; a_a = 1;

write_eeprom(); //保存数据

} }

/******************************************************************** * 名称 : delay_uint() * 功能 : 小延时。 * 输入 : 无 * 输出 : 无

***********************************************************************/ void delay_uint(uint q) {

while(q--); }

/******************************************************************** * 名称 : write_com(uchar com) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无

***********************************************************************/ void write_com(uchar com) {

i =0; e=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; e=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'); }

/***********************lcd1602上显示两位十进制数************************/

void write_sfm1(uchar hang,uchar add,uchar date) {

if(hang==1)

write_com(0x80+add); else

write_com(0x80+0x40+add); write_data(0x30+date % 10); }

/******************************************************************** * 名称 : write_string(uchar hang,uchar add,uchar *p) * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据 * 输出 : 无

***********************************************************************/ void write_string(uchar hang,uchar add,uchar *p) {

if(hang==1)

write_com(0x80+add); else

write_com(0x80+0x40+add); while(1) {

if(*p == '\0') break; write_data(*p); p++; } }

/***********************lcd1602上显示两位十进制数************************/ void write_sfm2_ds1302(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add); else

write_com(0x80+0x40+add); write_data(table_num[date / 16]); write_data(table_num[date % 16]); }

/*****************控制光标函数********************/

void write_guanbiao(uchar hang,uchar add,uchar date) {

if(hang==1)

write_com(0x80+add); else

write_com(0x80+0x40+add); if(date == 1)

write_com(0x0f); //显示光标并且闪烁 else

write_com(0x0c); //关闭光标 }

/******************************************************************** * 名称 : init_1602()

* 功能 : 初始化1602液晶 * 输入 : 无 * 输出 : 无

***********************************************************************/ void init_1602() //1602初始化 {

write_com(0x38); write_com(0x0c); write_com(0x06); delay_uint(1000);

write_string(1,0,"sd:00km/h 00:00");

write_string(2,0,"lc:00.00km "); }

// E309R

/*************写一个数据到对应的地址里***************/

void write_ds1302(uchar add,uchar dat) {

rst = 1; //把复位线拿高

for(i=0;i

{ //低位在前 clk = 0; //时钟线拿低开始写数据

io = add & 0x01; add >>= 1; //把地址右移一位

clk = 1; //时钟线拿高

}

for(i=0;i

clk = 0; //时钟线拿低开始写数据

io = dat & 0x01;

dat >>= 1; //把数据右移一位

clk = 1; //时钟线拿高 }

rst = 0; //复位线合低

clk = 0; io = 0; }

/*************从对应的地址读一个数据出来***************/ uchar read_ds1302(uchar add) {

uchar value,i;

rst = 1; //把复位线拿高

for(i=0;i

{ //低位在前 clk = 0; //时钟线拿低开始写数据

io = add & 0x01; add >>= 1; //把地址右移一位

clk = 1; //时钟线拿高

}

for(i=0;i

clk = 0; //时钟线拿低开始读数据

value >>= 1; if(io == 1)

value |= 0x80;

clk = 1; //时钟线拿高 }

rst = 0; //复位线合低

clk = 0; io = 0;

return value; //返回读出来的数据 }

/*************把要的时间 年月日 都读出来***************/ void read_time() {

miao = read_ds1302(read_add[0]); //读秒

fen = read_ds1302(read_add[1]); //读分

shi = read_ds1302(read_add[2]);

//读时

ri = read_ds1302(read_add[3]); //读日

yue = read_ds1302(read_add[4]); //读月

nian = read_ds1302(read_add[5]); //读年

week = read_ds1302(read_add[6]); //读星期 }

/*************把要写的时间 年月日 都写入ds1302里***************/ void write_time() {

write_ds1302(0x8e,0x00); //打开写保护

write_ds1302(write_add[0],miao); //写秒

write_ds1302(write_add[1],fen); //写分

write_ds1302(write_add[2],shi); //写时

write_ds1302(write_add[3],ri); //写日

write_ds1302(write_add[4],yue); //写月

write_ds1302(write_add[5],nian); //写星期

write_ds1302(write_add[6],week); //写年

write_ds1302(0x8e,0x80); //关闭写保护 }

/*************把数据保存到ds1302 RAM中**0-31*************/

void write_ds1302ram(uchar add,uchar dat) {

add

/*************把数据从ds1302 RAM读出来**0-31*************/

uchar read_ds1302ram(uchar add) {

add

add |= 0x01; //把最高位置1 是读命令 add |= 0xc0; //地址最高两位为 1 return(read_ds1302(add)); }

/*************初始化ds1302时间***************/ void init_ds1302() {

uchar i;

rst = 0; //第一次读写数据时要把IO品拿低 clk = 0; io = 0;

i = read_ds1302ram(30); if(i != 3) {

i = 3;

write_ds1302ram(30,i);

write_ds1302(0x8e,0x00); //打开写保护

for(i=0;i

write_ds1302(write_add[i],init_ds[i]); //把最高位值0 允许ds1302工作

write_ds1302(0x8e,0x80); //关写保护


相关文章

  • 简易自行车数字里程表设计
  • 本 科 毕 业 论 文 题 目: 简易自行车数字里程表设计 摘 要 本文对自行车里程表的结构.设计原理进行了介绍,并应用芯片LM339和AT89S51设计.制作了自行车里程表.文章介绍了所用芯片的存储结构.各管脚的功能,对各个模块的工作原理 ...查看


  • 电子信息工程毕业设计题目大全
  • 1 压力容器液位测量 2 多功能遥控小车 3基于RS232的仓库多点温度.湿度.气 4压检测系统 5自动控制升降旗系统 6基于RS485的温度报警系统 7基于模糊算法的水温控制系统的设计 8多分机电话交换机 9简易火灾自动报警系统 10基于 ...查看


  • 铁路线路大修毕业设计
  • 摘 要 本设计是运用所学轨道基本理论,知识和技能,进行工程设计的综合训练,是综合素质和工程实践能力的重要体现,是每个学生都必须经过的作为一个铁道工程技术人员所必须的训练,有助于到工作岗位的过渡. 线路设备大修的基本任务是:根据运输需要及线路 ...查看


  • 开题报告和论文要求
  • 毕 业 设 计(论 文)开 题 报 告 学生在开题报告上主要写的内容是:一.论文选题的目的与意义:二.选题的现状和前景展望(例如:交通灯控制电路的现状.发展趋势等): 三.设计的主要内容和技术要求:四.可行性分析.研究方法和设计步骤. 商丘 ...查看


  • 电子设计大赛介绍要求
  • 电子设计竞赛对课程体系和教学内容的改革起到了促进作用.从前几届电子设计竞赛的试题来看,可以归纳成5类,即(1)电源类:简易数控直流电源(第一届),直流稳压电源(第三届):(2)信号源类:实用信号源的设计和制作(第二届):(3)无线电类:实用 ...查看


  • 丹麦的交通运输
  • 漠羲z羧oF菲静鹣鼷耀毯凝建1瀚鞋懿载 信息系统.市民除了可以在枢纽站信息中心得到方方面面的信息以外,还 可以在地铁车站.汽车站.商店.停车场等场所获得交通信息及其它的 信息,使市民出行方便,乘车放心. 管理部门可以通过信息网络直接获取各种 ...查看


  • 基于单片机自行车速度里程表的设计
  • 毕业设计(论文) (成教) 题目: 基于单片机的自行车速度里程表的设计 院 (系) : 机电工程学院 专 业: 应用电子ZK331101 姓 名: 李 大 学 号: 指导教师: 田 丰 二〇一三年一月二十日 毕业设计(论文)任务书 2 毕业 ...查看


  • 道路工程测量技术毕业论文
  • 工程测量技术专业 毕 业 设 计 指 导 书 吉林交通职业技术学院 道桥工程分院工程测量教研室 2012年12月 目 录 一.目的和意义„„„„„„„„„„„„„„„„„„„„„2 二.设计标准及原则„„„„„„„„„„„„„„„„„„„„ ...查看


  • 房屋测绘专业毕业论文
  • 远程与继续教育学院 本科毕业论文(设计) 题目:<控制测量简易平差程序设计> 学习中心: 浙江分院 学 号: 姓 名: 专 业: 指导教师: 2014 年 3 月 5 日 中国地质大学(武汉)远程与继续教育学院 本科毕业论文(设 ...查看


热门内容