ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:180.60KB ,
资源ID:7257336      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7257336.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(以智能速度里程表为主的多功能系统设计.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

以智能速度里程表为主的多功能系统设计.docx

1、以智能速度里程表为主的多功能系统设计单片机原理及应用课程设计报告课题:以智能速度里程表为主的多功能系统设计 班级 学号 学生姓名 指导教师 淮阴工学院电子与电气工程学院一、课程设计目的单片机原理及应用课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。在课程设计过程中,在教师指导下,运用工程的方法,通过一个简单课题的设计练习,可使学生通过综合的系统设计,熟悉应用系统的设计过程、设计要求、完成的工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。通过课程设计,应能加强学生如下能力的培养:(1) 独立工作能力和创造力;(

2、2) 综合运用专业及基础知识,解决实际工程技术问题的能力;(3) 查阅图书资料、产品手册和各种工具书的能力;(4) 工程绘图的能力;(5) 编写技术报告和编制技术资料的能力。二、设计要求 1、总体要求(1) 独立完成设计任务(2) 绘制系统硬件总框图(3) 绘制系统原理电路图(4) 制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释;(5) 制定编写调试方案,编写用户操作使用说明书(6) 写出设计工作小结。对在完成以上文件过程所进行的有关步骤如设计思想、指标论证、方案确定、参数计算、元器件选择、原理分析等作出说明,并对所完成的设计作出评价,对自己整个设计工作中经验教训,总结收获和今后

3、研修方向。2、具体要求本次工程实践主要以单片机为基础,进行单片机软件编程,目的是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生只需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路还需要进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的硬件电子电路的分析、判断能力。 软件编程是本次工程实践的重要环节。在为期两周的工程实践中,将占据主要时间,学生要完成的软件编程任务主要包括以下几点: 1)、熟悉Keil

4、C51编程平台及Proteus 仿真; 2)、编写、调试蜂鸣器、继电器动作、方波程序并进行软硬件联调; 3)、编写、调试LED流水灯(循环显示)程序并进行软硬件联调; 4)、编写、调试键盘扫描子程序并进行软硬件联调; 5)、编写、调试数码管动态扫描程序并进行软硬件联调 。 3、具体课题:本题属于多功能任务设计,基于本实验室所提供的电路模板,具体题目为:以智能速度里程表为主的多功能任务设计;课题名字的多功能任务的含义是:要求所设计的电路和程序必须实现4个功能,电路提供四个按键,要求同学们能编写、调试对应的键盘扫描子程序,从而实现,当按下A按键,实现蜂鸣器或继电器动作,当按下B按键,实现LED流水

5、灯(循环显示),当按下C按键,实现数码管动态扫描显示(显示内容可以自己确定),前3个功能,对于每个课题都是相同,只有最后一个按键不同,其功能取决于所选课题名称,即当按下D按键,要求实现相应课题的最主要的功能,例如,对于“以智能温度计为主的多功能任务设计”的课题,当按下该课题所对应的D按键,就要实现显示温度的功能,其余类似。三、设计步骤3.1硬件初步设计图1 硬件总框图3.1.1按键控制扫描模块:按键用于控制数码显示、LED显示、扬声器等模块的工作。通过扫描按键是否按下,来设定上述各模块的工作情况,使各模块可以在按键的控制下,有序地进行工作。3.1.2扬声器模块: 本设计是通过P3.7口控制扬声

6、器发出连续,断续的声音。当按键1按下时,则由P3.7口输出方波信号,使扬声器发出声音。3.1.3LED显示模块: 根据流水灯的形式,建立流水灯显示程序。本设计中通过P2口控制流水灯的显示,8个LED共阳极,故P2口低电平有效。3.1.4数码显示模块:根据实际确定字形码表,建立显示子程序。本设计中采用四位共阳极数码管,通过单片机AT89C52的P1口控制其位选,以达到动态显示的效果,再通过P0口控制其段选以显示相应的数值。数码管有共阳和共阴之分,可用静态显示,也可用动态显示。静态显示,原理简单,容易编程,但电路复杂占用的资源较多。动态显示电路,控制较难,但电路简单,在资源紧张时是首选。这里用的是

