基于单片机的出租车计费器设计课程设计论文.docx
- 文档编号:27359598
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:33
- 大小:201.70KB
基于单片机的出租车计费器设计课程设计论文.docx
《基于单片机的出租车计费器设计课程设计论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的出租车计费器设计课程设计论文.docx(33页珍藏版)》请在冰豆网上搜索。
基于单片机的出租车计费器设计课程设计论文
课程设计(论文)
题目名称基于单片机的出租车计费器设计
课程名称单片机原理及应用
摘要....................................................2
1方案论证..............................................2
1.1方案一...........................................2
1.2方案二...........................................3
1.3方案比较.........................................3
1.4系统的主要功能及算法公式.........................3
2出租车计费器系统设计..................................4
2.1硬件设计.........................................4
2.1.1整体硬件电路图.................................4
2.1.274LS27和74LS02芯片简介.........................5
2.2软件设计.........................................5
2.2.1模块介绍......................................5
2.2.2程序流程图.....................................6
3单片机89C51的简介....................................7
3.1主芯片89C51的硬件资源...........................7
3.289C51中断系统....................................8
3.3单片机定时器/计数器的使用.........................9
4电路仿真结果..........................................10
5课程设计总结..........................................12
参考文献................................................12
致谢....................................................13
附录...................................................14
摘要
单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
本课设主要了解应用单片机的定时器/计数器,以及中断。
这是一个比较小的系统,故采用汇编语言来编辑。
汇编语言是一种编译型程序设计语言,它具有编译速度快,占用系统空间小,具有一定的助记可读性等特点。
本系统假设速度恒定60Km/h(1Km/min),单价一定1.2元/Km,起步价6.0元,超过三公里开始计费,每公里加1.2元。
关键词:
出租车计费器;AT89C51;定时器/计数器
1、方案论证
1.1方案一
采用数字电路控制。
其原理方框图如图1-1所示。
采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价,但是考虑到这种电路过于简单,性能不够稳定,而且不能调节单价,也不能根据天气调节计费标准,电路不够实用。
图1-1采用数字电路控制方法
1.2方案二
采用单片机控制。
利用单片机丰富的I/O端口,及控制灵活性,实现基本的里程计价功能和几个调节、时间显示功能。
利用预先嵌入的程序来控制单片机工作,从而得到想要的预先结果。
其原理如图1-2所示。
图1-2采用单片机控制方法
1.3方案比较
通过以上两种方案框图,我们可以看到用单片机来实现,有较大的活动空间,不但能实现所要求的功能,而且能在很大的程度上扩展功能,还能对系统进行升级,故我们采用后一种方案。
1.4系统的主要功能及算法公式:
系统的主要功能:
对出租车所用的时间进行计时,以及所需的费用用数码管显示出来。
本系统假设速度恒定60Km/h(1Km/min),单价一定1.2元/Km,起步价6.0元,超过三公里开始计费,每公里加1.2元。
由于速度恒定,所以计算的核心是时间。
时间单元由单片机的定时器/计数器来计算,延时1ms时间的初值由程序来设定。
算法公式是:
费用=起步价+(路程-3)*1.2
路程=速度*时间(速度恒定,60Km/h,也就是1Km/min)
若路程小于等于3,则收起步价6元,否则按费用公式算。
2、出租车计价器系统设计
2.1硬件设计
2.1.1整体硬件电路图
图2-1整体硬件电路图
由上图我们可以清楚地看到,本电路控制核心是AT89C51芯片。
该方案我们采用动态显示的方法。
P0口作为数据总线口,分别把数据输送到4个74LS273地址锁存器中,而锁存器的工作需要等待脉冲的到来。
脉冲通过写地址有些端口p3.6和端口p2.0-p2.3经过或非门来产生。
只有当把数据送到外部接口时,p3.6口才为低电平,p2.0-p2.3用来控制到底是把数据送往哪一个锁存器。
2.1.274LS273和74LS02简介(AT89C51见单片机概述)
图2-274LS273管脚图图2-374LS02管脚图
74LS273引脚功能:
74LS273是8位数据/地址锁存器。
74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
74LS02引脚功能:
74LS02是四二输入或非门。
该芯片有四个或非门公选择,如1A或1B后,经过非门再输出,只有当输入的两个变量同时为0时,输出才为1。
具有缓冲倒相功能。
2.2软件设计
2.2.1模块介绍
该计费器系统的软件设计分为一下几个模块:
(1)主程序模块
在主程序模块中,需要完成对个接口芯片的初始化、出租车起步价和单价、中断向量的设计以及开中断、循环等待等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
流程图如2-4所示。
当按下轻触开关时,开始对系统初始化,价格和时间都显示0、0,再次按下开关,时间单元开始计时,并计算时间是否超过3分钟,超过3分钟,则从第4分钟开始计费。
价格单元从起步价6.0元开始计费,每多一分钟,价格单元多加1.2元。
(2)显示子程序模块
由于显示由显示时间子程序DIS1和显示价格子程序DIS组成。
时间由小时、分、秒三个单元组成,共六个数码管。
价格由元和角两个单元组成,最大可显示999.9元。
2.2.2程序流程图
图2-4程序流程
3、单片机89C51的简介
3.1主芯片89C51的硬件资源
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
图3-189C51引脚图
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口输出地址的高八位。
当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(定时器/计数器0外部输入)
P3.5T1(定时器/计数器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:
来自反向振荡器的输出。
3.289C51中断系统
所谓中断,是指当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊情求,CPU暂停执行现行程序,转去对随机发生地更紧迫事件进行处理;处理完毕后,CPU自动返回原来的程序继续执行。
中断允许软件设计不需要关心系统其他部分定时要求,算术程序不需要考虑隔几个指令检查I/O设备是否需要服务。
相反,算术程序编写时好像有无限的时间作算术运算而无其他工作在进行。
若其它事件需要服务时,则通过中断告诉系统。
89C51单片机有5个中断源,有两个中断优先级,每个中断源的优先级可以编程控制。
中断允许受到CPU开中断和中断源开中断的两级控制。
3.3单片机定时器/计数器的使用
89C51系列单片机至少有两个16位内部定时器/计数器。
8952有三个定时器/计数器,其中连个基本定时器/计数器是定时器/计数器0和定时器/计数器1。
他们既可以编程为定时器使用,也可以编程为计数器使用。
若是计数内部晶振驱动时钟,则它是定时器;若是计数89C51的输入引脚的脉冲信号,则它是计数器。
89C51的T/C时加一计数的。
定时器实际上也是工作在技术方式下的,只不过对固定频率的脉冲计数;由于脉冲周期固定,由计数值可以计算出时间,有定时功能。
当T/C工作在定时器时,对振荡源12分频的脉冲计数,即每个机器周期计数值加一,频率加=fosc/12。
晶振为6MHz,计数频率=500KHz,每2uS计数加一。
当T/C工作在计数器时,计数脉冲来自外部脉冲输入引脚T0或T1。
当T0或T1脚上负跳变需2个机器周期,即24个振荡周期。
所以T0或T1脚输入的计数外部脉冲的最高频率为fosc/12。
当晶振为12MHz时,最高技术频率为500KHz,高于此频率将计数出错。
4、电路仿真结果
图4-1整体硬件电路仿真结果图1
图4-2整体硬件电路仿真结果图2
图4-3整体硬件电路仿真结果图3
由上图我们可以清楚地看到,该方案我们采用动态显示的方法。
动态显示的优点是,它占用CPU的时间少,每次只把一个数据送到外部接口,虽然我们仿真看到的是全部数码管都亮着,那是因为动态显示的时间比较快,超过我们人眼的辨别能力。
若我们在仿真的时候暂停一下,就可以清楚地看到,时间单元和价格单元分别只显示一位。
静态显示,是每一个数码管不论在什么时候都点亮,占用CPU的时间很多。
按键主要控制系统的初始化、开始工作、数据锁存三项工作。
刚开始上电,则所有的数码管同时显示全0状态,当第一次按下开关,价格从起步价006.0元开始计费,等待是否超过三公里(即3分钟)计算,超过三公里每公里加1.2元(即超过3分钟每分钟加1.2元)。
若路程小于等于3Km(即时间小于等于3分钟),则收起步价6元。
5、课程设计总结
本课设是我第一次比较系统完成的一次设计。
在本次设计中我从选题,搜集资料,电路设计到硬件电路的调试以及程序的调试,软件的仿真,比较系统的接触整个过程的各个环节,从中受益匪浅。
学会了几种软件,如KEIL、PROTEUS、TKStudio等。
本课设基本上实现了设计任务所要求的功能,但由于时间的紧迫,有许多本可以做的地方,该课设没有做到。
例如:
对于里程及速度的计算,需要用到霍尔传感器;单价也没有变化,应该分为白天和晚上来计算不同的单价;也没有等候时间收费问题,应该加一个等候时间收费设置;按键也只是用一个来控制所有的功能,不够灵活。
尽管如此,这次设计是对大学所学知识的一次综合运用,通过本课设我进一步加深了对51系列单片机、74LS系列产品的了解和应用,增强了我对电路分析能力以及理论结合实践能力,大大的提高了我的自学能力,这为我以后的学习打下了良好的基础.
参考文献
[1]周立功夏宇闻单片机与CPLD综合应用技术[M]北京北京航空航天大学出版
[2]丁元杰单片微机原理及应用[M]北京机械工业出版社
[3]靳达编单片机应用系统开发实例导航[M]北京人民邮电出版社
[4]李光飞单片机课程设计实例指导[M]北京 北京航空航天大学出版社
[5]胡宴如高频电子线路[M]北京高等教育出版社
[6]白驹珩雷晓平单片计算机及其应用[M]成都电子科技大学出版社
[7]李广弟单片机基础[M]北京北京航空航天大学出版社
[8]沈美明温冬婵IBM汇编语言程序设计[M]北京清华大学出版社
[9]彭传正林春景凌阳单片机原理与实践[M]北京北京航空航天大学出版社
[10]李荣正陈学军PIC单片机实践教程[M]北京航空航天大学出版社
[11]阎石数字电子技术基础北京高等教育出版社
致谢
本次单片机课程设计主要是对单片机知识的一次综合运用,也是由理论结合实践的第一步,经过这次课程设计,我对单片机系统有了更加清楚地认识,知道了所学知识的重要性,对设计的过程与步骤以及应注意的细节都有了更为深刻的理解和领会。
我进一步加深了对51系列单片机、74LS系列产品的了解和应用,增强了我对电路分析能力以及理论结合实践能力,大大的提高了我的自学能力,这次课程实践使我们本身知识得到提高,为我以后的学习奠定了良好的基础,同时也增强了我们对未来学习与工作的信心。
这次单片机原理与应用的课程设计我要非常感谢我的指导老师,在这次短短的课程实践里,我们得到了老师很多的关心和帮助。
她给了我们很多的信息,与我们一起探讨问题,询问我们遇到了哪些问题并耐心给予指导。
当我们遇到技术上难以解决的问题时,她就会指导我们解决问题,她把自己多年来积累的经验教授给我们,我们才得以顺利地完成了课程实践任务。
附录
出租车计价器系统设计源程序
ORG0000H;初始化段地址
LJMPMAIN;长跳转到主函数MAIN处
ORG000BH;TT0开始地址
LJMPTT0;长跳转到TT0处
ORG0030H;主函数开始地址,避开00—30敏感段
MAIN:
MOVSP,#40H;设堆栈底指针,下一个数据将放在41H单元
MOV70H,#60;价格单元的起步价
MOV71H,#00;价格单元的十位和百位
MOV72H,#00;秒单元清零
MOV73H,#00;分单元清零
MOV74H,#00;时单元清零
MOV75H,#00;75H单元清零备用
CLR00H
CLR01H;将00H,01H单元清零
MOV6BH,#0AH;将0AH(既十进制10)放入6B单元
MOVR1,#76H;把76H放到R1中
KKK:
MOV@R1,#00H;将76H单元的内容清零
INCR1
DJNZ6BH,KKK;76H—7FH单元全部清零,备用
LCALLDIS;调用价格显示子程序
LCALLDIS1;调用时间显示子程序
MOVTMOD,#11H;定时器/计数器工作方式设置
MOVTH0,#3CH
MOVTL0,#0B0H;这句和上一句设置延时50ms
MOV6EH,#20;将6EH单元设置20,达到1s的延时
G2:
LCALLDIS;长调用价格显示子程序
LCALLDIS1;长调用时间显示子程序
JBP1.0,G2;开关没按下,等待按下,显示初始状态,全部为零
LCALLTIME1;调用TIME1延时子程序
JBP1.0,G2;开关没按下,跳到G2,否则转到下一步
G1:
LCALLDIS
LCALLDIS1
JNBP1.0,G1;开关按下,继续显示价格和时间,并转到中断
SETBEA;开中断
SETBET0;定时器0中断允许,向CPU申请中断
SETBTR0;定时器0工作允许
SETB01H;01H单元置位
LLL:
LCALLCHAI;调用现场保护子程序
LCALLDIS
LCALLJISUAN;调用计算子程序
LCALLDIS1
JBP1.0,G3;开关没按下,则返回
LCALLTIME1
JBP1.0,G3
CPL01H;01H单元此时为零
JNB01H,G5;01H单元内容为0,跳到G5
SETBET0;定时器0中断允许,向CPU申请中断
G6:
LCALLDIS
LCALLDIS1
JNBP1.0,G6;开关按下,显示所走的时间及费用
LJMPMAIN;重新等待下一个工作状态
G5:
CLRET0
G4:
LCALLDIS
LCALLDIS1
JNBP1.0,G4
G3:
LJMPLLL
TT0:
CLRET0/*定时一秒*/
CLRTR0
MOVTH0,#3CH
MOVTL0,#0B0H
SETBTR0
SETBET0
DJNZ6EH,JJJ
LCALLADD1
MOV6EH,#20
JJJ:
RETI
DIS:
MOV6DH,#06H/*价格显示子程序*/
MOVR0,#7AH
MOV6CH,#0FEH
HHH:
MOVDPTR,#0FDFFH//数据指针出口地址,低8位给P0口,高8给
//位P2口
MOVA,6CH
MOVX@DPTR,A
MOVA,@R0
MOVDPTR,#TAB;查表首地址
MOVCA,@A+DPTR;查表值送A
MOVDPTR,#0FEFFH
MOVX@DPTR,A
LCALLTIME1
MOVA,6CH
RLA
MOV6CH,A
INCR0
DJNZ6DH,HHH
RET
DIS1:
MOV6DH,#04H/*时间显示子程序*/
MOVR0,#72H
MOV6CH,#0FEH
HHH1:
MOVDPTR,#0F7FFH;FF给P0口,F7给P1.0—P1.3口
MOVA,6CH
MOVX@DPTR,A;将6CH的内容放到0F7FFH中
MOVA,@R0
MOVDPTR,#TAB;查表首地址
MOVCA,@A+DPTR;查表值送A
MOVDPTR,#0FBFFH
MOVR1,6DH
CJNER1,#03H,K1
ORLA,#80H
K1:
MOVX@DPTR,A
LCALLTIME1
MOVA,6CH
RLA
MOV6CH,A
INCR0
DJNZ6DH,HHH1
RET
TIME1:
MOV6AH,#0AH/*延时子程序*/
FFF:
MOV69H,#0AH
GGG:
DJNZ69H,GGG
DJNZ6AH,FFF
RET
JISUAN:
JB00H,K2/*判断是否超过3公里及计算价格子程序*/
MOVA,78H
CLRC
SUBBA,#03H
MOV73H,#06H
JCK3
SETB00H
LJMPK3
K2:
MOVR3,71H
MOVR4,70H
MOVR2,#00H
MOVR5,#00H
MOVR6,#03H
MOVR7,#0E8H
LCALLNDIV42
MOV75H,R4
MOVA,R6
MOVR3,A
MOVA,R7
MOVR4,A
MOVR2,#00H
MOVR7,#100
LCALLNDIV31
MOV74H,R4
MOVA,R7
MOVB,#10
DIVAB
MOV73H,A
MOV72H,B
K3:
RET
CHAI:
MOV6FH,#03H/*保护现场子程序*/
MOVR0,#77H
MOVR1,#7AH
ZZZ:
MOVA,@R0
ANLA,#0FH;保存77H单元中的低4位
MOV@R1,A
MOVA,@R0
SWAPA
ANLA,#0FH
INCR1
MOV@R1,A
INCR0
INCR1
DJNZ6FH,ZZZ;循环三次
RET
ADD1:
MOVA,77H/*加一子程序*/
CJNEA,#59H,L18
LJMPL19
L18:
ADDA,#01H
DAA
MOV77H,A
LJMPL24
L19:
MOV77H,#00H
JNB00H,S1
CLRC
MOVA,70H
ADDA,#12
MOV70H,A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 出租车 计费 设计 课程设计 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)