以智能速度里程表为主的多功能系统设计文档格式.docx
- 文档编号:8356915
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:23
- 大小:180.60KB
以智能速度里程表为主的多功能系统设计文档格式.docx
《以智能速度里程表为主的多功能系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《以智能速度里程表为主的多功能系统设计文档格式.docx(23页珍藏版)》请在冰点文库上搜索。
当按键1按下时,则由P3.7口输出方波信号,使扬声器发出声音。
3.1.3LED显示模块:
根据流水灯的形式,建立流水灯显示程序。
本设计中通过P2口控制流水灯的显示,8个LED共阳极,故P2口低电平有效。
3.1.4数码显示模块:
根据实际确定字形码表,建立显示子程序。
本设计中采用四位共阳极数码管,通过单片机AT89C52的P1口控制其位选,以达到动态显示的效果,再通过P0口控制其段选以显示相应的数值。
数码管有共阳和共阴之分,可用静态显示,也可用动态显示。
静态显示,原理简单,容易编程,但电路复杂占用的资源较多。
动态显示电路,控制较难,但电路简单,在资源紧张时是首选。
这里用的是动态显示。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"
a,b,c,d,e,f,g,dp"
的同名端连在一起。
字型
共阳极段码
C0H
5
92H
1
F9H
6
82H
2
A4H
7
F8H
3
B0H
8
80H
4
99H
9
90H
表1数码管动态显示接口地址
3.2硬件原理电路图
图2硬件原理电路图
本设计中所用的单片机型号为AT89C52,其主要特性为:
1)有CHMOS工艺的节能运行方式
2)兼容MCS51指令系统
3)3个16位可编程定时/计数器中断
4)2个串行中断
5)2个外部中断源
6)2个读写中断口线
7)低功耗空闲和掉电模式
8)8k可反复擦写(>
1000次)FlashROM
9)256x8bit内部RAM
10)时钟频率0-24MHz
11)可编程UART串行通道
12)共6个中断源,3级加密位
13)软件设置睡眠和唤醒功能
3.3单元电路设计
3.3.1按键电路
图3按键电路
由于本系统中按键数量较少,且单片机的I/O口相对富余,使用独立式键盘。
同样,由于单片机高电平输出能力比低电平输出能力弱,使用如图所示的按键电路。
读按键前,先将端口设置为高电平。
此时,单片机内部由一个MOS管作为上拉电阻,在按键没被按下时,单片机端口人保持高电平;
当按键被按下后,单片机I/O口被强行接地,变为低电平。
按键电路中由于单片机内部MOS管有微弱的上拉作用,所以外部硬件可以不接上拉电阻。
3.3.2流水灯电路
流水灯由单片机的P1口控制。
考虑到单片机I/O口高电平驱动能力弱而低电平驱动能力强的特点以及系统功耗大小,采用如图所示的电路。
现由P1口低电平驱动发光二极管发光。
单片机P1口
图4流水灯显示电路
图中D1-D8为发光二极管,R13-R20为限流电阻。
发光二极管在电流范围
内都能正常发光。
则限流电阻
,一般发光二极管
取
,假设单片机低电平输出能力足够强,即
,则
。
按实际器材条件,选择限流电阻为
3.3.3蜂鸣器电路
SPEAK(P3.7)信号控制器件开通关断,使得蜂鸣器发声或不发声。
图5蜂鸣器电路
3.3.4数码显示电路
显示电路是系统人机接口的重要组成部分。
该系统中采用动态显示的方法来驱动四位数码管显示。
数码管为共阳型,所以字形段码为阴码。
显示驱动电路如图所示。
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)
阴码
L
H
0x14
0xD7
0x4C
0x45
0x87
0x25
0x24
0x57
0x04
0x05
°
0x0F
0x2C
r
0xEE
Null
0xFF
备注
L为低电平,对应显示段亮;
H为高电平,对应显示段灭。
表2显示字形对应驱动阴码计算表
只要在段码输入端输入对应的阴码,再从DR1-DR4的位码信号中给出要显示内容的数码管的选择信号,便可在对应的数码管中按对应段码显示内容。
R13-R20为限流电阻。
三极管饱和开通时,集电极-发射极之间电压
,数码管的压降
,数码管的工作电流
则限流电阻可这样计算获得:
现取
四、软件初步设计
4.1主程序流程图
图7主程序流程图
4.2各模块流程图
图8扬声器程序流程图
图9彩灯循环显示流程图
图10数码管动态显示流程图
图11速度里程表程序流程图
4.3各模块软件设计
4.3.1扬声器电路的设计
本次设计中,设计扬声器产生简单的“嘟嘟”声。
只需在P3.7口输出方波即可。
当KEY1按下后,单片机则会发出10个方波信号,频率约为1960HZ。
信号结束后,调用0.5秒延时,如此就会使扬声器发出“嘟嘟”声。
4.3.2彩灯循环显示的设计
设计中,由单片机的P2.0~P2.7控制8个发光管。
当KEY2按下后,每隔0.5秒就将对应发光管的P2.X口清零,使发光管一次点亮,如此往复。
4.3.3数码管动态显示的设计
设计中,由P1.0~P1.3口控制数码管的片选,由P0口控制数码管的段选。
当KEY3按下后,分别让4个数码管显示“1”,“2”,“3”,“4”,即当P1.0~P1.3分别为高电平时,将“F9H”、“A4H”、“B0H”、“99H”分别赋给P0口,显示的时间间隔是2毫秒。
对于人来说,已经无法分辨数码是否是轮流点亮的。
4.3.4智能速度里程表的设计
我在本次设计中,我假设车轮周长为一米,在P3.2口加一个方波信号,模拟车轮滚动。
当产生一个下降沿(即视为车轮滚动一圈),就产生一次外部中断。
其中30H~34H记录的是里程,分别对应米,十米,百米,千米,万米。
当产生一次外部中断,里程数就加一。
而40H~43H记录的是单位时间内所走过的里程,即速度。
当产生一次外部中断,里程数加一。
当产生一秒的时间中断,就把40H~43H的内容赋给20H~23H锁存。
显示电路中,首先判断速度里程切换按钮是否按下,没按下则由数码管显示31H~34H的内容,即里程数。
若按下,则显示20H~23H的内容,即速度。
五、硬件系统参数选择
在本次设计中,各端口设置如下:
P0:
数码管段选位
P1:
低四位为数码管片选位
高四位为开关控制位
P2:
流水灯控制位
P3:
P3.2为外部中断0入口位
P3.3为速度里程切换显示开关位
P3.7为扬声器控制位
六、软件设计
在主程序中用到了五条汇编语言指令:
CLR、ACALL、SETB、LJMP、END。
CLR:
是将其后面指定的位清为0,程序中使对应端口输出低电平
CALL:
是子程序调用指令,程序中调用了DELAY延时子程序
SETB:
是将其后面指定的位置成1,程序中使对应端口输出高电平
JMP:
是跳转指令,意思是:
跳转到指定的标号处继续运行
END:
是程序结束的伪指令,意思是告诉编译器,程序到此结束。
伪指令只告诉编译器此程序到此有何要求或条件,它不参与和影响程序的执行。
详细完整的程序清单及注释
ORG0000H;
程序执行开始地址
LJMPMAIN;
跳转到标号MAIN执行
ORG0003H;
外部中断0入口地址
LJMPEXINT0;
跳转到标号EXINT0执行
ORG001BH;
定时器T1中断程序入口
LJMPINTT1;
跳转到标号INTT1执行
ORG0100H;
主程序起始地址
MAIN:
MOVSP,#10H;
定义起始堆栈指针
SETBIT0;
设置外部中断0为边沿触发
SETBEA;
允许总中断
SETBET1;
允许定时器中断
MOVTMOD,#10H;
设置T1工作方式为模式1
MOVTL1,#0B0H;
设置定时时间0.05s
MOVTH1,#3CH
MOVR0,#14H;
设置循环初值
AJMPSTART;
跳转到START
START:
LCALLKEY;
调用按键子程序
AJMPSTART;
;
-----------------------------------------------------------------------------
KEY:
MOVP1,#0F0H;
单片机按键口置位
MOVA,P1
MOVB,A
ACALLDELAY2
CJNEA,B,K4;
判断是否有键按下,没有则转移
CJNEA,#0E0H,K1;
判断KEYA键是否按下,没有则转移
AJMPKEYA;
KEYA键按下,执行扬声器子程序
K1:
CJNEA,#0D0H,K2;
判断KEYB键是否按下,没有则转移
AJMPKEYB;
KEYB键按下,执行流水灯子程序
K2:
CJNEA,#0B0H,K3;
判断KEYC键是否按下,没有则转移
AJMPKEYC;
KEYC键按下,执行数码管动态显示子程序
K3:
CJNEA,#070H,K4;
判断KEYD键是否按下,没有则转移
AJMPKEYD;
KEYD键按下,执行速度里程表子程序
K4:
RET
*******扬声器*******
KEYA:
MOVR7,0AH
LP:
MOVR6,#0FFH;
SETBP3.7;
P3.7置数
DJNZR6,$;
循环次数减一
MOVR6,#0FFH;
CLRP3.7;
P3.7清零
DJNZR6,$;
DJNZR7,LP;
减一后判断循环次数
LCALLDELAY1;
调用延时
RET
*******流水灯*******
KEYB:
MOVP2,#11111110B;
设置对应彩灯亮
MOVP2,#11111101B
LCALLDELAY1
MOVP2,#11111011B
MOVP2,#11110111B
MOVP2,#11101111B
MOVP2,#11011111B
MOVP2,#10111111B
MOVP2,#01111111B
SETBP2.7;
熄灭最后一个彩灯
RET
*******数码管动态显示*******
KEYC:
CLRP1.0
MOVP0,#99H;
设置显示值
SETBP1.3;
设置片选
ACALLDELAY2;
MOVP0,#0FFH;
数码管输出复位
CLRP1.3
MOVP0,#0B0H
SETBP1.2
ACALLDELAY2
MOVP0,#0FFH
CLRP1.2
MOVP0,#0A4H
SETBP1.1
CLRP1.1
MOVP0,#0F9H
SETBP1.0
*******速度里程表*******
初始化
KEYD:
SETBEX0;
开启外部中断
SETBTR1;
开启定时器中断
MOVDPTR,#TABLE;
设置查表
显示程序
DISPALY:
MOVA,P3;
判断速度里程切换按键是否按下
ANLA,#08H
JNZS2;
没有按下,跳转S2显示里程
按下,则显示速度
MOVP0,#0FFH;
数码管段初始化
CLRP1.0;
上一次数码管片选清零
MOVA,20H;
存放米的单元地址赋A
MOVCA,@A+DPTR;
读取对应数码管的值
MOVP0,A;
设置数码管段选
SETBP1.3;
设置数码管片选
ACALLDELAY2;
数码管段初始化
CLRP1.3;
MOVA,21H;
存放十米的单元地址赋A
SETBP1.2;
CLRP1.2;
MOVA,22H;
存放百米的单元地址赋A
SETBP1.1;
CLRP1.1;
MOVA,23H;
存放千米的单元地址赋A
SETBP1.0;
里程显示
S2:
MOVA,31H;
SETBP1.3;
MOVA,32H;
MOVA,33H;
CLRACC.7;
在千米位加上小数点
MOVA,34H;
存放万米的单元地址赋A
ACALLDELA2;
RET
*******延时程序*******
DELAY1:
MOVR5,#25;
延时0.5s
DL1:
MOVR4,#100
DL2:
MOVR3,#100
DJNZR3,$
DJNZR4,DL2
DJNZR5,DL1
DELAY2:
MOVR4,#10;
延时2ms
DL3:
MOVR3,#100
DJNZR3,$
DJNZR4,DL3
总里程与单位里程计算
EXINT0:
PUSHPSW
PUSHACC
总路程
INC30H;
米数加一
MOVA,30H;
判断是否溢出
CJNEA,#0AH,LOOP1;
未溢出则跳转
MOV30H,#00H;
溢出则清零
INC31H;
十米加一
MOVA,31H;
MOV31H,#00H;
INC32H;
百米加一
MOVA,32H;
MOV32H,#00H;
INC33H;
千米加一
MOVA,33H;
MOV33H,#00H;
INC34H;
万米米加一
单位时间内所走的路程
LOOP1:
INC40H;
MOVA,40H;
CJNEA,#0AH,LOOP2;
MOV40H,#00H;
INC41H;
MOVA,41H;
MOV41H,#00H;
INC42H;
MOVA,42H;
MOV42H,#00H;
INC43H;
LOOP2:
POPACC
POPPSW
RETI
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
速度计算
INTT1:
MOVTL1,#0B0H;
重设定时时间0.05s
MOVTH1,#3CH
DJNZR0,KK1;
计数时间是否到1S,没到跳转
MOV20H,40H;
将单位时间内所走的里程赋予速度单元
MOV21H,41H
MOV22H,42H
MOV23H,43H
MOV40H,#0H;
上一时刻单位时间内所走里程清零
MOV41H,#0H
MOV42H,#0H
MOV43H,#0H
MOVR0,#14H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 速度 里程表 为主 多功能 系统 设计