7、动态显示。数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起。字型共阳极段码字型共阳极段码0C0H592H1F9H682H2A4H7F8H3B0H880H499H990H表1数码管动态显示接口地址3.2 硬件原理电路图图2 硬件原理电路图本设计中所用的单片机型号为AT89C52 ,其主要特性为:1)有CHMOS工艺的节能运行方式2)兼容MCS51指令系统 3)3个16位可编程定时/计数器中断4)2个串行中断5)2个外部中断源6)2个读写中断口线7)低功耗空闲和掉电模式8)8k可反复擦写(1000次)F

8、lash ROM9)256x8 bit内部RAM10)时钟频率0-24MHz11)可编程UART串行通道12)共6个中断源,3级加密位13)软件设置睡眠和唤醒功能3.3单元电路设计3.3.1按键电路图3 按键电路由于本系统中按键数量较少,且单片机的I/O口相对富余,使用独立式键盘。同样,由于单片机高电平输出能力比低电平输出能力弱,使用如图所示的按键电路。读按键前,先将端口设置为高电平。此时,单片机内部由一个MOS管作为上拉电阻,在按键没被按下时,单片机端口人保持高电平;当按键被按下后,单片机I/O口被强行接地,变为低电平。按键电路中由于单片机内部MOS管有微弱的上拉作用,所以外部硬件可以不接上

9、拉电阻。3.3.2流水灯电路流水灯由单片机的P1口控制。考虑到单片机I/O口高电平驱动能力弱而低电平驱动能力强的特点以及系统功耗大小,采用如图所示的电路。现由P1口低电平驱动发光二极管发光。单片机P1口图4 流水灯显示电路图中D1-D8为发光二极管,R13-R20为限流电阻。发光二极管在电流范围内都能正常发光。则限流电阻,一般发光二极管取,假设单片机低电平输出能力足够强,即,则。按实际器材条件,选择限流电阻为。3.3.3蜂鸣器电路SPEAK(P3.7)信号控制器件开通关断,使得蜂鸣器发声或不发声。图5 蜂鸣器电路3.3.4数码显示电路显示电路是系统人机接口的重要组成部分。该系统中采用动态显示的

10、方法来驱动四位数码管显示。数码管为共阳型,所以字形段码为阴码。显示驱动电路如图所示。Rf=330图6 数码管显示电路按照单片机输出端口与数码显示管的连接关系,对应着显示内容的形状,计算字形编码如下表所示。显示字形A(Px.7)F(Px.6)B(Px.5)G(Px.4)C(Px.3)Dp(Px.2)D(Px.1)E(Px.0)阴码0LLLHLHLL0x141HHLHLHHH0xD72LHLLHHLL0x4C3LHLLLHLH0x454HLLLLHHH0x875LLHLLHLH0x256LLHLLHLL0x247LHLHLHHH0x578LLLLLHLL0x049LLLLLHLH0x05LLLLH

11、HHH0x0FELLHLHHLL0x2CrHHHLHHHL0xEENullHHHHHHHH0xFF备注L为低电平,对应显示段亮;H为高电平,对应显示段灭。表2 显示字形对应驱动阴码计算表只要在段码输入端输入对应的阴码,再从DR1-DR4的位码信号中给出要显示内容的数码管的选择信号,便可在对应的数码管中按对应段码显示内容。R13-R20为限流电阻。三极管饱和开通时,集电极发射极之间电压,数码管的压降,数码管的工作电流。则限流电阻可这样计算获得:。现取。四、软件初步设计4.1 主程序流程图 图7 主程序流程图4.2 各模块流程图 图8 扬声器程序流程图图9 彩灯循环显示流程图图10 数码管动态显示

