里程计数器课程设计
湖南文理学院
课程设计报告
课程名称: 里程计数器课程设计
专业班级: 建筑电气与智能化12101班 学生姓名: 曾计生 指导教师: 李建英 完成时间: 2015年 6 月 18 日 报告成绩:
湖南文理学院制
目录
一、设计任务及要求.................................................................................................... 3 二、设计的作用与目的................................................................................................ 3 三、设备及软件............................................................................................................ 3 四、系统设计方案........................................................................................................ 4
1. 系统设计方案..................................................................................................... 4 2. 系统工作原理..................................................................................................... 4 五、 系统硬件设计...................................................................................................... 5
1. 单片机最小系统及说明..................................................................................... 5 2. 里程信号的采集................................................................................................. 7 3. 显示单元电路设计............................................................................................. 8 六 系统软件设计........................................................................................................ 10
1. 系统主程序设计............................................................................................... 10 2. 中断服务程序................................................................................................... 11 3. 显示子程序....................................................................................................... 11 七、系统仿真调试与分析.......................................................................................... 13 八、设计中的问题及解决方法.................................................................................. 15 九、设计心得.............................................................................................................. 16 十、参考文献.............................................................................................................. 17 附录:.......................................................................................................................... 18
附录A :电路图 . ................................................................................................. 18 附录B :源程序 . ................................................................................................. 19
里程计数器
一、设计任务及要求
汽车里程计数器由三个部分组成:
一、车辆跑动信号的采集:当车辆跑动时,转轴带动一小磁体转动,车轮和该小磁体的转动比是一定的,这里可以利用磁感应传感器来接收小磁体的信号,小磁体转动一周与磁感应传感器正对一次,传感器输出口就会产生一个大约20ms 的低脉冲,使用单片机来检测传感器信号。本次设计中采用按键来模拟传感器信号,检测按键按下的次数就可采集车辆的跑动信号。
二、对车辆行驶的里程进行计数并利用I2C 协议将数据及时保存到E2PROM 中,设计中使用单片机内部的基本RAM 单元来存储计数值。
三、显示车辆行驶的距离,假设按键按下10次为1公里,利用6位数码管显示里程数。
二、设计的作用与目的
1. 进一步熟悉和掌握单片机的结构及工作原理。
2. 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。
3. 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。 4. 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应工作打下基础。 5. 学习程设计的相关内容,为以后的毕业设计打下基础
三、设备及软件
PC 机 keil uVison4软件 proteus软件
1. 系统设计方案
采用AT89C51芯片,用霍尔元件[2]将车轮的转速转换成电脉冲,经过处理后送入单片机。里程及速度的测量,是经过AT89C51的定时/计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出,计算结果通过LED 显示器显示出来。
图1单片机控制方案
2. 系统工作原理
各单元的工作原理如下:
1. 利用霍尔传感器产生里程数的脉冲信号。
霍尔传感器是最具代表的磁传感器,当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并输入到单片机引脚12即P3.2外部中断0端,传感器每获取一个脉冲信号即对系统提供一次计数中断 2. 对脉冲信号进行计数。
实现:利用单片机自带的计数器T0对霍尔传感器脉冲信号进行计数。 3. 对数据进行处理,要求用LED 显示里程总数和即时速度。 实现:利用软件编程,对数据进行处理得到需要的数值。 最终实现目标:采用单片机作控制,显示电路可显示里程
1. 单片机最小系统[1]及说明
图2单片机最小系统
单片机最小系统是单片机应用的最基电路,由芯片AT89C51、电源、时钟电路和复位电路组成。AT89C51是一种带4K 字节FLASH 存储器的低电压、高性能CMOS 8位微处理器。其应用广泛,生活中很多地方都有它的应用,像电子钟、出租车计价器、交通灯等。其管脚说明如下: VCC :供电电压。 GND :接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程
和校验时,P1口作为低八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH 编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL )这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: P3口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST :复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时,
ALE 只有在执行MOVX ,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH ),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET ;当/EA端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP )。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
2. 里程信号的采集
里程计算是通过安装在车轮上的霍尔传感器A44E 检测到的信号,送到单片机,经处理计算, 送给显示单元的。其原理如图3所示。
图3 传感器测距示意图
霍尔传感器是对磁敏感的传感元件,常用于信号采集的有A44E ,该传感器
是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,工作电压范围宽,使用非常方便。A44E 的外形如图4所示。
1-VCC 2-GND 3-OUT
图4 A44E外形图
3. 显示单元电路设计
由于设计要求有里程数据显示输出,所以采用6位8段LED 数码管的分屏显示。显示电路由8路同相三态双向总线收发器74LS245和6位8段LED 数码管组成。74LS245用于连接51单片机和LED 数码管,51单片机的P0.0~P0.7先接LED 驱动74LS245再接数码管的A~G和dp ,当位P0.0为1时,对应A 段点亮,以次类推。而51单片机的P2.0~P2.5直接与数码管相连,其6个输出口分别接到6个数码管,这样就可以进行控制
6个数码管的显示。如图5所示
图5 显示电路
图6 8子形LED 数码管
常用的LED 数码管有的共阴和共阳两种,本次用于显示的是8位8段共阴LED 显示管
六 系统软件设计
1. 系统主程序设计
在主程序模块中,需要完成对各接口芯片的初始化、里程计数的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程数据寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动和计程等不同的操作。主程序流程图如图7所示。当检测到传感器输入信号时,就启动计数,当计数到满后,向单片机申请中断,并把圈数存扫里程寄存器中,单片机将根据里程寄存器中的内容计算行驶里程公里数,再存到相应的寄存器。数据存到寄存器中后送显示电路显示出来。
图7 主程序流程图
2. 中断服务程序
当检测到里程信号输入时,计数器就开始计数,当记到10时,相当于1公里,计数器就申请中断,进行中断服务程序,送数据到相应的数据寄存单元,并进行计算。
其程序流程如图8所示。
图 8 中断服务程序
3. 显示子程序
里程数据送到相应的寄存器后,就会进行显示。本次课程设计采用动态扫描显示。数码管显示里程数程序流程图如图9。
图9 显示子程序
七、系统仿真调试与分析
根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于条件的限制。整体电路采用protues 软件进行仿真,先点击开始仿真键,一开始显示为0,随着脉冲的输入,显示的数会增大,由于车轮的周长存在RAM 中,单片机复位后显示为0。单片机如果仿真结果不是这样,应停止仿真进行电路检查,由于本电路图比较简单,出错可能性小,我们可从连线上找,也可分析它的电平是否正确,改正后在进行仿真直到结果跟设计的相符合。
调试工具: proteus 仿真软件 Keil 程序仿真软件
1. 进行程序编译,修改直到无误
[3]
2. 开始进行仿真时,显示里程数为
0.
3. 当里程信号的输入10次,即1公里,显示1公里
4. 随着信号的输入,显示的里程变数大
八、设计中的问题及解决方法
本次课程设计设计是基于单片机,主要用到很多单片机的知识,由于涉及知识多,单片机课上半学期已结束,很多东西已忘记,于是把单片机教材浏览了一遍,把忘了的知识重新记起来。
在电路的选择上开始设计时遇到很多问题,单片机有很多新型号,比如AT89C52,AT89S52等,由于电路简单,选择AT89C51就可。在显示电路上,串行比并行需要的单片机口少得多,本次设计电路简单,选用并行比较简单。 课程设计用到两个软件,Keil uVision 和proteus ,但这两个软件是比较专用的软件,不易安装好,通过在网上查找和同学的帮助,最终把他们装好。
proteus 软件是第一次用,因此很多东西都不知道,一开始画电路图连元器件都找不到,通过《单片机原理及课程设计》一书的介绍和从网上找到的元器件关键字对照表及自己慢慢的摸索,最后把电路图画好。
Proteus 仿真时,为了源程序的正确性,先把程序放在Keil uVision 中检验,修改,在生成hex 文件仿真
仿真时一开始得不到预料的结果,通过检查修改源程序和电路图最终仿真出了预想的结果
九、设计心得
本次课程设计时间两周,在这两周里,我学到了很多东西。
课程设计用到的知识主要是单片机方面的,在课程设计的过程中,我对单片机知识理解加深了,以前不懂的很多东西,通过向同学老师请教,也慢慢的搞懂了。在过两周就是期末考试了,对于单片机的复习可以说是一举两得。 课程设计用到两个软件:Keil uVision和proteus ,Keil uVision在以前的的单片机实验中就有用到,这次再用,感觉还好,对其的基本功能与操作更熟悉了,proteus 是第一次用,一开始感到很难,慢慢熟悉后用起来也就比较顺手。现在想起来觉得其实就是一些简单的东西,但是了解了proteus 的基本操作,还是感到学到了东西。
课程设计虽然只有两周,但我觉得它的意义是重大的,它让我们学到了知识,学会应用知识之间的联系、整合知识。课程设计还可为以后的毕业设计打基础,如果能顺利的搞好课程设计,就能为我们搞好毕业加码。
十、参考文献
[1]曾屹. 单片机原理与应用 .长沙:中南大学出版社,2009
[2]张一斌 余建坤 单片机原理及课程设计 长沙:中南大学出版社,2009 [3]江世明 传感技术与应用 第二版 长沙:中南大学出版社,2009 [3] 王晓君等. MCS-51及兼容单片机原理与选型 北京:电子工业出版社 [4] 张淑清等.
单片微型计算机接口技术及其应用 北京:国防工业出版社
附录:
附录A :电路图
附录B :源程序
VSDA EQU P1.5
VSCL EQU P1.4 SLA EQU 50H NUMBYT EQU 51H MTD EQU 30H MRD EQU 40H SLAW EQU 0A0H SLAR EQU 0A1H DPHH EQU 62H TH1H EQU 6CH TH1HH EQU 6DH
ORG 0000H LJMP START ORG 0003H LJMP INTEX0 ORG 000BH RETI
ORG 0013H LJMP INTEX1 ORG 001BH LJMP INTT1 ORG 0023H RETI
ORG 002BH RETI
CLEARMEN: MOV TMOD,#90H MOV SP,#75H SETB PX0 SETB IT0 SETB IT1 CLR A MOV 20H,A MOV 6CH,A MOV 6DH,A
MOV 70H,A MOV 71H,A MOV 72H,A MOV 73H,A MOV 60H,A MOV 61H,A MOV 62H,A MOV 63H,A
DEC A
MOV 68H,A MOV 69H,A MOV 6AH,A MOV 6BH,A
MOV P1,A
CLEAR1: JB P1.2,KEY1 MOV 21H,#0FH
LJMP CLEAR2
KEY1: JB P1.3,KEY2 MOV 21H,#12H
LJMP CLEAR2
KEY2: JB P1.6,KEY3
MOV 21H,#14H
LJMP CLEAR2
KEY3: JB P1.7,ERR
MOV 21H,#19H
CLEAR2: SETB TR1
SETB EA
SETB EX0 SETB ET1 SETB P3.1 LCALL VIICREAD RET
ERR: CPL P3.1
LCALL DL5S
START: LCALL CLEARMEN
START1: JB P3.0,DISPLAYS
LCALL DISPLAYV
START2: SJMP START1
INTEX0: PUSH ACC
PUSH PSW
INC 60H CLR A CJNE A,60H,INTEX0OUT INC 61H CJNE A,61H,INTEX0OUT INC 62H LJMP CLEAR1
INTEX0OUT:LCALL VIICWRITE
SETB EX1
POP PSW
POP ACC
RETI
INTEX1: PUSH ACC
PUSH PSW
CLR EX1
JNB 00H,INTEX11
MOV TL1,#0FFH
MOV TH1,#0FFH
MOV 6CH,#0FFH
MOV 6DH,#0FFH
INTEX11: MOV 68H,TL1
MOV 69H,TH1
MOV 6AH,6CH
MOV 6BH,6DH
CLR A
MOV TL1,A
MOV TH1,A
MOV 6CH,A
MOV 6DH,A
CLR 00H
POP PSW
POP ACC
RETI
INTT1: PUSH ACC
PUSH PSW
INC 6CH
MOV A,6CH
JNZ INTT11
INC 6DH
MOV A,6DH
JNZ INTT11
SETB 00H
INTT11: POP PSW
POP ACC
RETI
DISPLAYS:SETB P1.0
CLR P1.1
SETB P3.7
LCALL SSS
LCALL DISPLAY
LJMP START1
DISPLAYV:CLR P1.0
SETB P1.1
CLR P3.7
LCALL VVV
MOV A,71H
SUBB A,#04H
JNC WARING
SETB P3.1
V1: LCALL DISPLAY
RET
WARING: CLR P3.1
AJMP V1
VIICWRITE:ACALL WMOV9
MOV SLA,#SLAW
MOV NUMBYT,#09H
LCALL WRNBYT
RET
WMOV9: MOV 5FH,#50H
MOV R0,#MTD
MOV R1,#5FH
MOV R2,#09H
WMOV: MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,WMOV
RET
DISPLAY: MOV R1,#70H
MOV R2,#0FEH
PLAY: MOV A,R2
MOV P2,A
MOV A,@R1
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1MS
INC R1
MOV A,R2
JNB ACC.3,ENDOUT
RL A
MOV R2,A
AJMP PLAY
ENDOUT: SETB P2.0
SETB P2.1
SETB P2.2 SETB P2.3 RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
SSS: MOV 19H,#64H
MOV 18H,#00H
DB 00H MOV 17H,#00H MOV 16H,#00H MOV 11H,#00H MOV 12H,#00H MOV 13H,62H MOV 14H,61H MOV 15H,60H LCALL DIVST LCALL BCDST MOV A,25H ANL A,#0FH MOV 70H,A MOV A,25H SWAP A ANL A,#0FH MOV 71H,A MOV A,24H ANL A,#0FH
MOV A,24H
SWAP A
ANL A,#0FH
MOV 73H,A
RET
VVV: MOV 18H,68H
MOV 17H,69H
MOV 16H,6AH
MOV 11H,#00H
MOV 12H,#00H
MOV 13H,#36H
MOV 14H,#0EEH
MOV 15H,#80H
LCALL DIVST
MOV 14H,#00H
LCALL BCDST
MOV A,25H
ANL A,#0FH
MOV 70H,A
MOV A,25H
SWAP A
ANL A,#0FH
MOV 71H,A
MOV 72H,#00H
MOV 73H,#00H
RET
DL1MS: MOV R6,#14H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
DL5S: MOV R5,#0FFH
DL3: LCALL DL1MS
DJNZ R5,DL3
RET
DIVST: CLR C
MOV A,13H
SUBB A,18H
MOV A,12H
SUBB A,17H
MOV A,11H
SUBB A,16H
JNC LOOP4
MOV B,#10H
NDIV1: CLR C
MOV A,15H
RLC A
MOV 15H,A
MOV A,14H
RLC A
MOV 14H,A
MOV A,13H
RLC A
MOV 13H,A
MOV A,12H
RLC A
MOV 12H,A
MOV A,11H
RLC A
MOV 11H,A
MOV F0,C
CLR C
MOV A,13H
SUBB A,18H
MOV 1AH,A
MOV A,12H
SUBB A,17H
MOV 19H,A
MOV A,11H
SUBB A,16H
JB F0,NDIV2
JC NDIV3
NDIV2: MOV 11H,A
MOV A,19H
MOV 12H,A
MOV A,1AH
MOV 13H,A
INC 15H
NDIV3: DJNZ B,NDIV1
CLR F0
DIVEND: RET
LOOP4: SETB F0
SJMP DIVEND
BCDST: MOV R7,#10H
CLR C
MOV 25H,#00H MOV 24H,#00H
KKK: MOV A,15H
RLC A
MOV 15H,A
MOV A,14H
RLC A
MOV 14H,A
MOV A,25H
ADDC A,25H
DA A
MOV 25H,A
MOV A,24H
ADDC A,24H
DA A
MOV 24H,A
DJNZ R7,KKK
RET
END