




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单 片 机 课 程 设 计 课程名称: 单片机课程设计 设计题目: 基于外部脉冲自动计数的出租车计费器设计 专 业: 测控技术与仪器 学生姓名: 湖南工业大学电气与信息工程学院一、设计任务:1.1外部脉冲自动计数,自动显示。1.1.1设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。1.1.2设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。1.2 设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在6位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)二、设计思路及源程序:2.1、0-255计数器设计:设计思路: 十进制数0-255可用8位二进制数来表示,定时器/计数器的四种工作方式均可实现0-255的计数功能(工作方式3只有定时器0可以实现)。在此为了设计方便,我采用定时器/计数器t1工作方式2(可自动重装初值),外部脉冲由at89s51的p3.5管脚引入,每来一个外部脉冲,计数器t1计数加一。由此,只需对tl1的计数值进行相应的二进制-十进制转换,通过算法进行运算可得到百位,十位,各位,并存入相应变量中(对c51语言而言)。选通相应数码管,再将各位数字的相应显示编码输入即可在数码管上显示计数结果。源程序:/*程序功能描述:计数器接受外部脉冲实现自动计数,计数范围0-255 计满数后自动清零,再重新循环计数 。 说明:主要硬件设备:6位共阳极数码管,晶振频率:12mhz*/#includereg51.h /c51头文件unsigned char code led_num10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /数码管显示数字的十六进制代码unsigned char code led_bit6=0xf8,0xf9,0xfa,0xfb,0xfc,0xfd; /位选代码,注意语句后的分号不能丢/*函数名称:延时子程序*/void delay(unsigned int dat) unsigned int k,j; /定义局部无符号整形变量 for(k=0;kdat;k+) for(j=0;j2000;j+); /空循环,延时语句 /*函数名称:计数器初始设置函数*/void init_timer1(void) tmod=0x60; /设置为计数器模式,工作方式2,自动重装初值 th1=0x00; /计数器初值设为0 tl1=0x00; tr1=1; /开启计数器/*函数名称:主函数 说明:先将计数器1的tl1中数据百位、十位、个位分离,并存于数组led中,再将对应数字的编码送入数码器显示出来*/void main(void) unsigned char i,j; unsigned char led3; /用来存放要显示数字的百、十和个位上的数字 init_timer1(); /计数器初始化 while(1) led0=tl1%10; /取个位数字存于字符数组 led1=tl1%100/10; /取十位数字 led2=tl1/100; /取百位数字 for(j=0;j10;j+) /在显示上消耗时间,使三个数码管显示不中断. for(i=0; i 3; i+) p2=led_biti; /把ledi表示的位置的位选通 p0=led_numledi; /把相应位置的数显式出来 delay(1); /延时 proteus仿真效果图图2.1、255计数器仿真效果图2.2、0-50000计数器设计: 设计思路:0-50000计数器设计方法与0-255计数器设计方法有很多地方相似,主要在一些地方作了一些技术处理。由于十进制数0-50000用8位二进制已不能表示出来,在此只能选择定时器/计数器工作方式1。在用16位计数器处理0-50000计数时,我们既可用单纯的定时器/计数器模式,也可采用定时器/计数器中断模式。中断模式的优越之处在于它可在计数溢出时打断主程序的执行,通过在中断服务程序中编写显示清零程序,可以很精确的实现0-50000的计数。而用定时器/计数器模式时有可能在计数满50000时显示不能及时清零,造成这种现象的原因主要是外部脉冲频率太大,程序来不及对每个脉冲进行处理。因此非中断模式要受到外部脉冲的限制,考虑到现实中有些情况下脉冲频率也可能会很大,故本程序及下面的出租车计费器均采用中断模式,把计数清零语句放到中断服务程序中,以保证能精确实现0-50000的计数。 源程序: /*程序功能:此程序为计数器1接受外部脉冲实现0-50000自动计数,计数快慢由外部脉冲的大小决定说明:主要硬件设备:6位共阳极数码管。*/#includereg51.h /头文件unsigned char code led_num10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /数码管显示数字的十六进制代码unsigned char code led_bit6=0xf8,0xf9,0xfa,0xfb,0xfc,0xfd; /位选代码/*函数名称:延时子程序函数*/void delay(unsigned int dat)unsigned int k,j;for(k=0;kdat;k+)for(j=0;j=0x51) /第50001个脉冲来临时将计数器清零th1=0x00; tl1=0x00;temp=th1; temp=temp8; /将th1中数字左移8位再赋给temp temp=temp|tl1; /将th1和tl1中数据合到一个整形变量temp中led0=temp%10; /存取个位数字led1=temp%100/10; /存取十位数字led2=temp%1000/100; /存取百位数字led3=temp%10000/1000; /存取千位数字led4=temp/10000; /存取万位数字 for(j=0;j10;j+) /在显示上消耗时间,使三个数码管显示不中断for(i=0; i 5; i+) p2=led_biti; /把ledi表示的位置的位选通 p0=led_numledi; /把相应位置的数显式出来 delay(1); /延时一个微小时 proteus仿真效果图图2.2、50000计数器仿真效果图2.3、出租车计费设计:设计思路:出租车计费器的设计可在0-50000计数器的基础上扩充改写而成。出租车上安装有一个霍尔传感器,车子轮胎每转动一圈,霍尔传感器便产生一个脉冲。因此计数脉冲跟轮胎有直接的对应关系,考虑到车轮是按一定的规格生产的,在此我们将车程(汽车行驶距离)与车轮的直径及计数脉冲数联系起来。因此车程可用计数脉冲的个数表示出来,因而车程的显示可转化为计数器显示问题。而车程与收费之间的数学关系在设计要求中已明确。我采用6位数码管来显示车程和收费。其中前三个数码管显示车程,后三个数码管显示收费。特别指出最好用中断处理计数脉冲数的临界值,否则很容易不能达到预期目标。/*程序功能:此为一个出租车计费器,计数器接受外部脉冲自动计数,在两千米 以内收费5元,之后每 500m刷新一次计费,每500米收费0.8元。数码管前三位显示里程数,显示精确到0.1km; 数码管后三位显示价钱,从低位到高位一次表示角,元,十元。 说明:车子的轮胎直径用宏定义,方便根据不同车型修改参数,用软件仿真时为了更快看到结果,可将车的轮胎直径参数设的小一点。*/#includereg51.h /c51头文件#define pi 3.14159 /宏定义圆周率为3.14159#define dia 1.0 /宏定义出租车轮胎的直径为1.0米unsigned char code led_num10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /数码管显示数字的十六进制代码unsigned char code led_bit6=0xf8,0xf9,0xfa,0xfb,0xfc,0xfd; /位选代码/*函数名称:延时子程序*/void delay(unsigned int dat) /延时大小由形参的大小决定 unsigned int k,j; for(k=0;kdat;k+) for(j=0;j=0xed) /第9709个脉冲来临时将计数器清零 th1=0x00;tl1=0x00;money=0; /计费清零 temp=th1; temp=temp0)&(way=2.0) money=5.0; /两千米之内收费5元 else cnt=2*(way-2); /将超出2km部分转化为0.5km的整数倍并存于cnt中 money=cnt*0.8+5; /算出应收的费用并存于money中 wap=money*10; /将收费数据转化为整形,最低位表示角,其次为元,十元 tab=way*10; /将路程数据转化为整形,最低位表示百米,其次表示千米,万米 led0=wap%10; /角位上的数字存led0 led1=wap%100/10; /得出元位上的数字 led2=wap/100; /得出十元位上的数字 led3=tab%10; /得出百米上的数字 led4=tab%100/10; /得出千米上的数字 led5=tab/100; /得出万米上的数字 for(j=0;j10;j+) /在显示上消耗时间,使三个数码管显示不中断 for(i=0; i 6; i+) p2=led_biti; /把ledi表示的位置的位选通 if(i=1)|(i=4) p0=led_numledi&0x7f; /把相应位置的数显式出来,带小数点 else p0=led_numledi; /把相应位置的数显式出来,不带小数点 delay(1); /延时一个微小时间 proteus仿真效果图注:高三位数码管显示车程,最低位表示百米;低三位数码管显示收费,最低位表示角图1.2、出租车计费仿真效果图三、单片机最小系统硬件资源介绍: 89s51单片机; 6位共阳极数码管; 段码驱动器74hc573,位选译码器74hc138; 4路独立式按键; 外部晶振电路; isp下载接口(in system program,在系统编程); dc+5v电源试配器(选配); isp下载线(选配)。单片机最小系统实训板硬件资源分布见图1元件布局图和图2电路原理图:其中p1为外部电源输入座(dc+5v),s8为电源最小系统的电源开关,e1和c3为电源滤波,去耦电容。d1为系统电源指示灯。j2为isp下载接口,s7系统复位按键。cry1,c1,c2为外部时针电路。ic1为89s51(dip-40),左上角为第一脚。pre1,pre2。为上拉排阻(阻值4.7k10k)。j5,j9,j6,j10分别对应单片机的p0,p1,p2,p3口。便于二次开发。6路共阳极数码管动态显示电路,p0口通过74hc573(起驱动和隔离作用,让电流通过74ch573流入公共地),来控制数码管的8路段码,p20-p22通过74hc138译码器(使用其中的6路)控制数码管的公共端(中间还有三极管做驱动器)。这样设计的理由:为了保证该单片机最小系统的二次开发的资源充足和合理性。如果单只做一个动态显示电路,可以省去74hc573,和74hc138。图3.1 元件布局图图3.2 单片机最小系统原理图四、课程设计总结这次单片机课程设计历时两周,是一次把理论融于实践的教学行动。基于我们基础还比较薄弱,这次课程设计老师给我们布置了三个设计课题,分别是0-255计数器,0-50000计数器以及出租车计费器。这三个课题都是定时器/计数器接收外部脉冲实现计数,程序设计层层相扣,由浅入深。255计数器设计是这次课程设计最简单的一道程序题,它也是后续程序设计的基础。由于255计数器数据显示范围是0-255,所以由定时器t1的tli寄存器就可完全实现计数。定时器有四种工作方式,它们都可以满足255计数要求(工作方式3只能用定时器t0),为了设计方便,老师建议使用定时器t1工作方式2(计数器自动重装初值)。老师又说不使用中断也可完全实现编程要求,而且告诉了我们数模转换的方法,并帮我们理清了设计思路,这样我们编程基本上不存在什么难点。 50000计数器设计比255计数器设计要难一点,也是这次课程设计比较关键的一环。50000计数器只能使用定时器工作方式1(16位计数器),这里需要处理16位数字,用汇编语言编程,在这里将是一个难点,用教科书中双字节除法运算程序显然程序冗长晦涩,不适合这种课程设计。在这里我们先把th1和tl1中的数据分别用数模转换按位先分离,再采用满十向高位进一的办法解决。在这次设计中我采用c51语言编程,定义一个双字节整形变量,很简单解决了装下th1和tl1中总共两个字节数据并实现数模转换的问题。由于16位计数器最大计数范围为0-65535,所以在设计50000计数器的时候要注意计数满50000显示清零。 出租车计费器可在计数50000的程序上修改而成。在这里我们要明白车子轮胎每转一圈,霍尔传感器发送一次脉冲,计数器接受脉冲计数加一。由此我们可得出车程与轮胎直径及计数器计数值三者之间的关系,从而由计数器计数转换为车程,并将车程用数码管显示出来。另一个问题是找出计费与车程的关系,这在题目中已经给出。最后还要注意当计费显示达到最大值时要将数码管显示清零。由上可以知道已将出租车计费器转换为计数问题,从而使问题得到圆满解决。 编程思路虽然理清了,但在编程过程中的一些细节问题还是要引起足够的重视
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国气压维护装置行业投资前景及策略咨询研究报告
- 拉萨师范高等专科学校《用户体验与交互设计》2023-2024学年第二学期期末试卷
- 郑州科技学院《日语新闻听力》2023-2024学年第二学期期末试卷
- 湖南司法警官职业学院《英语短篇小说佳作欣赏》2023-2024学年第二学期期末试卷
- 江苏医药职业学院《成型技术基础》2023-2024学年第二学期期末试卷
- 2025某建筑劳务分包合同
- 索鞍安装施工方案
- 2025绿化工程供料合同范本
- 2025年“1+N”全景式假期成长实践作业设计模板
- 2025至2030年中国铁艺货架数据监测研究报告
- 五一劳动节假期安全教育培训课件
- 基础工程课程设计任务书及例题
- 道德与法治五年级下册-5 建立良好的公共秩序(课件)
- 慢性支气管炎临床诊疗指南
- GB/T 20446-2022木线条
- YY/T 0165-2016热垫式治疗仪
- YS/T 922-2013高纯铜化学分析方法痕量杂质元素含量的测定辉光放电质谱法
- GB/T 818-2016十字槽盘头螺钉
- GB/T 6026-2013工业用丙酮
- 新教科版五下科学2.2《用浮的材料造船》课件
- 最新个人简历模板封面可直接下载使用(word版)
评论
0/150
提交评论