12、流程图图11 速度里程表程序流程图4.3各模块软件设计4.3.1扬声器电路的设计本次设计中,设计扬声器产生简单的“嘟嘟”声。只需在P3.7口输出方波即可。当KEY1按下后,单片机则会发出10个方波信号,频率约为1960HZ。信号结束后,调用0.5秒延时,如此就会使扬声器发出“嘟嘟”声。4.3.2彩灯循环显示的设计 设计中,由单片机的P2.0P2.7控制8个发光管。当KEY2按下后,每隔0.5秒就将对应发光管的P2.X口清零,使发光管一次点亮,如此往复。4.3.3数码管动态显示的设计 设计中,由P1.0P1.3口控制数码管的片选,由P0口控制数码管的段选。当KEY3按下后,分别让4个数码管显示“

13、1”,“2”,“3”,“4”,即当P1.0P1.3分别为高电平时,将“F9H”、“A4H”、“B0H”、“99H”分别赋给P0口,显示的时间间隔是2毫秒。对于人来说,已经无法分辨数码是否是轮流点亮的。4.3.4智能速度里程表的设计我在本次设计中,我假设车轮周长为一米,在P3.2口加一个方波信号,模拟车轮滚动。当产生一个下降沿(即视为车轮滚动一圈),就产生一次外部中断。其中30H34H记录的是里程,分别对应米,十米,百米,千米,万米。当产生一次外部中断,里程数就加一。而40H43H记录的是单位时间内所走过的里程,即速度。当产生一次外部中断,里程数加一。当产生一秒的时间中断,就把40H43H的内容

14、赋给20H23H锁存。显示电路中,首先判断速度里程切换按钮是否按下,没按下则由数码管显示31H34H的内容,即里程数。若按下,则显示20H23H的内容,即速度。五、硬件系统参数选择在本次设计中,各端口设置如下:P0:数码管段选位P1:低四位为数码管片选位 高四位为开关控制位P2:流水灯控制位P3:P3.2为外部中断0入口位 P3.3为速度里程切换显示开关位 P3.7为扬声器控制位六、软件设计在主程序中用到了五条汇编语言指令:CLR、ACALL、SETB、LJMP、END。CLR: 是将其后面指定的位清为0,程序中使对应端口输出低电平CALL:是子程序调用指令,程序中调用了DELAY延时子程序S

15、ETB:是将其后面指定的位置成1,程序中使对应端口输出高电平JMP:是跳转指令,意思是:跳转到指定的标号处继续运行END: 是程序结束的伪指令,意思是告诉编译器,程序到此结束。伪指令只告诉编译器此程序到此有何要求或条件,它不参与和影响程序的执行。详细完整的程序清单及注释ORG 0000H ;程序执行开始地址LJMP MAIN ;跳转到标号MAIN执行ORG 0003H ;外部中断0入口地址LJMP EXINT0 ;跳转到标号EXINT0执行ORG 001BH ;定时器T1中断程序入口 LJMP INTT1 ;跳转到标号INTT1执行ORG 0100H ;主程序起始地址MAIN:MOV SP,#

16、10H ;定义起始堆栈指针SETB IT0 ;设置外部中断0为边沿触发 SETB EA ;允许总中断SETB ET1 ;允许定时器中断MOV TMOD,#10H ;设置T1工作方式为模式1MOV TL1,#0B0H ;设置定时时间0.05s MOV TH1,#3CHMOV R0,#14H ;设置循环初值AJMP START ;跳转到STARTSTART: LCALL KEY ;调用按键子程序 AJMP START ;跳转到START; -KEY: MOV P1,#0F0H ; 单片机按键口置位 MOV A,P1 MOV B,A ACALL DELAY2 MOV A,P1 CJNE A,B,K4

