单片机课程设计出租车候时计价系统.docx
- 文档编号:18224732
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:18
- 大小:186.56KB
单片机课程设计出租车候时计价系统.docx
《单片机课程设计出租车候时计价系统.docx》由会员分享,可在线阅读,更多相关《单片机课程设计出租车候时计价系统.docx(18页珍藏版)》请在冰点文库上搜索。
单片机课程设计出租车候时计价系统
xxxxxx大学
课程设计报告
课程设计名称:
单片机系统综合课程设计
课程设计题目:
出租车候时计价系统
院(系):
专业:
班级:
学号:
姓名:
指导教师:
完成日期:
目录
第1章总体设计方案………………………………………………………………1
1.1课程设计的内容和要求………………………………………………………..1
1.2课程设计原理…………………………………………………………………..1
1.3课程设计思路…………………………………………………………………..2
1.4实验环境………………………………………………………………………..2
第2章详细设计方案………………………………………………………………3
2.1实现方法………………………………………………………………………..3
2.2程序连线图……………………………………………………………………..3
2.2模块设计………………………………………………………………………..4
第3章调试及结果分析……………………………………………………………8
3.1调试步骤及方法………………………………………………………………..8
3.2实验结果及分析………………………………………………………………..8
参考文献………………………………………………………………………………9
附录1(源程序)……………………………………………………………………10
附录2(电路原理图)…………………..…………………………………………….15
附录3(器件清单)…………………………………………..……………………….16
第1章总体设计方案
1.1课程设计的内容和要求
(1)课程设计内容
根据出租车候时计价原理,利用南京伟福公司的LAB6000通用微控制器仿真控制系统,模拟一个出租车候时计价系统,具体内容如下:
a)制定收费标准,即每秒的钱数。
b)数码管上显示时间和应收的费用,时间以时分秒的形式显示,费用以元角显示(计价后的分位直接截断取整)。
c)初始记时为零,启动计时后,时间和费用相应地增加。
d)系统能够停止计时,将计时和费用清零。
(2)课程设计要求
a)独立完成课程设计任务;
b)通过老师现场验收;
c)交出完整的课程设计报告。
1.2课程设计原理
根据题目要求,制定合理的收费标准,通过数码管动态显示时间和费用信息
显示数码管为六个,表示时间的用四个数码管,用两个数码管显示费用。
用户通过两个外中断控制计费系统的开始与清零,用定时器中断控制计费系统的时间的准确增长,整个系统计时与清零状态的切换通过查询自定义的位变量的真假值而执行不同的程序段,从而控制计费系统的不同状态的切换;通过定义适当的时间延迟函数,实现对数码管刷新的控制避免数码管显示时出现闪烁和难分辨的情况。
1.3课程设计思路
(1)提出方案
首先乘客上车,在用户明确目的地时启动计时,按下开始计费按钮(对应外中断0,外中断零发送中断请求,启动计时)。
收费方案:
该计费系统设有出租车起步价,起步价为8元,两分钟之内收费金额为起步价8元;计时超过两分钟时,超出的部分按每一分钟两元计费,数码管显示费用时为30秒增加1元。
乘客到达目的地时用户按下停止计费按钮,此时计费系统停止计费。
(2)方案论证
从实际应用的角度,对于出租车计费系统,较为合理的设计应该设有起步价,并且根据城市的整体生活水平制定合理的收费标准,根据沈阳市的出租车收费情况,本计费系统制定起步价为8元,超过两分钟的时间每分钟按两元收费。
另外对于时间和费用的显示,用户在乘客上车时启动计时,当乘客到达目的地时,用户停止计时此时数码管应显示具体的时间与费用而不是在停止计费时就将数码管全部清零。
在下次计时开始时在对数码管清零较为合理。
1.4实验环境
·硬件环境:
PC机,LAB6000系统实验开发箱;
·软件环境:
WAVE软件仿真模拟环境。
第2章详细设计方案
2.1实现方法
将数码管模块的片选端接到CS0地址片选端口上,则对数码管的控制由两个端口确定,分别是8002H和8004H,8002H为数码管的片选端口,用其低六位控制六个数码管的选通,8004H端口为数据端口,控制数码管显示的段码,定时器1用来准确的定时,定时时间为一秒,数码管以秒为单位增加,计算出来的每个数码管的段码值依次送往8004H数据端口,通过循环控制六位数码管的循环扫描,并通过一定时间的延迟,完成时间和费用的显示。
2.2程序连线图
硬件电路由键盘显示接口芯片8031构成,如图2.4所示。
8051为本系统的主要处理芯片,本系统用到的芯片的资源有如下几部分:
数据存储器(8002H与8004H地址的数据分别用作数码管的位选和数据源)。
定时器1(用作准确的计时,定时间为一秒,用作计费系统的时钟)。
外中断0和外中断1(用作用户的两个按钮,外中断0对应的是开始计时按钮,外中断1对应的是停止计时按钮)。
Led显示模块为计费系统的显示模块,片选段选中CS0端口,六个八段数码管循环扫描显示时间与费用。
2.2模块设计
(1)数码管扫描模块
图2.1管扫描模块原理图
存储器的与锁存器74LS374和74LS245通过总线相连,其中74LS374用作锁存器,连接至存储器的8002H地址单元,用于六个数码管的片选;74LS245用作锁存与驱动作用,对应存储器的8004H地址单元,用作数码管阵列的数据端口。
8002H的低六位的某位对应为一表示改为所对应的数码管被选中,用于显示数据。
图2.2数码管扫描模块程序流程图
数码管显示部分的主要原理就是通过查询要显示数据所对应的段码值的下标,得到要显示数据的段码,并调用延迟函数,进行数码管的循环扫描显示,本实验开发箱的LED阵列的片选用的是8002H地址数据的低六位,所对应的段码值为01H、02H、04H、08H、10H、20H。
显示时首先将数码管显示的段值输入到8004H端口,然后再向8002H地址中赋值对应的位码。
(2)功能选择模块
功能选择模块共包括两部分:
开始计时部分和停止计时部分。
当用户按下开始计时按钮时,计费系统进入计时扫描状态,当乘客到达指定地点后用户按下停止计费按钮,程序进入时间的显示和费用的显示状态,当再次有乘客乘车时,用户再次按下开始计时按钮,系统数码管清零并重新开始计时与计费。
(3)主程序流程
主程序用于控制各功能部分的切换以及数码管刷新显示的控制,主程序的主线是LedNumVal变量,该变量是数码管显示的依据,以及数码管数据变化的中心线,还有主要的位变量Flag,外中断0和外中断1改变Flag的值,通过查询方式查询Flag的值,Flag的值对应不同的数码管刷新方式,当记事起开始计时事件被触发时,Flag为1,数码管清零并开始计时,当停止计时事件被触发时,Flag为零数码管停止计时,循环显示时间与费用;当计时系统刚启动flag为零,数码管循环显示零,程序流程图如下图所示:
Y
N
数码管清零
数码管计时
N
Y
Flag=0
开始计时
显示时间与费用
图2.3主程序流程图
第3章调试及结果分析
3.1调试步骤及方法
编译并连接程序后全速运行,可设置三种调试方式:
a)启动计时后两分钟之内停止计时,观察数码管显示的是否正确。
b)启动计时后两分钟后在停止计时,观察数码管的显示是非正确。
c)启动定时后再次启动计时,观察数码管的显示情况,观察数码管显示是否有异常。
3.2实验结果及分析
本程序满足课程设计要求,在程序运行时,编译并连接程序后全速运行,按下启动计时按钮,数码管开始显示时间与费用,观察一段时间后发现两分钟之内数码管的时间显示部分在不停的计时并显示而数码管的费用显示部分只显示8元不变,等到两分钟过后计时部分正常计时,计费部分每隔三十秒费用增加1元,当计时一段时间后按下停止计时按钮,数码管显示总共的时间和费用,停止计时。
当下次在此启动计时时,数码管清零,并从起步价8元开始计费。
当两次启动计时时程序显示正常,数码管显示无异常显示。
参考文献
[1]张毅刚,刘杰.MCS-51单片机原理与应用[M].哈尔滨:
哈尔滨工业出版社,2008
[2]高锋.单片微型计算机原理与接口技术[M].北京:
科学出版社,2007
[3]胡汉才,温冬婵.单片机原理及接口技术[M].北京:
清华大学出版社,2004
附录1(源程序)
#include
#include
voiddelay(unsignedinti);//函数声名
//此表为LED的字模,共阴数码管0-9-
UnsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码控制
//此表为8个数码管位选控制,共阴数码管1-8个-
unsignedcharcodedispbit[6]={0x20,0x10,0x08,0x04,0x02,0x01};//位选控制查表的方法控制
unsignedcharxdata*p=0x8004;
unsignedcharxdata*q=0x8002;
bitflag;
unsignedinti,LedNumVal=0;//变量定义
unsignedintLedOut[6];
intr;
/************主函数**********************/
intmain(void)
{
flag=0;
//定时器1初始化;使用定时器1
TMOD=0X10;
TH1=0X3C;
TL1=0XB0;
//中断初始化;开放定时器1中断和外中断0、1
EA=1;
ET1=1;
ET0=1;
EX0=1;
EX1=1;
IT1=1;
IT0=1;
r=0;
loop:
while(flag!
=1)
{
LedOut[0]=Disp_Tab[LedNumVal/60/10];
if(LedNumVal>=360||LedNumVal==0)
LedOut[1]=Disp_Tab[LedNumVal/60%10]|0x80;
else
LedOut[1]=Disp_Tab[(LedNumVal-240)/60%10]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%60/10];
LedOut[3]=Disp_Tab[LedNumVal%60%10];
LedOut[4]=Disp_Tab[1*LedNumVal/30/10];
LedOut[5]=Disp_Tab[1*LedNumVal/30%10]|0x80;
for(i=0;i<6;i++)
{
*p=LedOut[i];
*q=dispbit[i];//使用查表法进行位选
delay(75);//扫描间隔时间太长会数码管会有闪烁感
}
*q=0x00;
}
LedNumVal=240;
while(flag!
=0)
{
LedOut[0]=Disp_Tab[(LedNumVal-240)/60/10];
LedOut[1]=Disp_Tab[(LedNumVal-240)/60%10]|0x80;
LedOut[2]=Disp_Tab[(LedNumVal-240)%60/10];
LedOut[3]=Disp_Tab[(LedNumVal-240)%60%10];
if(LedNumVal<=360)
{
LedOut[4]=Disp_Tab[1*240/30/10];
LedOut[5]=Disp_Tab[1*240/30%10]|0x80;
}
else
{
LedOut[4]=Disp_Tab[(1*LedNumVal-120)/30/10];
LedOut[5]=Disp_Tab[(1*LedNumVal-120)/30%10]|0x80;
}
for(i=0;i<6;i++)
{
*p=LedOut[i];
*q=dispbit[i];//使用查表法进行位选
delay(75);//扫描间隔时间,太长会数码管会有闪烁感
}
*q=0x00;
}
gotoloop;
return0;
/***************************************************************************延时处理
****************************************************************************/
voiddelay(unsignedinti)
{
charj;
for(;i>0;i--)
for(j=200;j>0;j--);
}
/**************************************************************************
*定时器中断处理
****************************************************************************/
voidtimer1(void)interrupt3
{
ET1=0;
if(r<10){r++;
TH1=0X3C;
TL1=0XB0;
ET1=1;
}
else{
r=0;
LedNumVal++;
TH1=0X3C;
TL1=0XB0;
ET1=1;
}
}
/**************************************************************************
*外中断1中断处理
****************************************************************************/
voidint1(void)interrupt2
{
EX1=0;
flag=0x0;
EX1=1;
TR1=0;
}
/**************************************************************************
*外中断0中断处理
****************************************************************************/
voidint0(void)interrupt0
{
EX0=0;
flag=0x1;
LedNumVal=0;
TR1=1;
EX0=1;
}
附录2(电路原理图)
附录3(器件清单)
BillofMaterialfor计费系统.Bom
UsedPartTypeDesignatorFootprintDescription
11kR20805
16MHzY10805Crystal
330pfC1C2C30805Capacitor
174LS00U2DIP-14
174LS245U5DIP-20OctalBusTransceiver
174LS374U3DIP-20
1200R10805
18031BHU8DIP-40
6DPY_7-SEG_DPA2A3A4DIP-8Seven-SegmentDisplay,
A5A6A7
1HOLD16*2A8DIP-33
1MC1413-6U1
1MEMORY-16U4DIP-28
1NANDA1NANDGate
1ORA9ORGate
2SW-PBA15A16
1SWSPSTS1DIP-40
课程设计总结:
经过这次课程设计,我对51的C语言编程有了进一步的了解,并且巩固了对芯片8051功能的理解和应用,增加了我的动手能力和实践能力。
并且在与同学的交流过程中,开阔了自己的想法,通过使用更好的方法,程序变得更加高效。
本次课程设计是用8051和LAB6000实验开发箱。
在刚开始实验中遇到了很多问题,其中很多是因为自己的粗心大意导致程序的功能不能正确实现,还有一些是在编写程序时出现的错误。
刚接触试验箱时,我还不能真正理解试验箱所能实现的功能,以及实验箱的各功能部件的电路原理图,后来经过查找各种相关资料,在老师和同学的耐心帮助下,才能顺利完成课程设计的要求。
通过本次课程设计使我学到很多的知识,让我更加深刻的理解了8051的各种资源以及实验箱的各种资源,使我对硬件有了一些较为深刻的了解;同时还锻炼了自己的C语言开发能力。
同时也认识到自己在书本上所学发到的知识还远远不足,需要亲自动手实践来充实自己在书本上的所学,并且应用到具体的硬件实现上。
所以我会在以后的学习中更加虚心努力,增加自己的动手能力。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 出租车 时计 系统