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

开始初始化 P1.2=1?N设置车圈长度Y N P1.3=1?设置车圈长度YN P1.6=1?Y设置车圈长度N P1.7=1?设置车圈长度Y出错提示将车圈长度调入21H启动定时器,开中断将EEPROM中数据读入N P3.0=1?Y里程处理子程序速度处理子程序 图4.1 主程序流程图

-26-

4.3 中断子程序的设计 定时中断是为满足定时或计数的需要而设置的。为此在单片机内部有两个定时/计数器,以对其中的计数结构进行计数的方法,来实现定时或计数功能。当结构发生计数溢出时,即表明定时时间或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志,作为单片机接受中断请求的标志。这种中断请求是在单片机芯片内部发生的,因此无须在芯片上设置引入端。

定时/计数器控制寄存器TCON是8位寄存器,地址为88H,可以位寻址。其高4位用于定时/计数器中断控制,低4位借给外部中断,用做中断标志和触发方式选择位。

TF0/TF1:定时器溢出中断申请标志位(由硬件自动置位)。

=0:定时器未溢出;

=1:定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断, 中

断被CPU响应后由硬件自动清零。

TR0/TR1:定时器运行启停控制位(可由用户通过软件设置 )。 =0:定时器停止运行; =1:定时器启动运行。

本设计采用定时中断,对自行车的里程和速度进行计数。中断程序流程图如图4.2所示。

4.4 数据处理子程序的设计

1. 里程表数子程序

外中断0服务程序用于对单片机12脚输入的圈脉冲进行计数,为十六进制计数器。60H为低位,62H为高位。每次计数一次后,对里程数据进行一次存储操作。当车轮每转一圈,通过霍尔元件将脉冲数输入单片机内,通过计数器计出脉冲数,再用乘法子程序算出里程数。里程处理子程序流程图如图4.3所示。

外中断1服务程序用于处理轮子转动一圈后的计时数据。当标志位(00H)为1时,说明计数溢出,放入最大时间值(为#0FFH);当标志位为0时,将计数单元(TL1、TH1、6CH、6DH)的值放入68H~6BH单元。通过定时器计出每转一圈所用的时间,用自行车车轮的周长除以时间就得出自行车的速度。速度流程图如图4.4(a)所示,除法子程序流程图如图4.4(b)所示。

-27-

开 始关 中 断现 场 保 护开 中 断中 断 处 理关 中 断 现 场 恢 复开 中 断中断返回 图 4.2 中断程序流程图

里程处理子程序关速度指示灯,开里程指示灯调圈数转换为公里数显示公里数返回 图4.3 里程处理子程序流程图

-28-

速度处理子程序关里程指示灯,开速度指示调每圈时间转换为速度N是否超速?关报警Y报警显示速度返回 图4.4(a) 速度处理子程序流程图

-29-

除法移位次数-计数器被除数左移一位Y被除数>除数?N1—商减去除数0—商计数器减1N计数器=0?Y返回 图 4.4(b) 除法子程序流程图

4.5 显示子程序的设计

数据处理完后,显示子程序开始工作,由于LED显示为段码的显示,所以处理后的十进制数要首先取段码,然后送显示单元。

本设计采用四位LED显示,先把要显示的数据送入P1口,然后将位选码送到P2口,延时1ms进行显示,显示程序流程图如图4.5所示。

-30-