17、 ;判断是否有键按下,没有则转移 CJNE A,#0E0H,K1 ;判断KEYA键是否按下,没有则转移 AJMP KEYA ;KEYA键按下,执行扬声器子程序K1: CJNE A,#0D0H,K2 ;判断KEYB键是否按下,没有则转移 AJMP KEYB ;KEYB键按下,执行流水灯子程序K2: CJNE A,#0B0H,K3 ;判断KEYC键是否按下,没有则转移 AJMP KEYC ;KEYC键按下,执行数码管动态显示子程序K3: CJNE A,#070H,K4 ;判断KEYD键是否按下,没有则转移 AJMP KEYD ;KEYD键按下,执行速度里程表子程序K4: RET;*扬声器*KEYA

18、:MOV R7,0AH LP:MOV R6,#0FFH ;设置循环初值SETB P3.7 ;P3.7置数DJNZ R6,$ ;循环次数减一MOV R6,#0FFH ;设置循环初值CLR P3.7 ;P3.7清零DJNZ R6,$ ;循环次数减一DJNZ R7,LP ;减一后判断循环次数LCALL DELAY1 ;调用延时RET;*流水灯*KEYB:MOV P2,#11111110B ;设置对应彩灯亮LCALL DELAY1 ;调用延时MOV P2,#11111101BLCALL DELAY1MOV P2,#11111011BLCALL DELAY1MOV P2,#11110111BLCALL

19、DELAY1MOV P2,#11101111BLCALL DELAY1MOV P2,#11011111BLCALL DELAY1MOV P2,#10111111BLCALL DELAY1MOV P2,#01111111BLCALL DELAY1SETB P2.7 ;熄灭最后一个彩灯RET ;*数码管动态显示*KEYC: CLR P1.0 MOV P0,#99H ;设置显示值SETB P1.3 ;设置片选ACALL DELAY2 ;调用延时MOV P0,#0FFH ;数码管输出复位CLR P1.3MOV P0,#0B0HSETB P1.2ACALL DELAY2MOV P0,#0FFHCLR P

20、1.2MOV P0,#0A4HSETB P1.1ACALL DELAY2MOV P0,#0FFHCLR P1.1MOV P0,#0F9HSETB P1.0ACALL DELAY2RET;*速度里程表* ;初始化KEYD: SETB EX0 ;开启外部中断SETB TR1 ;开启定时器中断MOV DPTR,#TABLE ;设置查表;显示程序DISPALY: MOV A,P3 ;判断速度里程切换按键是否按下ANL A,#08HJNZ S2 ;没有按下,跳转S2显示里程;按下,则显示速度 MOV P0,#0FFH ;数码管段初始化 CLR P1.0 ;上一次数码管片选清零 MOV A,20H ;存放

21、米的单元地址赋A MOVC A,A+DPTR ;读取对应数码管的值 MOV P0,A ;设置数码管段选 SETB P1.3 ;设置数码管片选 ACALL DELAY2 ;调用延时 MOV P0,#0FFH ;数码管段初始化 CLR P1.3 ;上一次数码管片选清零 MOV A,21H ;存放十米的单元地址赋A MOVC A,A+DPTR ;读取对应数码管的值 MOV P0,A ;设置数码管段选 SETB P1.2 ;设置数码管片选 ACALL DELAY2 ;调用延时 MOV P0,#0FFH ;数码管段初始化 CLR P1.2 ;上一次数码管片选清零 MOV A,22H ;存放百米的单元地址

22、赋A MOVC A,A+DPTR ;读取对应数码管的值 MOV P0,A ;设置数码管段选 SETB P1.1 ;设置数码管片选 ACALL DELAY2 ;调用延时 MOV P0,#0FFH ;数码管段初始化 CLR P1.1 ;上一次数码管片选清零 MOV A,23H ;存放千米的单元地址赋A MOVC A,A+DPTR ;读取对应数码管的值 MOV P0,A ;设置数码管段选 SETB P1.0 ;设置数码管片选 ACALL DELAY2 ;调用延时 RET;里程显示S2: MOV P0,#0FFH ;数码管段初始化 CLR P1.0 ;上一次数码管片选清零 MOV A,31H ;存放十

