基于单片机的自行车里程表设计 下载本文

内容发布更新时间 : 2024/5/10 16:23:40星期一 下面是文章的全部内容请认真阅读。

为外部时钟方式。本设计采用前者。 单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。单片机内部时钟方式的振荡电路如图3.9所示。

AT89C52XTAL2 C1 30pC2 30pXTAL1Vss

图3.9 单片机片内振荡电路

电路中的电容C1和C2常选择为30pF左右。对外接电容的值虽然没有严格的要求,但电容的大小会影响振荡器的高低、振荡器的稳定性、起振的快速性和温度的稳定性。而外接晶体的振荡频率的大小,主要取决于单片机的工作频率范围,每一种单片机都有自己的最大工作频率,外接的晶体振荡频率不大于单片机的最大工作频率即可。此外,如果单片机有串行通信,则应该选择振荡频率除以串行通信频率可以除尽的晶体。本设计晶振采用12MHz。

2. 复位电路的设计

89C52的复位输入引脚RET(即RESET)为89C52提供了初始化的手段。有了它可以使程序从指定处开始执行,即从程序存储器中的0000H地址单元开始执行程序。在89C52的时钟电路工作后,只要在RET引脚上出现两个机器周期以上的高电平时,单片机内部则初始复位。只要RET保持高电平,则89C52循环复位。只有当RET由高电平变成低电平以后,89C52才从0000H地址开始执行程序。

复位操作对寄存器也有影响,但内部RAM不受复位的影响。当Vcc加电后,RAM的内容是随机的。它们的复位状态如表3.2所示。

表3.2 MCS-51的复位状态表

寄存器 PC A 复位状态 0000H 00H 寄存器 TCON TMOD 复位状态 00H 00H -21-

寄存器 B PSW SP DPTR P0~P3 IP IE 复位状态 00H 00H 07H 0000H FFH XX000000H 0X000000H 寄存器 TH0 TL0 TH1 TL1 SCON SBUF PCON 复位状态 00H 00H 00H 00H 00H XXH 0XXX0000B 由表3.2中可以看出,复位时,SP=07H;4个I/O端口P0~P3的引脚均为高电平,这在某些控制应用中,要考虑到引脚的高电平对外部控制电路的影响。由于单片机内部的各个功能部件均受特殊功能寄存器控制,程序运行直接受程序计数器(PC)的指挥。另外,在复位有效期间(即高电平),MCS-51单片机的ALE引脚和PSEN引脚均为高电平,且内部RAM不受复位的影响。

本系统的复位电路是采用按键复位的电路,如图3.10所示,是常用复位电路之一。当89C52的ALE及PSEN两引脚输出高电平,RET引脚为高电平时,单片机复位。通过按动按钮产生高电平复位称手动复位。上电时,刚接通电源,电容C相当于瞬间短路,+5V立即加到RET/VPD端,该高电平使89C52全机自动复位,这就是上电复位;若运行过程中需要程序从头执行,只需按动按钮即可。按下按钮,则直接把+5V加到了RET/VPD端从而复位称为手动复位。复位后,P0到P3并行I/O口全为高电平,其它寄存器全部清零,只有SBUF寄存器状态不确定。

图3.10 按键复位电路

工作原理:上电瞬间,RC电路充电,RST引脚出现高电平,只要RST端保持10ms以上高电平,就能使单片机有效地复位。

3. 显示电路的设计

-22-

本设计中采用LED数码管显示。在单片机系统中,通常用LED数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。八段LED显示器由8个发光二极管组成。其中7个发光二极管构成字型“8”的各个笔画段,另一个小数点为dp发光二极管。LED显示器有两种不同的形式:一种是发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是发光二极管的阴极都连在一起的,称之为共阴极LED显示器。如图3.11所示。

图3.11 七(八)段LED显示器

a)外形图 b)共阳极接法 c)共阴极接法 LED显示方式有动态显示和静态显示两种方式。本系统采用动态扫描显示接口电路,动态显示接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM各自独立地受I/O线控制。CPU向字段输出口送出字型码时,所有显示器接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端。也就是说我们可以采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

因为LED的正向工作电压一般在1.2V-2.6V,其发光工作电流为5mA-20mA,发光强度基本上与正向电流成正比,故电路需串联适当的限流电阻,本设计选择比较常用的100?电阻。

本设计P2.0、P2.1、P2.2、P2.3信号一起组成位选通的位选信号,P0.0~P0.7信号一起组成段码选通的段选信号,通过软件编程,先把所要显示的数据放入存储单元,然后把数据送入段选通对应的地址,再选通某一个LED,逐步完成四个LED的显示。

-23-

4. 单片机各口的作用和用途 自行车里程表采用AT89C52单片机作控制,速度及里程传感器采用霍尔元件,其电路原理图如附录Ⅰ所示。P0口和P2口用于七段LED显示器的段码及位选扫描输出,在显示里程时,第3位小数点用17脚P3.7口控制点亮。P1.0和P1.1口分别用于显示里程状态和速度状态。P1.2、P1.3、P1.6和P1.7口分别用于设置轮圈的大小。第10脚的开关用于确定显示的方式,当开关S闭合时,显示速度;打开开关S时,显示里程。第12脚外中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平。第13脚外中断1用于控制定时器T1的启/停,当输入为0时关闭定时器。此控制信号是将轮子圈数的计数脉冲经二分频后形成,如图3.12所示。这样,每次定时器T1的开启时间刚好为转1圈的时间,根据轮子的周长就可以计算出自行车的速度。P1.4口和P1.5口用于E2PROM存储器24C02的存取控制。11脚输出用于速度超速时的报警,报警电路图如图3.13所示。

图3.12 单片机11、12脚的输入波形

图3.13 报警电路图

-24-

第4章 自行车里程表软件程序设计

4.1 概述

在硬件设计完毕之后,接下来就是设计中最核心和最为主要的软件部分设计。所谓软件设计就是把软件需求变换成软件的具体设计方案(即模块结构)的过程。模块化结构设计即是根据要求和硬件设计的结构,将整个系统的功能分成许多小的功能模块,再根据这些小的功能模块进行程序编写的过程。这样的设计方法,使得系统的整个功能和各部分的功能趋于明朗化。当系统出现问题,就可以根据功能设置找出问题的根源,从而更快地解决问题。所以说,在整个设计过程中,软件设计必须与硬件设计紧密地结合在一起。

基于霍尔传感器自行车里程表的软件设计包括计数子程序、计时子程序、LED显示子程序等几大部分。由于要实现很多功能,所以采用模块化设计,下面就其主要部分分别加以分析。

4.2 自行车里程表总体程序设计

在主程序模块中,需要完成对各接口芯片的初始化、自行车里程和速度的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器、速度寄存器,并对它们进行初始化。然后主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计速等不同的操作。

P1.0和P1.1口分别用于显示里程状态和速度状态。P1.2、P1.3、P1.6和P1.7口分别用于设置轮圈的大小。当按下S时,就显示速度;当开关S打开时,就显示里程,中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平脉冲。将根据里程寄存器中的内容计算和判断出行驶里程数。中断1用于控制定时器T1的启/停,当输入为0时关闭定时器。此控制信号是将轮子圈数的计数经二分频后形成。这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出自行车的速度。其程序流程如图4.1所示。

-25-