第一篇:单片机出租车计价器源程序
出租车计价器设计与制作
设计并制作一台出租车计价器。调试时采用10Hz方波信号模拟,每个方波代表10m。基本要求:
(1)不同情况具有不同的收费标准
白天 1元/公里 晚上 2元/ 公里 途中等待(30s)1元/30s
(2)数据输出(6位LED数码管显示)
单价输出2位 路途输出2位 总金额输出2位
(3)按键(3个)
启动计价开关 数据复位(清零)白天/晚上转换
3.4.1模块1:系统设计
(1)分析任务要求,写出系统整体设计思路
通过分析,需要实现四个主要的功能模块,分别为脉冲计数模块、定时器计时模块、按键的处理以及
数码管动态扫描等功能。
定时器计时模块主要完成途中等待(即没有脉冲来时)30秒的计时。在启动键按下后,定时器就不停的计时,只要有脉冲来就将计时的值清除为零。如果没有脉冲来,当计时超过30秒时,相应的总金额要
按照收费标准计价。
中断的管理:尽管中断有嵌套以及优先级的功能,但是由于定时器已经使用一个了中断资源,脉冲检测不宜再采用中断方式,而是采用查询方式。由于需要不停的要清除30秒的计时,因此,脉冲的计数不
采用定时器的计数方式。
启动键触发定时器开始工作,而定时器的运行可以作为脉冲计数的标志,只要定时器计时在运行,每来一个中断都应该计数。
主程序完成键盘的扫描和按键的处理,查询脉冲产生的中断,并完成脉冲的计数。每个脉冲代表10米,则当计数到100时表示1千米的距离,相应的总金额要按照收费标准计价
(2)选择单片机型号和所需外围器件型号,设计单片机硬件电路原理图
采用MCS51系列单片机At89S51作为主控制器,外围电路器件包括数码管驱动、独立式键盘、复位电
路等。硬件电路原理图如图3-9所示。
图3-11 出租车计价器的硬件电路原理图
数码管驱动采用2个四联共阴极数码管显示,由于单片机驱动能力有限,采用74HC244作为数码管的驱动。在74HC244的7段码输出线上串联100欧姆电阻起限流作用。
独立式按键使用上提拉电路连接,在没有键按下时,输出高电平。P0口用于输出7段LED共阴极显示代码,P2口用于输出低电平有效的位选码。0~9的7段LED共阴极显示代码:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。
(3)分析软件任务要求,写出程序设计思路,分配单片机内部资源,画出程序流程图
软件的任务要求包括定时器的设置、按键的扫描、按键的功能处理、脉冲的计数、路途等待超30秒的计
时以及总金额的计算等。
程序设计的思路:使用中断方式对定时器的溢出进行计数实现30秒的计时。主程序采用查询外部中断标志实现脉冲的计数,由于每个脉冲代表10m,因此,当脉冲计数超过100时,计价器按照收费标准计价。主程序在初始化变量和定时器参数设置之后,进入一个循环结构,循环扫描键盘、查询脉冲的中断、数码管的动态扫描等功能,当脉冲的中断标志被查询到,若路途等待时间未超30秒时,要及时将路途等待时间的值清除为零。主程序的流程图如图3-12所示。
图3-12 出租车计价器的主程序流程图
中断服务程序主要实现计时功能,当启动键按下之后,定时器开始工作,用一个变量对定时器溢出中断的次数进行计数,达到计时功能,该变量在每次脉冲到来时被清零(在主程序中清零),当脉冲长时间没有来,则当该变量计数超过30秒时,总金额按照途中等待计费标准进行计价。中断程序的流程图如图
3-13所示。
图3-13 出租车计价器的中断服务程序流程图
(4)设计系统软件调试方案、硬件调试方案及软硬件联合调试方案
软件调试方案:伟福软件中,在“文件新建文件”中,新建C语言源程序文件,编写相应的程序。在“文件新建项目”的菜单中,新建项目并将C语言源程序文件包括在项目文件中。
在 “项目编译”菜单中将C源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以 “*.hex”和“*.bin” 后缀的目标文件。
硬件调试方案:在设计平台中,将单片机的P1.0-P1.2分别与3个独立式键盘通过插线连接起来,将P3.2与脉冲信号源连接起来。
在伟福中将程序文件编译成目标文件后,将下载线安装在实验平台上,运行“MCU下载程序”,选择相应的flash 数据文件,点击“编程”按钮,将程序文件下载到单片机的Flash中。
然后,上电重新启动单片机,检查所编写的程序是否达到题目的要求,是否全面完整地完成试题的内容。3.4.2 程序设计
/*晶振:11.0592M T1-250微秒溢出中断一次;P3.2(int0)-中断100次,查询IE0置位,P1^0为启动键;P1^1为清除键;P1^2为白天/晚上的切换键 变量的定义: key_val: 返回按键的值 255-无键
T1_cnt: 定时器溢出数计数
cnt_30: 30秒钟的计时
cnt_distance: 计算路程
cnt_cost: 总金额
state_val: 状态:0-白天 1 夜晚
cost_val[3]: 收费标准:白天单价cost_val[0]=1元/公里;晚上单价cost_val[1]=2元/公里; 等待单价cost_val[2]=1元/30s
led_seg_code:数码管7段码 */ //-------------------#include “reg51.h” unsigned char data cnt_30,cnt_distance,cnt_cost;unsigned int data T1_cnt,D_cnt;unsigned char data key_val,key_val_old;unsigned char data state_val;char code cost_val[3]={1,2,1};char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//led_seg_code[0-9]代表0-9 //-------延时-----------------void delay(unsigned int i)//延时 { while(--i);} //-------初始化变量------------------void init_variant()//初始化一些变量的内容 {unsigned char i;cnt_30=0;//30秒的计时 D_cnt=0;//脉冲的个数 cnt_distance=0;//距离的计数
cnt_cost=0;//保存总价格 } //-------扫描键盘-----------------unsigned char scan_key(){ unsigned char i,k;i=P1;if(i==0xff){ k=255;} //无键按下
else //有键按下
{ delay(10);//延时去抖动
if(i!=P1){k=255;} else { switch(i){ case 0xfe: k=0;break;//P1.0按下,启动键
case 0xfd: k=1;break;//P1.1按下,清除键
case 0xfb: k=2;break;//P1.2按下,切换键
} } } return k;} //-------数码管动态扫描-------------void led_show(){unsigned char i,k;
//-----显示单价----k=cost_val[state_val];i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xbf;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0x7f;delay(10);//-----显示距离------k=cnt_distance;i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xf7;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xef;delay(10);//-----显示总价格-----------k=cnt_cost;i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xfe;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xfd;delay(10);} //-------计时----------------void timer1()interrupt 3 //T1中断 { T1_cnt++;if(T1_cnt>3999)//如果计数>3999, 计时1s { T1_cnt=0;if(cnt_30<30)//没有超过30秒,继续计时
{cnt_30++;} else //超过30秒,途中等待计价
{cnt_30=0;cnt_cost=cnt_cost+cost_val[2];} } } //---------主程序----------------
main(){//初始化各变量 T1_cnt=0;state_val=0;key_val_old=255;init_variant();//初始化51的寄存器
TMOD=0x20;//用T1计时 8位自动装载定时模式,不用T0 TH1=0x19;//250微秒溢出一次;250=(256-x)*12/11.0592-> x= 230.4 TL1=0x19;EA=1;//开中断 ET1=1;
TR1=0;//定时器T0 TCON=0x01;//Int0中断取边沿触发模式 while(1){ key_val=scan_key();// 255;// if(key_val!=key_val_old){ key_val_old=key_val;if(key_val!=255){ switch(key_val){ case 0: //启动键
TR1=1;//启动计时,TR1=1为启动了的标志
break;case 1: //清除键
init_variant();//清除变量
TR1=0;//关闭定时器
break;case 2: //白天/黑夜的切换
if(state_val==0){state_val=1;} else {state_val=0;} break;} } } if(IE0==1&& TR1==1)//每来1个脉冲,中断一次
{ IE0=0;cnt_30=0;//30秒的计时清零
if(D_cnt<100)
{D_cnt++;} else //计数100次,每次10米,表示一公里
{D_cnt=0;cnt_distance=cnt_distance+1;
cnt_cost=cnt_cost+cost_val[state_val];} } led_show();} } //-----出租车计价器程序结束------------
第二篇:51单片机 出租车计价器课程设计
第一章 出租车计价系统的设计要求与设计方案
1.1 出租车计价器设计要求
设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用七段数码管显示总金额,单价,运行里程,起步价为6元,超过6元,每一公里增加1元或2元,等待时间单价为每30秒钟1元,计费功能:费用的计算是按行驶里程收费。设起步价为6元。
1、当总金额<6元时,按起价计算费用
2、当总金额>6元时,每公里按1元或2元计费
3、等待累计时间>30s时,按1元/30s计费
4、S1为启动按钮、S2转换单价按钮、S3复位按钮。显示功能:
1、显示行驶里程:用三位数字显示,显示方式为“XX.X”,单位为km。计程范围0-99.9km,精确到0.1km。
2、显示单价:用两位数字显示,显示方式为“X.X”,单位为元。
3、显示总费用:用三位数字显示,显示方式为“XX.X”,单位为元。计价范围0-99.9元,精确到0.1元。
1.2 系统主要功能
本出租车自动计费,上电后显示最初的起步价,里程计费单价。同时具有运行,复位,转换等状态,可以切换白天与晚上不同计费单价,可以实现每等待30s收1元功能。出租车显示行驶的总费用,里程,单价。
1.3 方案论证与比较
方案一:采用数字电子技术,利用555定时芯片构成多谐振荡器,或采用外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分频,最后通过译码电路对数据进行译码,将译码所得的数据送给数码管显示,一下是该方案的流程框图,方案一如图1-1所示:
图1-1方案一
方案二:采用EDA技术,根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块 计量模块、译码和动态扫描显示模块,其系统框图如图1-2所示:
图1-2方案二
方案三:采用MCU技术,通过单片机作为主控器,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案三的系统流程图,本方案主要是必须对于数字电路比较熟悉,成本又不高。方案图如图1-3所示:
图1-3方案三
方案总结:通过各个方案的比较,本次采用方案三,不但控制简单,而且成本低廉,设计电路简单。
第二章 出租车计价系统的硬件设计
2.1 AT89C51单片机介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集合输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控器,为很多嵌入式控制系统提供了一种灵活性且廉价的方案 单片机各引脚功能说明:
VCC:供电电压。GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写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口也可作为AT89S52的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间选择外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。
2.2 里程计算、计价单元的设计
里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片机,经处理计算,送给显示单元的。其原理如图2-1所示
图2-1 由于A44E 属于开关型的霍尔器件,其工作电压范围比较宽(4.5~18V),其输出的信号符合TTL 电平标准,可以直接接到单片机的I/O 端口上,而且其最高检测频率可达到1MHZ。
如图2-2,A44E 集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D 和OC 门输出E 五个基本部分组成。
图2-2 路程测量电路
在输入端输入电压CC V,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍耳电势差H V 输出,该H V 信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC 门输出。当施加的磁场达到工作点(即OP B)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC 门输出端输出低电压,通常称这种状态为开。当施加的磁场达到释放点(即rP B)时,触发器输出低电压,三极管截止,使OC 门输出高电压,这种状态为关。这样两次电压变换,使霍耳开关完成了一次开关动作。
我们选择了P3.5 口作为信号的输入端,内部采用计数的方式,车轮每转一圈(我们设车轮的周长是10米),霍尔开关就检测并输出信号,引起单片机对脉冲计数,当计数达到10次时,也就是0.1 公里,单片机就控制将金额自动的加增加,其计算公式:当前单价× 公里数=金额。
2.3 数据显示单元的设计
由于设计要求有单价(2 位)、路程(3位)、总金额(3位)显示输出,我们采用8个7段数码管动态显示。如图2-3:
图2-3 数据显示硬件电路图
2.4 按键单元的设计
电路共采用了四个按键,S1、S2、S3、S4,其功能分别是:S1 启动计价开关、S2 白天/晚上转换开关、S3 数据复位清零开关、S4闭合表示出租车正常运行,计价器也正常计价;若打开S4则表示出租车在暂停,转入判断是否收费程序,闭合超过30秒,开始计价。如图2-4:
图2-4 按键单元电路图 2.5 振荡电路
单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振荡器。振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图2-5所示:
图2-5 振荡电路
2.6 复位电路
复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图2-6所示。
图2-6 复位电路 总电路图
第三章 出租车计价系统的软件设计
3.1主程序流程图记描述
由于用到了外部中断0,所以,按中断系统的编程结构在0000H处放置一条长跳转指令LJMP START跳转到主程序入口,在外部中断0的中断入口地址0003H处放置一条长跳转指令LJMP EXT0跳转到外部中断0服务程序处。主程序进行程序中用到的一些存储单元的初始化,T0,T1的初始化。首先,进行存储器单元初始化,将71H-79H单元赋值。然后进行定时器的设置。设置T1的工作方式为模式2,计数状态,自启动。T0的工作方式,模式1,定时状态,自启动,对输入的脉冲进行计数,给T0、T1赋初值。之后调用计数脉冲子程序,及等待子程序,数码管动态显示子程序,最后进入键盘扫描子程序进行扫描。主程序不断进行调用数码管显示子程序及键盘扫描子程序循环操作,等待中断。如图3-1:
图3-1 主程序流程图 3.2计费子程序流程图
72H存储总金额小数位,73H存储器总金额个位,78H存储器总金额十位,77H存储单价元。将72H中值放入A中,再将A与77H相加,即小数位与单价相加,结果存入A,再进行十进制调整,将结果存于R6,将高四位与低四位交换并屏蔽高四位,保留低四位与个位相加得到总金额个位。若总金额超过10则清零,并且总金额十位加1。将R6中数值取出,屏蔽高四位,输出总金额小数位。如图3-2:
图3-2 计费子程序流程图 3.3 等待是否收费子程序
在出租车的计价系统中,出租车在等待的时候也要计价,本设计体现了这点。程序判断了出租车是否停止,若停止30秒以上是,开始计价。55H中赋初值20,56H中赋初值10,总共30秒延时。超过30秒时,调用计费子程序。如图3-3
图3-3 等待是否收费子程序流程图
3.4 按键子程序流程图
图3-4 等待收费子程序流程图
3.5 外部中断0流程图
图3-5 外部中断0子程序流程图 程序
ORG 0000H LJMP MAIN ORG 0003H;外部中断入口地址 LJMP REST ORG 030H MAIN:
MOV 71H,#00H;脉冲计数每10个脉冲里程数加0.1显示缓冲单元 MOV 72H,#00H;存储总金额小数位 MOV 73H,#00H;存储总金额个位 MOV 74H,#00H;存储里程数小数位 MOV 75H,#00H;存储里程数个位 MOV 76H,#00H;存储单价角位 MOV 77H,#01H;存储单价元位 MOV 78H,#00H;存储总金额十位 MOV 79H,#00H;存储里程数十位 MOV 55H,#20;给定等待初值20*50ms MOV 56H,#10;10秒等待时间初值 SETB EA;开总中断 SETB EX0;开外部中断0 MOV TCON,#04H;外部中断0低电平
MOV TMOD,#61H;设置使用定时器1,模式2,计数状态,自启动,定时器0,模式1,定时状态,自启动
MOV TL0,#0B0H;50ms初值设定C350H MOV TH0,#03CH MOV TL1,#0FFH;设置定时器低八位初值为FFH,即有一脉冲输入就溢出
MOV TH1,#0FFH;设置定时器高八位初值为FFH,用于重装低八位 START: LCALL PULSE;调用计数脉冲子程序 LCALL WAIT;调用等待子程序 LCALL DISPLAY;调用显示程序进行显示 LCALL KEY;调用键盘扫描程序
SJMP START;返回START处继续循环执行 REST: PUSH ACC MOV 71H,#00H;脉冲计数每10个脉冲里程数加1显示缓存单元 MOV 72H,#00H;存储总金额个位 MOV 73H,#00H;存储总金额十位 MOV 74H,#00H;存储里程数个位 MOV 75H,#00H;存储里程数十位 MOV 78H,#00H;存储总金额百位 MOV 79H,#00H;存储里程数百位 MOV 55H,#20 MOV 56H,#10 POP ACC RETI PULSE: JBC TF1,PTO1;TF1为1则转PT01 LJMP PSOUT PTO1: MOV 55H,#20 MOV 56H,#10 INC 71H MOV R1,71H CJNE R1,#0AH,PSOUT;脉冲调整,改变立即数即可;里程数个位74H,R1不等于0AH则转PSOUT MOV 71H,#00H INC 74H LCALL MONEY MOV R1,74H CJNE R1,#0AH,PSOUT;里程数十位75H MOV 74H,#00H INC 75H MOV R1,75H CJNE R1,#0AH,PSOUT MOV 75H,#00H INC 79H MOV R1,79H CJNE R1,#0AH,PSOUT MOV 79H,#00H PSOUT:RET WAIT: JBC TF0,PTO2 LJMP CHU0 PTO2:MOV TL0,#0B0H MOV TH0,#03CH DJNZ 55H,CHU0;不为0则转 MOV 55H,#20 DJNZ 56H,CHU0 MOV 56H,#10;30秒等待计时 INC 72H MOV A,72H LCALL MONEY1 CHU0:RET MONEY: MOV A,72H ADD A,77H MONEY1:DA A MOV R6,A SWAP A ANL A,#0FH ADD A,73H MOV 73H,A CJNE A,#0AH,MONEY2 MOV 73H,#00H INC 78H MOV A,78H CJNE A,#0AH,MONEY2 MOV 78H,#00H MONEY2:MOV A,R6 ANL A,#0FH MOV 72H,A RET DISPLAY:MOV A,78H CJNE A,#00H,L2 MOV A,73H CJNE A,#06H,L1 L1:JNC L2 MOV A,#82H ADD A,#80H MOV P0,A MOV P2,#02H LCALL DELAY MOV P2,#00H MOV A,#0C0H MOV P0,A MOV P2,#01H LCALL DELAY MOV P2,#00H MOV A,#0C0H MOV P0,A MOV P2,#40H LCALL DELAY MOV P2,#00H LJMP L3 L2:MOV A,73H MOV DPTR,#TAB MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#02H LCALL DELAY MOV P2,#00H MOV A,72H MOVC A,@A+DPTR MOV P0,A MOV P2,#01H LCALL DELAY MOV P2,#00H MOV A,78H MOVC A,@A+DPTR MOV P0,A MOV P2,#40H LCALL DELAY MOV P2,#00H L3:MOV A,75H MOV DPTR,#TAB MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#08H LCALL DELAY MOV P2,#00H MOV A,74H MOVC A,@A+DPTR MOV P0,A MOV P2,#04H LCALL DELAY MOV P2,#00H MOV A,77H MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#20H LCALL DELAY MOV P2,#00H MOV A,76H MOVC A,@A+DPTR MOV P0,A MOV P2,#10H LCALL DELAY MOV P2,#00H
MOV A,79H MOVC A,@A+DPTR MOV P0,A MOV P2,#80H LCALL DELAY MOV P2,#00H RET KEY: MOV A,#0FH MOV P3,A MOV A,P3 ORL A,#0F0H CJNE A,#0FFH,KEY1 LCALL DELAY SJMP EKEOUT KEY1: LCALL DELAY MOV A,P3 ORL A,#0F0H CJNE A,#0FFH,KEY2 SJMP EKEOUT KEY2: MOV R1,A KEY3: MOV A,P3 ORL A,#0FCH CJNE A,#0FFH,KEY3 MOV A,R1 JNB ACC.0,RUN JNB ACC.1,CHANGE SJMP EKEOUT RUN: SETB TR0 SETB TR1 SETB EA SJMP EKEOUT EKEOUT:RET CHANGE: PUSH ACC MOV A,77H CJNE A,#02H,NIGHT MOV 77H,#01H SJMP CHOUT NIGHT: MOV 77H,#02H CHOUT: POP ACC RET DELAY: MOV R7,#100 DJNZ R7,$ RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END
第三篇:单片机课程设计出租车计价器1.
常州机电职业技术学院 毕业设计(论文
作者:丛佳伟学号:40931111系部:电气工程系 专业:应用电子技术 题目:出租车计价器系统 指导者:徐登黄勇 评阅者: 2012年05月 摘要
现在各个城市出租车行业都已普及,因此出租车计价器的技术已经成熟,但是出租车计价器的市场还具有广阔的前景。随着城市建设的日益完善,关乎城市面貌的出租车行业也将迅速发展,出租车计价器的的大批量需求也是毫无疑问的,所以未来出租车计价器的市场还是有相当大的潜力的。
本次出租车计价器设计以AT89S52单片机为中心,采用U18霍尔传感器对轮胎转数进行计数,实现对出租车里程的测量,并最终计算出结果。其中采用寄存器芯片AT24C02使系统在掉电的时候对单价、里程、车轮长度等信息进行存储,采用时钟芯片DS1302来显示时间和在系统需要时进行计时。输出采用两个4段数码显示管,而且根据按键有空车指示灯、等待查询指示灯、单程指示灯进行指示。
汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是有一定的应用价值的。
关键词:计价器、霍尔传感器、单片机 目录 摘要(1 1 绪论(3 1.1 出租车计价器概述(3 1.2 单片机的概述(3 2 总体方案设计(4 2.1 设计任务要求(4 2.1.1 设计任务(4 2.1.2 设计要求(5 2.2 设计的主要功能(5 2.3 方案的选取(5 2.3.1 硬件设计方案(5 2.3.2 软件设计方案(6 3 硬件设计(7 3.1 AT89S52单片机及最小系统(7 3.2 测距单元(10 3.3 按键单元(12 3.4 时钟单元(12
3.5 显示单元(13 3.6 储存单元(15 4 软件设计(16 4.1 系统主程序(16 4.2 数据处理子程序(17 4.3 等待时间计时子程序(18 4.4 键盘扫描子程序(19 5 Proteus软件仿真(21 总结.............................................错误!未定义书签。致谢.(23 参考文献(23 附
1、系统原理图(25 1 绪论
1.1 出租车计价器概述
我国在70年代开始出现出租车,但那时的计费系统大都是国外进口不但不够准确,价格还十分昂贵。随着改革开放日益深入,出租车行业的发展势头已十分突出,国内各机械厂家纷纷推出国产计价器。出租车计价器的功能从刚开始的只显示路程(需要司机自己定价,计算后四舍五入,到能够自主计费,以及现在的能够打一发票和语音提示、按时间自主变动单价等功能。随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。
本次设计的目的在于现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征
着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。
1.2 单片机的概述
计算机系统已明显地朝巨型化、单片化、网络化三个方向发展。巨型化发展的目的在于不断提高计算机的运算速度和处理能力,以解决复杂系统计算和高速数据处理,比如系统仿真和模拟、实时运算和处理。单片化是把计算机系统尽可能集成在一块半导体芯片上,其目的在于计算机微型化和提高系统的可靠性,这种单片计算简称单片机。单片机的内部硬件结构和指令系统主要是针对自动控制应用而设计的所以单片机又称微控制器MCU(Micro Controller Unit。用它可以很容易地将计算机嵌入到各种仪器和现场控制设备中,因此单片机又叫做嵌入式微控制器(Embedded MCU。单片机自20世纪70年代问世以来,以其鲜明的特点得到迅猛发展,已广泛应用于家用电器、智能玩具、智能仪器仪表、工业控制、航空航天等领域,经过30多年的发展,性能不断提高,品种不断丰富,已经形成自动控制的一支中坚力量。据统计,我国的单片机年容量已达1~3亿片,且每年以大约16%的速度增长,但相对于国际市场我国的占有率还不到1%。这说明单片机应用在我国有着广阔的前景。对于从事自动控制的技术人员来讲,掌握单片机原理及其应用已经成为必不可少的学习任
务。
单片机的应用十分广泛,在工业控制领域、家电产品、智能化仪器仪表、计算机外部设备,特别是机电一体化产品中,都有重要的用途。其主要的用途可以分为以下方面。
●显示:通过单片机控制发光二极管或是液晶,显示特定的图形和字符。●机电控制:用单片机控制机电产品做定时或定向的动作。
●检测:通过单片机和传感器的联合使用,用来检测产品或者工况的意 外发生。
●通信:通过RS-232串行通信或者是USB通信,传输数据和信号。●科学计算:用来实现简单的算法。
那么单片机是不是解决上述应用的唯一选择呢?当然不是!单片机最明显的优点是价格便宜,从几元人民币到几十元人民币。这是因为这类芯片的生产量很大,技术也很成熟。
其次,单片机的体积也远小于其他两种方案。单片机本身一般用40引脚封装,当然功能多一些的单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只有8只引脚。
当然,单片机无论在速度还是容量方面都小于其他两种方案,但是在实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能。例如,控制电冰箱的控制器就不需要使用嵌入式系统,用一片51就可以轻松实现。所以应用的关键是看能否够用,是否有很好的性能价格比。51系列的单片机已经面世十多年,依然没有被淘汰,还在不断发展中,这就说明是它有广阔的应用前景。总体方案设计
本次设计是使用单片机技术来实现一个出租车的数字计价器,利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和单双程价格调整、时钟显示功能等等。具有性能可靠,电路简单、成本低、扩展空间大等特点。
2.1 设计任务要求 2.1.1 设计任务
设计一款基于AT89S52单片机的出租车数字计价器,通过对传感器的检测,对数值进行处理和显示。
2.1.2 设计要求
一、基本要求
(1能显示里程,单位为公里,最后一位为小数位。(2能显示金额数,单位为元,最后一位为小数位。
(3可设定单程价格和往返价格,单程价格为2元/公里,往返价格为1.5元/ 公里。
(4车速<5公里/小时的时间累积为总等待时间,每5分钟等待时间相当于 里程数增加1公里。
(5起步公里数为3公里,价格为5元,若实际距离大于3公里,按规则3计 算价格。
(6按暂停键,计价器可暂停计价,按查询键,可显示总等待时间。
二、发挥部分
(1增加了空车指示功能,当无客人时,按下功能切换按键,空车指示灯亮。(2增加实时时间显示,无论计价器工作或者空车,都能显示实时时间,便于时间提醒。
(3增加信息储存功能。可以储存等待时间,里程和金额。2.2 设计的主要功能
本设计所设计的出租车数字计价器的主要功能有:金额输出、路程输出、数据复位、计时计价、空车显示等。输出采用2个4位8段共阳数码管,车辆行走时前4位显示路程,后4位显示金额。车辆候车时,前4位显示等待时间,后4位显示等待金额。空车时显示实时时间。储存等待时间,里程和金额。
2.3 方案的选取
本设计是由软件设计和硬件设计两部分组成的。软件设计要进行程序的编写和软件仿真;硬件设计要设计电路、硬件仿真和制作电路板。
2.3.1 硬件设计方案
本系统的硬件设计主要包括单片机AT89S52、数据显示部件、U18霍尔传感 器电路、里程计算及计价单元的设计。在硬件设计过程中,充分利用各部件的功能,实现多功能的出租车计价器设计。
计价器的单片机系统框图如图2-1所示。它由以下几个部件组成:霍尔传感器单元、AT89S52单片机、金额显示、里程显示、电源。利用单片机丰富的IO 端口,及其控制的灵活性,实现基本的里程和价格的计算及显示功能。
图2-1计价器系统框图 2.3.2 软件设计方案
本设计程序的采取C 语言进行编写,使用Keil uVision3编译和Proteus7.4a 仿真软件进行仿真调试。其中的里程计算和费用计算方案如下。
1、里程计算
(1霍尔传感器对车轮进行信号检测,产生并输出脉冲信号到单片机;(2单片机对传感器输出的脉冲信号进行计数,并进行km 计算:每一个信号代表轮胎旋转一周,设轮胎的周长为1.57m;每km 产生的信号数为N ,里程显示为N × 1.57m = 1.57N(km
2、费用计算
(1出租车的起步费为5元,并且3km 内不需额外计价;(2出租车行驶3km 后,单程2元/km ,双程1.5元/km。
单 片 机 霍尔
传感器 数据显示 状态指示 时钟显示 按键 信息存储
(3等待收费的标准为5分钟算一公里;(4暂停时计价器暂停计价,不收费用。3 硬件设计
本设计的硬件设计包括单片机AT89S52单元、测距单元、显示单元(数码管显示金额、等待时间和里程,指示灯对单双程切换指示、空车指示、等待计时指示、按键单元、时钟单元和储存单元。
3.1 AT 89S52单片机及最小系统
1、AT89S52单片机
AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器, 256bytes的随机存取数据存储器(RAM,32个外部双向输入/输出(I/O口,3个16位可编程定时计数器,全双工串行口,看门狗(WDT电路,片内时钟振荡器。
P0口有二个功能:
1、外部扩展存储器时,当做数据/地址总线。
2、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
P1口只做I/O口使用:其内部有上拉电阻。
P2口有两个功能:
1、扩展外部存储器时,当作地址总线使用。
2、做一般I/O口使用,其内部有上拉电阻。
P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻,还有一些特殊功能,由特殊寄存器来设置。
图3-1 AT89S52引脚图
设计中用到的单片机各管脚(图3-1功能以及与其他模块连接介绍如下: VCC:接+5V电源。
VSS:接地。
时钟引脚:XTAL1和XTAL2两端接晶振和30PF的电容,构成时钟电路。
它可以使单片机稳定可靠的运行。
RST:复位信号输入端,高电平有效。当在此引脚加两个机器周期的高电平时,就可以完成复位操作。
P1.0:接功能按键。
P1.1:接切换键,表示单双程切换。P1.2:接查询(上次金额键。P1.3:接清零键。P1.4:接空车指示灯。P1.5:接查询指示灯。P1.6:接开始计时指示灯。P1.7:接双程指示灯。P3.0:接查询/确认键。
P0口接数码管段选端,P2口接数码管位选段。P3.2:接霍尔传感器的输出口。P3.3:接存储器的SCL口。P3.4:接储存器的SDA口。
P3.5:接时钟电路DS1302的RST口。P3.6:接DS1302的SCLK口。P3.7:接DS1302的I/O口。
2、单片机最小系统
复位电路和晶振电路是AT89S52工作所需的最简外围电路。单片机最小系统电路图如图3-2所示。
图3-2单片机最小系统
AT89S52 的复位端是一个史密特触发输入,高电平有效。RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接11.0592M 晶振和两个30pF 电容组成系统的内部时钟电路。
3.2 测距单元
本次设计我们选取了霍尔传感器来进行里程测量。
霍尔器件是一种磁传感器。用它们可以检测磁场及其变化,可在各种与磁场有关的场合中使用。霍尔器件以霍尔效应为其工作基础。
霍尔器件具有许多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高,耐震动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。
霍尔器件分为:霍尔元件和霍尔集成电路两大类,前者是一个简单的霍尔片,使用时常常需要将获得的霍尔电压进行放大。后者将霍尔片和它的信号处理电路集成在同一个芯片上。本次设计选取了霍尔集成电路来测量里程。
里程测量是通过将霍尔传感器的集成电路安装在车轮上方的铁板上,将磁铁安装在车轮上,旋转的车轮将磁铁对准集成电路时,霍尔传感器会输出一个脉冲信号,送到单片机,经过单片机的计算处理,将行驶的里程送到显示单元并显示出来。
其原理示意图如下:
图3-3 传感器测距示意图
U18是一种利用霍尔效应做成的半导体集成电路器件,它被设计在交变磁场中运行,特别是能在低电源电压和长时间运行温度范围可达到125℃。这种霍尔IC可用作各种类型的传感器(速度传感器、位移传感器、转速传感器等等,接触开关以及
相类似的应用场合。其工作电压比较宽(2.5~20V,可运行在较大的温度范围内(-20℃~125℃, 其输出的信号符合TTL电平标准,可以直接接到单片机的IO 端口上,而且其最高检测频率可达到1MHZ。
霍尔传感器的特性如图3-4所示,其中BOP为工作点“开”的磁感应强度, BRP为释放点“关”的磁感应强度。当外加的磁感应强度超过动作点BOP时,传
感器输出低电平,当磁感应强度降到动作点BOP以下时,传感器输出电平不变,一直要降到释放点BRP时,传感器才由低电平跃变为高电平。BOP与BRP之间的滞后使开关动作更为可靠。
U18集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。
在输入端输入电压VCC,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。当施加的磁场达到工作点(即Bop时,触发器输出高电压(相对于地电位,使三极管导通,此时OC门输出端输出低电压,三极管截止,使OC门输出高电压,这种状态为关。这样两次电压变换,使霍尔开关完成了一次开关动作。
图3-4 U18霍尔传感器和其输出特性
U18霍尔传感器有3个外接口,2个是电源的正负极接口,最后一个是脉冲信号输出口,只要将霍尔传感器的信号输出端接到单片机的端口上便可以实现距离检测。
其中,单片机的P3.2(INT0引脚作为信号的输入端,采用外部中断0进行计数。车轮每转一圈,霍尔传感器就产生一个脉冲信号,根据霍尔效应原理,当霍尔片处在磁场中时,霍尔传感器的输出端输出低电平。当车轮转动一圈时小磁铁提供一个磁场,则霍尔传感器输出一次低电平完成一次数据采集,从而产生信号。霍尔传感器检测并输出信号到单片机的INT0或INT1计算脉冲输入端, 引起单片机的中断,对脉冲计数,当计数达到特定的次数时,里程就会增加,单片机对里程进行计算后,通过接口电路将计算好的结果传送到数码管并显示出来。
3.3 按键单元
本设计的按键单元电路(如图3-5有5个按键,功能分别是:S1是空车时查询上次金额和里程以及等待时间,结账时查询本次金额和里程以及等待时间;S2功能键,不按时空车指示灯亮而且数码管显示实时时间,按下时可设置单双程,此时再按S3可进行单程和双程之间切换,再按S1可确认单双程,双程时双程指示灯亮并开始计价;按下S4可对本次金额、里程以及等待时间进行查询;S5为清零键,按下时清零之前数据消除以及存储本次信息。
图3-5 按键单元电路 3.4 时钟单元
本设计采用基于DS1302的时钟电路(如图3-6对时间进行实时显示,单片机掉电对其没有影响。用数码管表现出来,当出租车空车时就显示时间,给人时间提示。
图3-6 时钟电路单元 3.5 显示单元
本设计显示单元包括两部分:数码管显示(图3-7和二极管指示显示(图3-8。数码管显示部分使用两个四位一体的LED数码管,LED显示器是由LED发光二极管发展过来的一种显示器件,是发光二极管的改型。LED是发光二极管的简称,是一种将电能转换成光能的设备。本身也是一种光源。LED显示器是由发光二极管排列组成的显示器件。它采用低电压扫描驱动,具有:耗电少、使用寿命长、成本低、故障少、视角大、可视距离远等特点。此外,它的响应时间短(一般不超过0.1us,亮度也比较高。它的缺点是工作电流比较大,每一段的工作电流在10mA左右。
其中每位数码管是由8个发光二极管演变而来,其中7个发光二极管构成7笔字形,另一个构成小数点,称为8段LED。8段LED数码管是利用7个LED(发光二极管外加一个小数点的LED组合而成的显示设备,可以显示0~9等10个数字和小数点,使用非常广泛,它的外观如图3-9所示:
图3-9 8段数码管
这类数码管可以分为共阳极(8个发光二极管的阳极接在—起与共阴极(8 个发光二极管阴极连在一起两种,共阳极就是把所有LED的阳极连接到共同接点,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点;共阴极则是把所有LED的阴极连接到共同接点,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点,如图3-10所示。
图3-10 共阳和共阴数码管结构
通过控制这个公共端,可使该位亮或暗。如共阴极端接地或共阳极接高电平,则该位显示器有效,反之无效。本设计采用共阴LED数码管。
数码管有静态显示和动态显示两种,这里采用动态显示。它具有低功耗、接口少等特点。如图3-7两个四位一体数码管接P0口作为段选,接P2口作为位选。空车时显示时间,开始计价时前四位显示路程,后四位显示价钱。当查询等待时间时显示为等待时间。
图3-7显示单元(数码管显示部分
二极管指示部分包括空车指示灯、等待时间查询指示、开始计时指示和双程指示如图3-8。这些指示灯能对出租车的每一种状态进行指示,空车时空车指示灯亮,查询等待时间时等待时间查询指示灯亮,当汽车速度小于5km/h 时开始计时,计时指示灯亮。计价前如果按下双程键双程指示灯亮,表示为双程。
图3-8 显示单元(二极管指示部分 3.6 储存单元
存储单元的作用是储存上一次的里程、金额和等待时间。AT24C02 是Atmel 公司的1KB的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V,芯片内的资料可以在断电的情况下保存40年以上,而且采用8 脚的DIP 封装,使用方便。
图3-11储存单元电路
图中R3、R4 是上拉电阻,其作用是减少AT24C02 的静态功耗。由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(时钟脉冲和SDA(数据/地址与单片机P3.3和P3.4口连接,进行传送数据。软件设计
本系统的软件设计主要分为系统主程序、数据处理子程序、等待时间及时子程序和键盘扫描子程序五个模块,下面对每一块进行介绍。
4.1 系统主程序
本设计中,软件设计采用模块化操作,利用各个模块之间的相互联系,在设计中采用主程序调用各个子程序的方法,使程序通俗易懂,我们设计了整体程序流程图。
在main函数编写开始,要进行初始化,包括对系统初始化和对硬件设备进行初始化,并使硬件处于就绪状态。
在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。系统流程图如下图4-1。
开始 初始化 数据处理 键盘扫描 结束
图4-1系统主程序流程图 4.2 数据处理子程序
每当霍尔传感器输出一个低电平信号就使单片机中断一次,在计数中断服务程序,里程和金额都相应变化,当然等待时间也换算成里程(当速度小于5km/h 时5分钟想当于1公里。计算程序根据里程数分别进入不同的计算公式。如果里程大于3公里,则执行公式:金额=(里程-3*单价+5;否则,执行公式:总金额=起步价。程序流程图如图4-2所示。
计算里程 开始
里程<3公里否是
金额=5元金额=单价*(里程-3+5 显示金额
结束
图4-2 数据处理子程序流程图 4.3 等待时间计时子程序
当出租车的速度5km/h时等待时间开始计时,并被换算里程,进行计算显示等待时间和金额。当结算时停止计时和计费并显示金额,当有查询键按下时显示等待时间,当有清零键按下时存储本次金额。如图4-3: 开始
结算键按下?Speed<5公里/ 小时?开始计时,并显示Speed>5公里/ 小时?停止计时,开始计 路程 否 是
停止计时,计费,显示金额 查询键按下? 存储本次金额 是清零键按下? 是 否
显示等待时间
图4-3等待时间计时子程序 4.4 键盘扫描子程序
键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。流程图如图4-4。
开始 功能键按下? 单双程设置 切换键按下? 切换单双程 确认键按下? 空车指示灭,开始计价计时,显示里 程,价格 结算键按下? 结算金额显示 是 是 是 是
否 显示时间 否 否 否
查询键按下? 显示等待时间与里 程
清零键按下?存储金额 是 否 是否 按下两次? 是
查询键按下? 显示上次金额 是
图4-4 键盘扫描子程序 5 Proteus软件仿真
本设计需要用Keil uVision3对C51程序进行编译,生成“.hex”文件,如图5-1 :
图5-1 Keil uVision3编译
在Proteus软件中画出仿真电路(如图5-2,把Keil uVision3编译后生成的“.hex”导入到单片机中,按“运行仿真”键进行仿真。
图5-2Proteus仿真 总结
总结在本次设计中,我们采用AT89S52芯片为核心器件,设计出了简单的出租车计价器,能够实现显示时间、等待时间、金额和里程,按键控制,空车指示。
选题后,我们便开始复习单片机方面的知识,也查阅、搜索了很多相关资料,进行总体设计与具体设计,同时也学习仿真软件Proteus和编程软件Keil uVision3。由于以前都采用汇编语言实现编程,对用C语言来实现单片机的编程不太习惯,花费了一些时间来熟悉C语言的编程。在设计开始,要形成流程图,它可以使设计有一定的逻辑性与严密性,使得设计思路明确。采用模块化的设计思想很重要,它方便编写、修改与调试,另外加上必要的注释,便于交流与理解。
这次课程设计设计完成后,体会颇多,在学与做的过程中,取长补短,不断学习新的知识,吸取经验,达到进步的目的。通过自身的努力以及相关图书资料的帮助,逐渐熟
悉了Keil uVision3、PROTEUS和C语言等软件的使用以及硬件焊接与检测过程中的一些小技巧。本次设计我学习到不少单片机的知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题。所焊实物尚有许多不足,个别功能还不能很好的实现,主要原因是考虑问题不周全,电路设计经验少,实际动手能力不足。恳请各位老师批评指正,以使我在以后的学习和实践中加以改进和提高。
致谢
毕业设计即将结束,在老师的指导和同学的帮助之下,学生对于出租车计价器设计有了更多新的认知,对出租车计价器设计有了更深一步的认识,对出租车计价器综合设计的整体脉络了解得更加的清晰透彻。通过毕业设计,学生对自己三年以来所学的知识有更多的认识。
毕业设计,帮助我们总结大学的收获、认清自我。同时,还帮助我们改变一些处理事情时懒散的习惯。从最开始时的搜集资料,整理资料,到方案比选,确定方案,再到着手开始设计,每一步都是环环相扣,衔接紧密,其中任何一个步骤产生遗漏或者疏忽,就会对以后的设计带来很多的不便。
本次作者的毕业设计是由徐老师指导的,在他的悉心指导下,我开阔了眼界,明确了思路。在整个的设计过程中,徐老师提出了许多宝贵的建议和指导,使我能够顺利的完成整个设计,在此,谨向徐老师表示由衷的感谢。
在即将离开学校之际,我要感谢在大学生活中任课的众多老师,正是在他们的谆谆教诲下使我顺利完成了大学的基础知识和专业知识的学习。在此,还要感谢陪伴我共同走过大学时代并给予我帮助的同学和朋友们,感谢你们,祝福你们在以后的日子里开开心心的度过每一天!参考文献
1.戴佳, 陈斌, 苗龙.51单片机应用系统开发典型实例.中国电力出版社,2005
2.余发山,王福忠.单片机原理及应用技术.中国矿业大学出版社, 2008.6 3.侯玉宝, 陈忠平, 李成群.基于Proteus的51系列单片机设计与仿真.电子工业出版社,2008 4.李玉梅.基于MCS-51系列单片机原理的应用设计.国防工业出版社,2006 5.边春元, 李文涛, 江杰.C51单片机典型模块设计与应用.机械工业出版社,2008 6.楼然苗,胡佳文,李光飞等.单片机实验与课程设计.浙江大学出版社,2010.10 常州机电职业技术学院毕业设计报告 附
1、系统原理图、25
第四篇:基于单片机的出租车计价器设计报告
河南理工大学
《单片机应用与仿真训练》设计报告 出租车计价器设计
姓名学号: 专业班级: 指导老师: 所在学院: 2012年6月25日 摘要
本设计用直流电机转动模拟出租车车轮转动,实现出租车多功能的计价功能。设计采用AT89S52单片机为主控芯片,用光电对管检测电机转盘转速,采用24C02芯片为系统在掉电时路程、钱数等重要信息提供存储保护,采用两个四位8段共阴数码管显示里程、总价格和等待时间等信息。本设计可以实现单双程设置、系统暂停、空车指示、信息显示、掉电保护等功能。
出租车计价是根据车所行驶的路程以及乘客乘车的方式综合决定的。出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。使用光电对管能方便地计量车轮旋转的圈数,输出的脉冲信号被接入到AT89S52单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程,并且可以计算实时的速度。与此同时,根据不同的收费标准计算收费。通过键盘能够实现往返设置,启动、暂停、停止计价器、设置单返程等。
关键字:出租车计价器,AT89S52,24C02,光电对管 Abstract This design with DC motor to rotate the analog taxi wheels turning, multi-purpose taxi pricing function.Design using AT89S52 MCU for master chip with a photoelectric tube test motor turntable speed, AT24C02 chip to make the system power-down distance, money and other important information on the storage protection, the use of two four-segment common cathode digital display tube mileage, the total price and waiting time information.This design enables single and double-way set, system halted, empty instructions, information display, power-down protection and other functions.The taxi meter according to the distance traveled by the vehicle and passengers ride the decision.Taxi driving the total distance by the circumference of the wheel drive wheel rotation laps.Can be calculated by the wheel rotation a few weeks a taxi to travel one kilometer away.The use of opto-the number of turns of the tube can be easily measured wheel rotation, the output pulse signal is connected to the microcontroller AT89S52 system, calculated by computing the number of pulses received, the current driving distance, and can calculate the real-time speed.At the same time, the charge will be calculated according to the different charges.Able to achieve a round trip via the keyboard settings, start, pause, stop the meter, set the single return.Key words: Meter,AT89S52,AT24C02,Photoelectric tube 目录 1 概述 1 2 系统总体方案及硬件设计 2 2.1系统总体方案 2 2.2 硬件电路设计单元 2.2.1 电源电路单元 2 2.2.2 系统控制单元 3 2.2.3 驱动电路单元 6 2.2.4 信号检测单元 7 2.2.5 显示单元 8 2.2.6 数据存储单元 9 3 软件设计 10 3.1 软件设计流程图 10 3.2 计算模块 11 3.3 键盘扫描 11 3.4 显示程序 11 3.5 PWM波的生成 11 3.6 速度检测 12 3.7 程序源代码 12 4 Proteus软件仿真 13 5 课程设计体会 14 6 主要参考文献 16 致谢 17 附1 程序源代码 18 附2 系统原理图 33 1 概述
出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志。它关系着交易双方的利益,具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有应用价值和现实意义的。
出租车计价是根据车所行驶的路程以及乘客乘车的方式综合决定的。出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。使用霍尔传感器方便地计量车轮旋转的圈数。输出的脉冲信号被接入到AT89S52单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程,并且可以计算实时的速度,在速度低于5公里每小时是进入等待计费。于此同时,根据不同的收费标准,通过选择相应的起步价、单价等收费标准进行计算。通过键盘能够实现往返设置,启动、暂停、停止计价器以及切换显示当前的行驶里程和需支付的车费。
本设计硬件电路分为六个单元:电源电路单元,系统控制单元,驱动电路单元,信号检测单元,显示单元和数据存储单元。软件系统分为五个大的模块为:总初始化模块,按键扫描模块,中断与定时模块,数据计算模块,数码管显示模块。其中,键盘扫描和数码管显示采用查询方式,转速信号接收与等待记时采用中断方式。这些软硬件系统构成了最终的设计。系统总体方案及硬件设计 2.1系统总体方案 本设计以AT89S52单片机为中央控制芯片,通过按键控制实现计价器的启动、停止、暂停、等待时间显示、单返程等功能;因为单片机的I/O无法直接驱动直流电机转动,所以通过L298N为驱动芯片驱动电路来驱动直流电机转动;通过光电对管检测直流电机的转速,并利用电压比较器将整理后的信号送给给单片机;通过数码管来显示里程、总价格、等待时间等信息;通过AT24C02来存储信息,防止系统掉电信息丢失。系统设计总框图,如图2.1所示。
图2.1系统设计总框图 2.2 硬件电路设计单元
本设计硬件电路分为六个单元:电源电路单元,系统控制单元,驱动电路单元,信号检测单元,显示单元和数据存储单元。
2.2.1 电源电路单元
电源是由7805芯片,变压器和整流桥组成的一个5V稳压电源。变压器将220V交流电转变为12V交流电,经过整流桥和滤波电容后变为直流,经过7805芯片后输出5V稳压电源。电源电路原理图,如图2.2所示。
图2.2电源电路原理图 2.2.2 系统控制单元
系统控制单元主要有单片机最小系统和独立按键组成。2.2.2.1 单片机最小系统
单片机采用了Atmel 公司生产的 AT89S52单片机,它含有256 字节数据存储器,内置8K 的电可擦除FLASH ROM,可重复编程,大小满足主控机软件系统设计。
AT89S52芯片的主要引脚功能分别为: VCC 电源电压。GND 接地。
RST 复位输入。当RST变为高电平并保持2个机器周期时,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISKRTO位缺省为RESET输出高电平打开状态。
ALE/PROG: 当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。
P0口:一组8位漏极开路型双向I/O口。也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。Flash编程和程序校验期间,P1接收低8位地址。
P2口:一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。Flash编程和程序校验期间,P2亦接收低8位地址。
P3口:一个带内部上拉电阻的8位双向I/O口。P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写“1”时,它们被内部的上拉电阻把拉到高电并可作输入端口。作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线外,还作特殊功能口。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,外部数据存储器的读取信号。单片机最小系统原理图,如图2.3所示。图2.3 单片机最小系统原理图 2.2.2.2 独立按键
本设计按照功能要求设置了六个按键。按键接线图,如图2.4所示。按键功能分别为:
key0:系统启动,用来启动计价器,使计价器开始工作; key1:系统停止/复位,用来关闭计价器,是计价器停止工作并复位;
key2:单程双程,用来设置是单程计费还是往返计费;
key3:系统暂停,用来将整个计费系统暂停; key4:等待时间显示,当按下不放时 图2.4按键接线图
数码管为显示等待的时间。
Key5:调速按钮,用来调整电机的转速,使测试时可控制电机转速。2.2.3 驱动电路单元
LM298N是SGS公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A一下的电机。LM298N的管脚图,如图2.5所示。通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,LM298N的逻辑功能表,如图2.6所示。
图2.5 LM298N的管脚图 图2.6 LM298N的逻辑功能表
LM298N有两路电源分别为逻辑电源和动力电源,图中6V为逻辑电源,12V为动力电源。J4接入逻辑电源,J6接入动力电源,J1与J2分别为单片机控制两个电机的输入端,J3与J5分别与两个电极的正负极相连。ENA与ENB直接接入AVR单片机的PWM输出口;控制电机的正反转通过J1与J2两个接口,控制电机的转速的通过ENA和ENB的口输入的PWM波的占空比。由于我们使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针状态时会形成很大的反向电流,在电路中加入二极管的作用就是在产生反向电流的时候进行泄流,保护芯片的安全。LM298N电机驱动原理图,如图2.7所示。
图2.7 LM298N电机驱动原理图 2.2.4 信号检测单元
电机转速的检测模块是由对射式光电传感器及其配套电路组成的,对射式光电传感器原理图,如图2.8所示。
对射式光电传感器由红外发光二极管与光敏三极管组成,主要检测发射管与接收管之间有无物体存在。如上图所示,当发射管与接收管之间没有物体存在时,光敏三极管接收到红外光后导通,out输出低电平;当发射管与接收管之间有物体存在时,光敏三极管无法接收到足够的强的红外光所以截止,out输出高电平。
但是上述电路存在缺陷,当直流电机高速旋转时,out输出的信号就容易失真,很难被单片机检测识别。为了能够让单片机准确识别光电传感器输出地信号,需在传感器的输出端连接一个比较器。
电压比较器可以看作是放大倍数接近“无穷大”的运算放大器。电压比较器的功能:比较两个电压的大小 用输出电压的高或低电平,表示两个输入电压的大小关系 :当”+”输入端电压高于”-”输入端时,电压比较器输出为高电平;当”+”输入端电压低于”-”输入端时,电压比较器输出为低电平。LM393是双电压比较器集成电路
图2.8对射式光电传感器原理图 图2.9 LM393引脚图
速度检测电路原理图,如图2.10所示。由原理图可知, 当发射管与接收管之间没有物体存在时,光敏三极管接收到红外光后导通,out输出高电平;当发射管与接收管之间有物体存在时,光敏三极管无法接收到足够的强的红外光所以截止,out输出低电平。经过整理后的电路能输出比较标准的高低电平信号,很容易被单片机识别。图2.10 速度检测电路原理图 2.2.5 显示单元 2.2.5.1 数码管显示
显示单元采用两个四位8段数码管显示信息,一组显示金额,另一组显示路程配合按键来切换显示。用锁存器来驱动数码管显示,数据位连接单片机P0口,片选端和段选端分别用单片机的P2.6和P2.7端口。如图2.11所示为数码管显示接线图。
图2.11 数码管显示接线图 2.2.5.1 LED指示灯
本设计按照功能要求设置了五个LED灯。接线图如图2.12所示。各个LED灯的功能分别为:
DS0:等待指示灯,车速小于5Km/h时指示灯亮; DS1:暂停指示灯,当暂停键按下,计价器暂停计价时亮; DS2:空车指示,当计价器停止工作也就是空车时,此指示灯亮; DS3:启动指示灯,当按下启动键,计价器开始计价时亮; DS4:单双程指示灯,默认为单程,当选 图2.12 LED指示灯接线图
择双程时亮。2.2.6 数据存储单元
本设计使用了24C02作为外部存储芯片。24C02是串行2K的EEPROM,是基于I2C-BUS 的存储器件,遵循二线制协议,具有接口方便,体积小,数据掉电不丢失等特点。计价器能将里程和总价格实时的存储到24C02中,当计价器因掉电停止工作,24C02会存储掉电前一刻的数据,使系统从新上电时能够恢复里程和总价格。当计价器是被手动正常停止时,将会对24C02相应的地址写0,以使下次启动时,计价器从初始化数据开始计价。24C02的接线图,如图2.13所示。
图2.13 24C02的接线图 3 软件设计 3.1 软件设计流程图
软件系统可以大致分为几个大的模块为:初始化模块,按键扫描模块,中断与定时模块,数据计算模块,数码管显示模块,IIC总线通信模块等。其中,键盘扫描和数码管显示采用查询方式,转速信号接收采用中断方式。软件设计流程图,如图3.1所示。
图3.1 软件设计流程图 3.2 计算模块
计算程序根据里程数分别进入不同的计算公式。如果里程大于3公里,则执行公式:总金额 起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额 起步价+等待时间*等待单价。
对于速度的判断及等待时间的记录采用定时器零中断,设定10ms一个中断,然后判断车速,小于5公里/小时时,则开始记录等待时间。
3.3 键盘扫描
键盘扫描才用查询方式,当有按键按下时就对相应的标志进行取反,或调用其他子函数,在消抖过程中,这里将数码管显示程序潜入以保证显示的稳定。
3.4 显示程序
显示程序利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示
3.5 PWM波的生成
在AT89系列单片机中,由于没有PWM控制器,要输出PWM信号就需通过软件的方式在I/O口上模拟PWM的输出。PWM软件设计一般可以利用软件延时的方式或利用单片机内部的定时器/计数器作为时钟信号。
本设计是利用软件延时获得PWM信号的,在软件中设计一个基准的软件延时程序,通过反复调用这个延时程序,从而获得不同的时间长度,为了电机速度稳定,我们选择使用同周期,不同占空比的PWM进行调速。
若频率为1kHZ,则每个方波的周期为1ms,占空比从0变化到100%,最小的变化量为10%,即高电平维持时间的最小值是100us,所以只要设计出100us的延时程序作为基准即可。具体程序如下: #define uchar unsigned char sbit PWM P3^4;//定义PWM输出口为P3.4 void PWMout uchar q //生成同周期的PWM波
PWM 1;delay q;PWM 0;delay 10-q;
void delay uchar a //100us延时函数
uchar b;for;a 0;a--
for b 29;b 0;b--
_nop_;
_nop_;
3.6 速度检测
经检测模块得到的信号输入到单片机内,因为输入的是低电平信号,所以我把信号输入到了中断0端口,每接收一个低电平信号程序就会进入中断函数里面,中断0函数如下: void int0 interrupt 0
sudu++;
这样就完成了速度测量。3.7 程序源代码 程序源代码见附录2。4 Proteus软件仿真
将整个系统原理图在Proteus连接好后,下载如编写好的程序仿真如下:如图4.1显示的状态设置为:单程,车速大于5km/h,当路程等于40.4km时的显示情况。
图4.1 Proteus软件仿真图 5 课程设计体会
本次单片机课程设计,我们选的题目是出租车计价器的设计。通过仿真、焊接、调试等不断的努力,我们的出租车计价器实现了基本要求的全部功能和发挥部分的部分功能。比如能显示里程、金额数、总等待时间,可设定单程价格和双程价格,按暂停键,计价器可暂停计价,按查询键,可显示总等待时间,空车指示、信息存储等。
经过这些天有关于出租车计价器的课程设计,使我们对MCS-51系列单片机的应用有了更深的了解。从前的学习过程过于浮浅,只是流于表面的理解,而现在要做课程设计,就不得不要求我们对所用到的知识有更深层次的理解。因为课程设计的内容比及书本中的理论知识而言,更接近于现实生活,而理论到实践的转化往往是一个艰难的过程,它犹如一只拦路虎,横更在我们的面前。但是我们毫不畏惧,因为我们相信我们能行。
事情并不总是一帆风顺的,我们总会遇到困难和险阻。在此次课程设计的过程中,我们碰到了许多的问题。比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;对于代码的前后顺序及调用掌握得还不够好;对于一些相关的应用软件 KEIL、PROTEUS、Altium esigner 没能熟练掌握。当然,问题并不可怕,只要我们怀着一颗不服输的心,勇往直前,那么胜利将不会离我们太远。通过上网查找资料、与同学老师交流、小组成员间的讨论、不断实践与探索,我们总能找到解决问题的方法,最后得到良好的效果。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总之,本次课程设计让我们更加深刻的掌握了MCS-51系列单片机的工作原理和编程语言,更加熟练的掌握了KEIL、PROTEUS、Altium designer等专业软件的使用,熟悉了产品开发的大致流程,深刻的体会到了团队协作精神的重要性,培养了我们发现问题、独立思考问题、多种途径解决问题的能力,锻炼并提高了了我们的动手实践能力和理论与实践相结合的能力。
我以后做一个动手能力强的大学生。http://www.xiexiebang.com.致谢
在课程设计即将完成之际,我想向给予我帮助和支持的人表示衷心的感谢!感谢高老师和王老师给我们提供这次难得的课程设计机会,让我们有机会把理论
得以应用到实践上。
感谢我们的指导老师王莉,课程设计是在老师的亲切关怀和悉心指导下完成的。严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。老师不仅在学业上给我以精心指导,同时还在思想、上给我以无微不至的关怀,在此谨向老师致以诚挚的谢意和崇高的敬意。我还要感谢在一起愉快的度过的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。最后,再次对关心、帮助我的老师和同学表示衷心地感谢!#include
//头文件
#include
#include
//IIC总线通信 #include
//数码管显示 #define uint unsigned int
#define uchar unsigned char sbit key0 P1^0;//启动 sbit key1 P1^1;//停止 sbit key2 P1^2;//单返程 sbit key3 P1^3;//暂停 sbit key4 P1^4;//显示等待时间 sbit key5 P1^5;//调速 sbit led0 P2^2;//暂停指示灯 sbit led1 P2^3;//空车指示灯 sbit led2 P2^4;//启动指示灯 sbit led3 P2^5;//双程指示灯 sbit led4 P2^1;//等待指示灯 sbit PWM P3^4;//PWM输出口
uchar sudu,sudu0,shi,fen,miao,shi0 12,fen0 30,miao0;uchar danfanflag 0,flag 0,speedflag 1,stopflag 0;uint licheng 0,maichong,r 0,money 0;uint t,t1,t2;uchar num1,num2,num3,num4,lichenga,lichengb,moneya,moneyb;long licheng0;void init0;//系统初始化函数 void delay uint a;//延时函数 void PWMout uchar q;//PWM产生函数 void anjian;//按键扫描函数 void jisuan;//路程、价钱计算函数 void chuli;void main
num1 read_add 25;num2 read_add 26;delay 5;licheng num1*100+num2;licheng0 150*licheng-300*fen;init0;while 1
anjian;chuli;lichenga licheng/100;lichengb licheng%100;
write_add 25,lichenga;delay 5;write_add 26,lichengb;
void init0
TH0 0x3c;TL0 0xb0;EA 1;
//初始化
TMOD 0x01;EX0 0;IT0 1;ET0 1;TR0 1;P0 0xff;P1 0xff;P2 0xff;P3 0xfe;
void chuli
if speedflag 1 PWMout 12;else if speedflag 2 PWMout 20;else PWMout 6;if flag 1 led2 0;
led3 1;jisuan;
if key4 0
display0 shi,fen,miao;
else
display licheng,money;
if flag 2
led2 0;led3 1;display 1,2;
if flag 0
display0 shi0,fen0,miao0;led3 0;led2 1;
if danfanflag 1 led1 0;if danfanflag 0 led1 1;if stopflag 1
led0 0;
else led0 1;
void jisuan
r maichong;licheng0+ r;licheng licheng0/150+ fen/5 *10;sudu0+ r;maichong 0;if t2 10
t2 0;
sudu sudu0;
sudu0 0;
if licheng 30
money 50;else
if danfanflag 1
money 50+1.5* licheng-30;
else
money 50+2* licheng-30;
void anjian
if key0 0
EX0 1;
flag 1;
stopflag 0;
if key1 0 EX0 0;maichong 0;
licheng0 0;licheng 0;flag 0;
shi 0;
fen 0;
miao 0;write_add 25,0;delay 5;write_add 26,0;
if key2 0
delay 5;
if key2 0
if flag 1
danfanflag++;
if danfanflag 2
danfanflag 0;
while!key2;delay 5;while!key2;
if key3 0
if flag 1
EX0 0;
stopflag 1;
if key5 0
delay 5;
if key5 0
speedflag++;
if speedflag 3
speedflag 0;
while!key5;delay 5;while!key5;
void int0 interrupt 0 数
maichong++;
void timer0 interrupt 1
TH0 0x3c;TL0 0xb0;t++;t1++;t2++;if t1 20
t1 0;
miao0++;
//检测与计定时器50ms
//
if miao0 60
miao0 0;
fen0++;
if fen0 60
fen0 0;
shi0++;
if shi0 24
shi0 0;
if sudu 50&&flag 1&&stopflag 0 led4 0;if t 20
t 0;
miao++;
if miao 60
miao 0;
fen++;
if fen 60
fen 0;
shi++;
if shi 24
shi 0;
else led4 1;
void PWMout uchar q
PWM 1;delay q;
//生成PWM波
PWM 0;delay 20-q;
IIC.h IIC通信
#define uint unsigned int
#define uchar unsigned char sbit sda P1^6;sbit scl P1^7;void delay0;;void start
sda 1;delay0;scl 1;delay0;sda 0;delay0;
void stop
sda 0;delay0;scl 1;delay0;sda 1;delay0;
void respons
uchar i;scl 1;delay0;while sda 1 && i 250 i++;scl 0;delay0;
void init
sda 1;scl 1;
void write_byte uchar date uchar i,temp;temp date;scl 0;delay0;for i 0;i 8;i++
temp temp 1;
sda CY;
delay0;
scl 1;
delay0;
scl 0;
delay0;
sda 1;
delay0;
uchar read_byte
uchar i,j,k;scl 0;delay0;sda 1;delay0;for i 0;i 8;i++
scl 1;
delay0;
j sda;
k k 1 |j;
scl 0;
delay0;
return k;
void write_add uchar address,uchar date
start;write_byte 0xa0;//器件地址;
respons;write_byte address;//存储器地址;
respons;write_byte date;//写数据
respons;stop;
uchar read_add uchar address
uchar date;start;write_byte 0xa0;respons;write_byte address;respons;start;write_byte 0xa1;respons;date read_byte;stop;return date;
display.h 数码管显示#define uint unsigned int
#define uchar unsigned char sbit dula P2^7;//端口
定义段选
sbit wela P2^6;//定义位选端口
uchar code table[]
//数码管编码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71;void delay uint c
//延时100us
uint a,b;for a c;a 0;a--for b 40;b 0;b--;
void display uint shu,uint shu1 //显示函数
uchar qian,bai,shi,ge,qian1,bai1,shi1,ge1;qian shu/1000;bai shu/100%10;shi shu%100/10;ge shu%10;qian1 shu1/1000;bai1 shu1/100%10;shi1 shu1%100/10;ge1 shu1%10;dula 1;P0 table[qian];dula 0;wela 1;P0 0xfe;wela 0;delay 2;dula 1;P0 table[bai];dula 0;wela 1;P0 0xfd;wela 0;delay 2;dula 1;P0 table[shi]|0x80;dula 0;wela 1;P0 0xfb;wela 0;delay 2;dula 1;P0 table[ge];dula 0;wela 1;P0 0xf7;wela 0;delay 2;dula 1;P0 table[qian1];dula 0;wela 1;P0 0xef;wela 0;delay 2;dula 1;P0 table[bai1];dula 0;wela 1;P0 0xdf;wela 0;delay 2;dula 1;P0 table[shi1]|0x80;dula 0;wela 1;P0 0xbf;wela 0;delay 2;dula 1;P0 table[ge1];dula 0;wela 1;P0 0x7f;wela 0;delay 2;
void display0 uchar shi,uchar fen,uchar miao 示时间函数
uchar aa,bb,cc,dd,ee,ff;aa shi/10;bb shi%10;cc fen/10;
显 // dd fen%10;ee miao/10;ff miao%10;dula 1;P0 table[aa];dula 0;wela 1;P0 0xfe;wela 0;delay 4;dula 1;P0 table[bb]|0x80;dula 0;wela 1;P0 0xfd;wela 0;delay 4;dula 1;P0 table[cc];dula 0;wela 1;P0 0xfb;wela 0;delay 3;dula 1;P0 table[dd]|0x80;dula 0;wela 1;P0 0xf7;wela 0;delay 4;dula 1;P0 table[ee];dula 0;wela 1;P0 0xef;wela 0;delay 4;dula 1;P0 table[ff];dula 0;wela 1;P0 0xdf;wela 0;delay 4;
附2 系统原理图
河南理工大学本科课程设计报告河南理工大学本科课程设计报告按 键
AT89S52单片机 L298N驱动 数码管显示 信号检测 24C02 指示灯 直 流 电 机 开始 初始化 按键扫描 是否启动 结束 是否暂停
速度是否小于5Km/h 是 否
1.5元/公里 2元/公里 数码管显示 是否双程 暂停计价 是 是 否
每5分钟加1公里 是 否 查询 处理计算
第五篇:出租车计价器
基于单片机的出租车计价器设计
摘要
出租车计价器的数字系统的设计正是基于一些专用的芯片,才发挥其有效特性,从而实现出租车的计价功能。此数字系统主要分为三个单元,即里程计数及显示单元、价格计数及显示单元、脉冲产生。本设计是一个基于单片机AT89C51的出租车自动计费设计,附有复位电路,时钟电路等。关键词:出租车计费器;单片机;控制
Abstract Taximeter design digital system is based on some special chip, to play their effective characteristics, thus realizing the taxi valuation function.This system is mainly divided into there modules, namely the mileage counting and display unit, and display unit price counting, pulsing.The design is based on a single chip AT89C51taxis design, a reset circuit, clock circuit.Keywords:taximeter,a single-chip microcomputer,control
1引言
1.1 设计目的
近几年来,出租汽车行业在各地得以蓬勃发展,但采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强。
1.2 功能要求
(1)用前4位数码管实时显示里程数,单位为千米,最后一位为小数位;用后4位数码管时时显示金额数,单位为元,最后一位为小数位。
(2)规定出租车里程小于2千米收费5元,超过2千米收费为8*(way-20)/5。
1.3 设计方法
本设计采用AT89C51单片机为主控器,并用频率信号发生器模拟车速,利用AT89C51的定时器工作在方式1下定时实现对出租车的计价设计,输出采用共阴极的集成8位7段数码显示管。设计方案及原理
2.1 设计方案
采用AT89C51单片机为主控器,并用频率信号发生器模拟车速,利用AT89C51的定时器/定时器T1工作在方式1下定时实现对出租车的计价设计,输出采用共阴极的集成8位7段数码显示管。本电路设计的计价器不但能实现基本的计价,而且
单片机原理及系统课程设计报告
还能根据里程来调节单价。
2.2 设计原理
出租车计价是根据车所行驶的路程以及乘客乘车的里程综合决定的。出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。通过计数接收到的脉冲个数,计算出当前所行驶的路程。同时,通过数码管显示当前的行驶里程和需支付的车费。出租车计价器用于记录里程、起步公里数与价格的关系。模拟出租车计价器能根据总里程数、起步公里数的情况作出相应报价等。这个系统以AT89C51单片机为主控器,单片机的计数器/定时器T1工作在方式1下来对外部脉冲计数,最后通过集成的8位7段LED数码管显示里程数和价钱。总体模块框图如图1所示。
总金额显示单价显示AT89C51脉冲产生动态扫描数码管显示
图1 总体框图 硬件设计
对于AT89C51的计数器/定时器T1,通过对寄存器TCON的设置,即使它的M1M0=01,计数器/定时器T1工作在方式1下,构成16位计数器/定时器。此时TH0、TL0都是8位加法计数器。此设计中,T1为计数工作方式,计数范围为1~2^16=1~65536(个外部脉冲)。当计数溢出时则置位并申请中断,进入中断服务 执行中断程序。
通过74HC138接P20、P21、P22输出来对8位7段的智能扫描LED进行段选,并且通过P1口对LED进行位选,最后将结果显示在LED上。硬件设计图如图2所示。
74HC138是三八译码器,在工作之前,使74HC138的使能端有效,再使74HC138的A、B、C接P20、P21、P22的输出达到对LED位选线的控制,使相应的位显示相应的结果。硬件总设计图如图2所示。