单片机转速表程序设计课设.doc_第1页
单片机转速表程序设计课设.doc_第2页
单片机转速表程序设计课设.doc_第3页
单片机转速表程序设计课设.doc_第4页
单片机转速表程序设计课设.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计设计题目: 转速表程序设计 1.设计主要内容及要求;编写转速表程序。要求:1)利用转速传感器实现转速测量。 2) 设置超速值并予以显示。 3) 实现分段测量。2.对设计论文撰写内容、格式、字数的要求;(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。(2).学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。课程设计论文的结构及各部分内容要求可参照沈阳工程学院毕业设计(论文)撰写规范执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。(3).论文要求打印,打印时按沈阳工程学院毕业设计(论文)撰写规范的要求进行打印。(4). 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。3.时间进度安排;顺序阶段日期计 划 完 成 内 容备注11月4日教师讲解题目,学生查阅相关资料21月5日查阅相关资料、进行方案论证31月6日确定频率测量的分段方法41月7、8、11日编写程序51月12、13日调试程序61月14日撰写论文71月15日验收作品、答辩转速表 课程设计成绩评定表 指 导 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分调研论证能独立查阅文献,收集资料;能制定课程设计方案和日程安排。0.15432工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作, 0.25432工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。0.25432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.55432指导教师评审成绩(加权分合计乘以12) 分加权分合计指 导 教 师 签 名: 年 月 日评 阅 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分查阅文献查阅文献有一定广泛性;有综合归纳资料的能力0.25432工作量工作量饱满,难度适中。0.55432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.35432评阅教师评审成绩(加权分合计乘以8)分加权分合计评 阅 教 师 签 名: 年 月 日课 程 设 计 总 评 成 绩分中文摘要转速表是机械行业必备的仪器之一,用来测定电机的转速、线速度或频率。常用于电机、电扇、造纸、塑料、化纤、洗衣机、汽车、飞机、轮船等制造业。转速测量在国民经济的的各个领域,都是必不可少的。转速检测仪表可分为离心式转速表、磁性转速表、电动式转速表、磁电式转速表、闪光式转速表、电子式转速表、离心式转速表等。转速传感器从原理上分,有磁电感应式、光电效应、式、霍尔效应式、磁阻效应式、介质电磁感应式等。另外间接测量转速的转速传感器:如加速度传感器,位移传感器等等。测速发电机和某些磁电传感器在线性区域,可以直接通过交流有效值转换,来测量速度;大多数都输出脉冲信号。针对脉冲信号测量转速的方法有:频率积分法和频率运算法。随着电子技术的发展,现在大多数采用电子数字式转速表,常见的是由光电或霍尔传感器获取信号,通过对脉冲进行计数而推算出转速,并由数字显示器件直接显示,单位为r/s,即每秒多少转。本文用C8051F020单片机的两个定时器/计数器来实现转速测量,用单片机电子计数法测量频率有测频率法和测周期法两种方法。测量频率主要是在单位定时时间里对被测信号脉冲进行计数。定时和计数功能最终都是通过计数来实现的,若计数的事件源是周期固定的脉冲,则可以实现定时功能,否则只能实现计数功能。以8051内部振荡器输出的时钟脉冲信号作为计数信号去触发定时器T0开始定时,再用一个外加脉冲源去触发计数器T1开始计数。然后查看在T0定时在我设定的时间范围内计数器T1所计的数,根据公式f=N/T计算出被测信号的频率,然后单片机把频率换算成转速并通过液晶显示屏显示出来。关键词 单片机,转速表,定时器,显示器,转速传感器目录课程设计(论文)任务书课程设计(论文)成绩评定表中文摘要61设计任务描述81.1设计题目81.2 设计要求81.2.1 设计目的81.3 基本要求82 设计思路92.1实现转速的测量和功能的实现92.2 频率分段测量的实现92.3转速表的速度液晶显示功能的实现93 设计流程图104 各部分程序设计114.1 主程序114.2 中断6,中断7124.1.1中断6、7初始化程序124.1.2中断6、7程序服务子程序124.3 定时器T0中断124.4 液晶显示部分134.4.1 十六进制转换成十进制数134.4.2 液晶显示145程序的调试176工作过程分析186.1 主程序186.2中断6,中断7186.3定时器T0中断186.4液晶显示部分187参数计算207.1定时器T0定时时间计算:20小结21致谢22参考文献23附 录241设计任务描述1.1设计题目 转速表程序设计1.2 设计要求1.2.1 设计目的1)学会使用定时器/计数器来定时和计数。2)能熟练的利用外部中断来实现某功能。3)学会使用液晶显示器。1.3 基本要求1)利用转速传感器实现转速测量。 2) 设置超速值并予以显示。 3) 实现分段测量。2 设计思路2.1实现转速的测量和功能的实现 转速的测量是通过两个定时器/计数器T0和T1来实现的,用T1作为外部计数器,T0作为定时器,查看在T0分别定时在10ms、20ms范围内计数器T1所计的数,用定时器T0的中断子程序使T1停止计数,然后根据公式f=N/T计算出被测信号的频率,知道了被测信号的频率就可以推算出相应的转速。2.2 频率分段测量的实现 频率的分段测量是利用中断6的服务子程序来实现的,我所设计的程序是以10ms的定时时间为基准的,要想实现频率的分段测量,我就选择了中断6来实现定时时间为20ms的测量。中断6里定时器设置的初值为10ms,用R3作为循环的次数,循环2次就可以达到20ms的定时了,所以按下k3就是定时在10ms时间内的频率的测量。这样就实现了频率的分段测量。2.3转速表的速度液晶显示功能的实现为了使转速表的速度更直观的展现在使用者的面前,我在这个程序中添加了液晶显示部分。液晶显示器中显示的内容是计数器T1中所计的数,我选择的计数器是16位计数器,由TH0的高8位和TL0的低8位组成,但是在我设计的程序中只用了它的低8位,我把计数器中低8位的数转换为十进制的数之后分别存放在7a,7b,7c,7d单元里,然后再调用液晶显示程序,把这四个单元中的数显示出来。通过调节外加脉冲源显示器显示的数也会随之变化。3 设计流程图图3.1主程序关看门狗定时器赋初值交叉开关和通用I/O口初始化开总中断、定时器中断;开启定时器和计数器使计数器停止计数工作把计数器所计的数存起来并转换为十进制的数调用液晶显示程序显示相应的转速定时器T0和中断6的中断入口地址设置定时器/计数器的工作方式4 各部分程序设计4.1 主程序main:mov wdtcn,#0deh mov wdtcn,#0adh mov tmod,#51h mov tl1,#00h mov th1,#00h mov tl0,#0fh mov th0,#0d8h mov r2,#02h mov r3,#02h mov xbr0,#00h mov xbr1,#08h mov xbr2,#40h mov eie2,#30h setb ea setb et0 setb tr0 setb et1 setb tr1 lcall show clr f0 wait: jb f0,show sjmp wait在主函数之前先设置定时器T0和外部中断6的中断入口,然后再编写主程序,在主函数最起初先禁止看门狗程序,然后设置定时器T0和T1的工作方式,他们的工作方式是由特殊功能寄存器TMOD所决定的,TMOD是8位的特殊功能寄存器,高四位用于设置T1的工作方式,低四位用于设置T0的工作方式,我设置的MOV TMOD #51H,是想选择T0是十六位定时,T1是十六位计数,并且选择外部输入脉冲作为计数器的计数脉冲源。然后设置定时器和计数器的初值,再使能T1外部引脚,使能交叉开关,允许外部中断6和外部中断7,使能外部总中断 ,开定时器T0中断,开启定时器T0,开计数器T1中断,开启计数器,以上这些过程都是依次设计的。4.2 中断6,中断74.1.1中断6、7初始化程序int67_int: mov eie2,#30h mov p3if,#00h Ret4.1.2中断6、7程序服务子程序int6: mov p3if,#00h mov tmod,#51h mov th0,#0d8h mov tl0,#0f0h mov r3,#2 reti int7: mov p3if,#00h setb p3.5lcall delayreti中断6是用来实现定时为20ms的功能,首先进行中断6,中断7初始化,mov eie2,#30h是允许外部中断6和外部中断7。mov p3if,#00h是设置用下降沿来触发外部中断6的工作。按下K3之后,CPU就会暂当前的工作,转去中断6的服务程序,完成定时为20ms的定时,等程序处理完毕后,再回到原来被中断的地方,继续原来的工作。中断7是用来停止报警的,一旦我所计的数的百位超过2,系统就会产生报警,如果不加任何处理,报警声会一直持续,所以在这里我用外部中断7来使报警声停止报警。4.3 定时器T0中断t0: mov th0,#0d8h mov tl0,#0f0h djnz r2,intout clr tr1clr tr0setb f0lcall delaymov th1,#00hmov tl1,#00hsetb tr1setb tr0 mov a,r3 mov r2,a reti intout:mov th0,#0d8h mov tl0,#0f0hreti定时器T0中断子程序时是让计数器停止计数的,在此程序的开始先给定时器赋初值,然后根据当定时器T0定时时间达到时,关闭计数器T1,同时也关闭定时器T0,在关闭计数器的同时把计数器标志位置成1,然后延时一段时间再开启定时器和计数器,与此同时给计数器的初使值设置为0。4.4 液晶显示部分4.4.1 十六进制转换成十进制数show: mov a,tl1mov b,#100div abmov 7ch,amov 7dh,bmov a,7dhmov b,#10hdiv abmov 7dh,amov 7eh,bmov 7ah,#0在计数器中我只选用了它的低8位的数取出来去显示,我把取出来的数先存放在寄存器a中,由于寄存器a中的数是十六进制数,所以我把它化成了十进制的数,先用a中的数去除以一百,把所得的商存放在7ch单元中,再把所得的商存放在7dh单元中,然后把7dh单元中的数给a,再用a中的数除以10,然后把商送给7dh,余数给7eh单元,这样我就实现了十六进制到十进制的转换,百位的数存放在7ch单元中,十位的数存放在7dh单元中,个位的数存放在7eh单元中。4.4.2 液晶显示rep: lcall delay lcall lcdinit mov dptr, #ncddata mov r4, #0eH line1: clr a movc a, a+dptr inc dptr mov p7,a mov p6, #05H mov p6, #04H lcall delay djnz r4, line1 mov p7, #0c0H mov p6, #01H mov p6, #00H lcall delay mov dptr, #netdata mov r4, #04Hline2:clr a inc dptr movc a, a+dptrmov r1, amov a,r1 add a,#30Hmov p7, a mov p6, #05H mov p6, #04H lcall delay djnz r4,line2 lcall delay ljmp waitportinit: clr a mov xbr0, a mov p74out, #0f0H retlcdinit: lcall delay mov p7, #38H mov p6, #01H mov p6, #00H lcall delay mov p7, #0eH mov p6, #01H mov P6, #00H lcall delay mov p7, #06H mov p6, #01H mov p6, #00H lcall delay mov p7, #01H mov p6, #01H mov p6, #00H lcall delay ret 液晶显示部分,我设置的第一行是静态显示的,显示的内容是“转速是”,这三个字一共是10个英文字母,用r4来控制第一行显示字母的个数 mov r4, #0eH,用外部指针dptr作为查表的首地址,通过查表把“转速是”这三个字的英文字母就显示出来了。第二行是动态显示部分,这部分我使用了两个地址指针dptr和r1,dptr是用来指向所要查表的首地址,r1是用来指向7ch这个首地址,其实r1所指向的就是7ch,7dh,7eh单元里的数,而我所设置的查表就是让它去查7ch,7dh,7eh单元里的数,如果7ch,7dh,7eh单元里的数改变了,液晶显示器中也会发生相应的而改变。5程序的调试我们编写的每一个程序都需要进行调试,我在设计中遇到了很多困难。首先在分段测量的时候,我选择的定时时间为50ms、1s,这样的时间太长了,由于时间太长就会导致定时的时间还没有结束,计数器计的数已经重复计了好几次,这样就会产生很大的误差的,后来经过同学们的讨论,我缩短了定时器所定的时间。其次在我设计中遇到的问题是,每当计数器所计的数超出我设定的量程时,就会产生报警,这时如果不使程序停止运行,它会一直在报警,后来我想到用中断7去实现停止报警,所以我就编出以下程序:int7: mov p3if,#00h setb p3.5lcall delayreti 最后在我的设计中遇到的最大一个问题是,无论我外加脉冲加一个什么值,液晶显示屏上显示的总是一个固定的数不变,这个问题我几乎调试了将近一周的时间,后来发现很多问题,最开始我是在定时器T0里给计数器T1清零时,马上就又启动了计数器,后来在T1清零之后加了调用延时程序,这样就可以延时一段时间之后再启动计数器了。动态显示刚开始也有问题,最开始只用了一个指针片外指针,后来用了一个指针r1,让它去指向7ch,7dh,7eh单元里的数,再配合着片外指针dptr就实现了动态显示。line2: clr a inc dptr movc a, a+dptrmov r1, amov a,r1add a,#30Hmov p7, a mov p6, #05H mov p6, #04H lcall delay djnz r4,line2 6工作过程分析6.1 主程序在主函数最起初先禁止关门狗程序。然后初始化交叉开关和通用I/O口,打开总使能开关,并把交叉开关使能置1。接着是对扩展中断允许许寄存器EIE2赋值,允许外部中断6和7。端口3中断标志寄存器P3IF赋值,使外部中断6和7检测到下降沿触发。然后设置定时器T0和T1的工作方式,他们的工作方式是由特殊功能寄存器TMOD所决定的,TMOD是8位的特殊功能寄存器,高四位用于设置T1的工作方式,低四位用于设置T0的工作方式,我设置的MOV TMOD #51H,是想选择T0是十六位定时,T1是十六位计数,并且选择外部输入脉冲作为计数器的计数脉冲源。然后设置定时器和计数器的初值,再使能T1外部引脚,使能交叉开关,允许外部中断6和外部中断7,使能外部总中断 ,开定时器T0中断,开启定时器T0,开计数器T1中断,开启计数器。初始化之后等待中断。6.2中断6,中断7首先进行中断6,中断7初始化,mov p3if,#00h是设置用下降沿来触发外部中断6和中断7的工作。中断6是用来实现定时为20ms的功能,按下K3之后,CPU就会暂当前的工作,转去中断6的服务程序,完成定时为20ms的定时,等程序处理完毕后,再回到原来被中断的地方,继续原来的工作。中断7是用来停止报警的,一旦我所计的数的百位超过2,系统就会产生报警,如果不加任何处理,报警声会一直持续,所以在这里我用外部中断7来使报警声停止报警。6.3定时器T0中断定时器T0中断子程序时是让计数器停止计数的,在此程序的开始先给定时器赋初值,然后根据当定时器T0定时时间达到时,关闭计数器T1,同时也关闭定时器T0,在关闭计数器的同时把计数器标志位置成1,然后延时一段时间再开启定时器和计数器,与此同时给计数器的初使值设置为0。6.4液晶显示部分在计数器中我只选用了它的低8位的数取出来去显示,我把取出来的数先存放在寄存器a中,由于寄存器a中的数是十六进制数,所以我把它化成了十进制的数,先用a中的数去除以一百,把所得的商存放在7ch单元中,再把所得的商存放在7dh单元中,然后把7dh单元中的数给a,再用a中的数除以10,然后把商送给7dh,余数给7eh单元,这样我就实现了十六进制到十进制的转换,百位的数存放在7ch单元中,十位的数存放在7dh单元中,个位的数存放在7eh单元中。液晶显示部分,我设置的第一行是静态显示的,显示的内容是“转速是”,这三个字一共是10个英文字母,用r4来控制第一行显示字母的个数 mov r4, #0eH,用外部指针dptr作为查表的首地址,通过查表把“转速是”这三个字的英文字母就显示出来了。第二行是动态显示部分,这部分我使用了两个地址指针dptr和r1,dptr是用来指向所要查表的首地址,r1是用来指向7ch这个首地址,其实r1所指向的就是7ch,7dh,7eh单元里的数,而我所设置的查表就是让它去查7ch,7dh,7eh单元里的数,如果7ch,7dh,7eh单元里的数改变了,液晶显示器中也会发生相应的而改变。7参数计算7.1定时器T0定时时间计算: 假设使用系统时钟的12分频作为计数源,T0工作于方式1,定时时间为10ms确定定时常数为:CT =2L-fosc*T/K=65536-12*106*0.5*10-3/1=55536=D8F0H因此初值应为:TH0=D8H,TL0=F0H参考文献1李光飞 .楼苗然主编.51系列单片机.北京:北京航空航天大学出版社,20032何立民 .单片机高级教程.北京:北京航空航天大学出版社,20003刘迎春.MCS-51单片机原理及应用.北京:清华大学出版社.第1版,20054林占江.电子测量技术.北京:电子工业出版社,20075康华光主编.电子技术 基础(第四版).北京:高等教育出版社,19996周立功.单片机实验与实践教程(三).北京:北京航空航天大学出版社,第1版,2006附 录main:mov wdtcn,#0deh mov wdtcn,#0adh mov tmod,#51h mov tl1,#00h mov th1,#00h mov tl0,#0fh mov th0,#0d8h mov r2,#02h mov r3,#02h mov xbr0,#00h mov xbr1,#08h mov xbr2,#40h mov eie2,#30h setb ea setb et0 setb tr0 setb et1 setb tr1 lcall show clr f0 wait: jb f0,show sjmp waitint6: mov p3if,#00h mov tmod,#51h mov th0,#0d8h mov tl0,#0f0h mov r3,#2 reti int7: mov p3if,#00h setb p3.5lcall delayretit0: mov th0,#0d8h mov tl0,#0f0h djnz r2,intout clr tr1 clr tr0 setb f0 lcall delaymov th1,#00hmov tl1,#00hsetb tr1setb tr0 mov a,r3 mov r2,a reti intout: mov th0,#0d8h mov tl0,#0f0hretishow: mov a,tl1mov b,#100div abmov 7ch,amov 7dh,bmov a,7dhmov b,#10hdiv abmov 7dh,amov 7eh,bmov 7ah,#0rep: lcall de

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论