23、米的单元地址赋A MOVC A,A+DPTR ;读取对应数码管的值 MOV P0,A ;设置数码管段选 SETB P1.3 ;设置数码管片选 ACALL DELAY2 ;调用延时 MOV P0,#0FFH ;数码管段初始化 CLR P1.3 ;上一次数码管片选清零 MOV A,32H ;存放百米的单元地址赋A MOVC A,A+DPTR ;读取对应数码管的值 MOV P0,A ;设置数码管段选 SETB P1.2 ;设置数码管片选 ACALL DELAY2 ;调用延时 MOV P0,#0FFH ;数码管段初始化 CLR P1.2 ;上一次数码管片选清零 MOV A,33H ;存放千米的单元地址

24、赋A MOVC A,A+DPTR ;读取对应数码管的值 CLR ACC.7 ;在千米位加上小数点 MOV P0,A ;设置数码管段选 SETB P1.1 ;设置数码管片选 ACALL DELAY2 ;调用延时 MOV P0,#0FFH ;数码管段初始化 CLR P1.1 ;上一次数码管片选清零 MOV A,34H ;存放万米的单元地址赋A MOVC A,A+DPTR ;读取对应数码管的值 MOV P0,A ;设置数码管段选 SETB P1.0 ;设置数码管片选 ACALL DELA2 ;调用延时 RET ;*延时程序*DELAY1: MOV R5,#25 ;延时0.5s DL1: MOV R4

25、,#100 DL2: MOV R3,#100 DJNZ R3,$ DJNZ R4,DL2 DJNZ R5,DL1 RETDELAY2: MOV R4,#10 ;延时2ms DL3: MOV R3,#100 DJNZ R3,$ DJNZ R4,DL3 RET;总里程与单位里程计算EXINT0:PUSH PSW PUSH ACC;总路程 INC 30H ;米数加一 MOV A,30H ;判断是否溢出 CJNE A,#0AH,LOOP1 ;未溢出则跳转 MOV 30H,#00H ;溢出则清零 INC 31H ;十米加一 MOV A,31H ;判断是否溢出 CJNE A,#0AH,LOOP1 ;未溢出

26、则跳转 MOV 31H,#00H ;溢出则清零 INC 32H ;百米加一 MOV A,32H ;判断是否溢出 CJNE A,#0AH,LOOP1 ;未溢出则跳转 MOV 32H,#00H ;溢出则清零 INC 33H ;千米加一 MOV A,33H ;判断是否溢出 CJNE A,#0AH,LOOP1 ;未溢出则跳转 MOV 33H,#00H ;溢出则清零 INC 34H ;万米米加一;单位时间内所走的路程LOOP1: INC 40H ;米数加一 MOV A,40H ;判断是否溢出 CJNE A,#0AH,LOOP2 ;未溢出则跳转 MOV 40H,#00H ;溢出则清零 INC 41H ;十

27、米加一 MOV A,41H ;判断是否溢出 CJNE A,#0AH,LOOP2 ;未溢出则跳转 MOV 41H,#00H ;溢出则清零 INC 42H ;百米加一 MOV A,42H ;判断是否溢出 CJNE A,#0AH,LOOP2 ;未溢出则跳转 MOV 42H,#00H ;溢出则清零 INC 43H ;千米加一LOOP2: POP ACC POP PSW RETITABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;速度计算INTT1: MOV TL1,#0B0H ;重设定时时间0.05s MOV TH1,#3CH DJNZ R0,KK1 ;计数时间是否到1S,没到跳转 MOV 20H,40H ;将单位时间内所走的里程赋予速度单元 MOV 21H,41H MOV 22H,42H MOV 23H,43H MOV 40H,#0H ;上一时刻单位时间内所走里程清零 MOV 41H,#0H MOV 42H,#0H MOV 43H,#0H MOV R0,#14H

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2