单片机转速表程序设计 课设.docx
- 文档编号:10253883
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:25
- 大小:59.51KB
单片机转速表程序设计 课设.docx
《单片机转速表程序设计 课设.docx》由会员分享,可在线阅读,更多相关《单片机转速表程序设计 课设.docx(25页珍藏版)》请在冰点文库上搜索。
单片机转速表程序设计课设
课程设计
设计题目:
转速表程序设计
1.设计主要内容及要求;
编写转速表程序。
要求:
1)利用转速传感器实现转速测量。
2)设置超速值并予以显示。
3)实现分段测量。
2.对设计论文撰写内容、格式、字数的要求;
(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。
(2).学生应撰写的内容为:
中文摘要和关键词、目录、正文、参考文献等。
课程设计论文的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
(3).论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。
(4).课程设计论文装订顺序为:
封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。
3.时间进度安排;
顺序
阶段日期
计划完成内容
备注
1
1月4日
教师讲解题目,学生查阅相关资料
2
1月5日
查阅相关资料、进行方案论证
3
1月6日
确定频率测量的分段方法
4
1月7、8、11日
编写程序
5
1月12、13日
调试程序
6
1月14日
撰写论文
7
1月15日
验收作品、答辩
转速表课程设计成绩评定表
指导教师评审意见
评价
内容
具体要求
权重
评分
加权分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
0.1
5
4
3
2
工作能力
态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,
0.2
5
4
3
2
工作量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
0.2
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以12)
分
加权分合计
指导教师签名:
年月日
评阅教师评审意见
评价
内容
具体要求
权重
评分
加权分
查阅
文献
查阅文献有一定广泛性;有综合归纳资料的能力
0.2
5
4
3
2
工作量
工作量饱满,难度适中。
0.5
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以8)
分
加权分合计
评阅教师签名:
年月日
课程设计总评成绩
分
中文摘要
转速表是机械行业必备的仪器之一,用来测定电机的转速、线速度或频率。
常用于电机、电扇、造纸、塑料、化纤、洗衣机、汽车、飞机、轮船等制造业。
转速测量在国民经济的的各个领域,都是必不可少的。
转速检测仪表可分为离心式转速表、磁性转速表、电动式转速表、磁电式转速表、闪光式转速表、电子式转速表、离心式转速表等。
转速传感器从原理上分,有磁电感应式、光电效应、式、霍尔效应式、磁阻效应式、介质电磁感应式等。
另外间接测量转速的转速传感器:
如加速度传感器,位移传感器等等。
测速发电机和某些磁电传感器在线性区域,可以直接通过交流有效值转换,来测量速度;大多数都输出脉冲信号。
针对脉冲信号测量转速的方法有:
频率积分法和频率运算法。
随着电子技术的发展,现在大多数采用电子数字式转速表,常见的是由光电或霍尔传感器获取信号,通过对脉冲进行计数而推算出转速,并由数字显示器件直接显示,单位为r/s,即每秒多少转。
本文用C8051F020单片机的两个定时器/计数器来实现转速测量,用单片机电子计数法测量频率有测频率法和测周期法两种方法。
测量频率主要是在单位定时时间里对被测信号脉冲进行计数。
定时和计数功能最终都是通过计数来实现的,若计数的事件源是周期固定的脉冲,则可以实现定时功能,否则只能实现计数功能。
以8051内部振荡器输出的时钟脉冲信号作为计数信号去触发定时器T0开始定时,再用一个外加脉冲源去触发计数器T1开始计数。
然后查看在T0定时在我设定的时间范围内计数器T1所计的数,根据公式f=N/T计算出被测信号的频率,然后单片机把频率换算成转速并通过液晶显示屏显示出来。
关键词单片机,转速表,定时器,显示器,转速传感器
目录
课程设计(论文)任务书
课程设计(论文)成绩评定表
中文摘要6
1设计任务描述8
1.1设计题目8
1.2设计要求8
1.2.1设计目的8
1.3基本要求8
2设计思路9
2.1实现转速的测量和功能的实现9
2.2频率分段测量的实现9
2.3转速表的速度液晶显示功能的实现9
3设计流程图10
4各部分程序设计11
4.1主程序11
4.2中断6,中断712
4.1.1中断6、7初始化程序12
4.1.2中断6、7程序服务子程序12
4.3定时器T0中断12
4.4液晶显示部分13
4.4.1十六进制转换成十进制数13
4.4.2液晶显示14
5程序的调试17
6工作过程分析18
6.1主程序18
6.2中断6,中断718
6.3定时器T0中断18
6.4液晶显示部分18
7参数计算20
7.1定时器T0定时时间计算:
20
小结21
致谢22
参考文献23
附录24
1设计任务描述
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
4各部分程序设计
4.1主程序
main:
movwdtcn,#0deh
movwdtcn,#0adh
movtmod,#51h
movtl1,#00h
movth1,#00h
movtl0,#0fh
movth0,#0d8h
movr2,#02h
movr3,#02h
movxbr0,#00h
movxbr1,#08h
movxbr2,#40h
moveie2,#30h
setbea
setbet0
setbtr0
setbet1
setbtr1
lcallshow
clrf0
wait:
jbf0,show
sjmpwait
在主函数之前先设置定时器T0和外部中断6的中断入口,然后再编写主程序,在主函数最起初先禁止看门狗程序,然后设置定时器T0和T1的工作方式,他们的工作方式是由特殊功能寄存器TMOD所决定的,TMOD是8位的特殊功能寄存器,高四位用于设置T1的工作方式,低四位用于设置T0的工作方式,我设置的MOVTMOD#51H,是想选择T0是十六位定时,T1是十六位计数,并且选择外部输入脉冲作为计数器的计数脉冲源。
然后设置定时器和计数器的初值,再使能T1外部引脚,使能交叉开关,允许外部中断6和外部中断7,使能外部总中断,开定时器T0中断,开启定时器T0,开计数器T1中断,开启计数器,以上这些过程都是依次设计的。
4.2中断6,中断7
4.1.1中断6、7初始化程序
int67_int:
moveie2,#30h
movp3if,#00h
Ret
4.1.2中断6、7程序服务子程序
int6:
movp3if,#00h
movtmod,#51h
movth0,#0d8h
movtl0,#0f0h
movr3,#2
reti
int7:
movp3if,#00h
setbp3.5
lcalldelay
reti
中断6是用来实现定时为20ms的功能,首先进行中断6,中断7初始化,moveie2,#30h是允许外部中断6和外部中断7。
movp3if,#00h是设置用下降沿来触发外部中断6的工作。
按下K3之后,CPU就会暂当前的工作,转去中断6的服务程序,完成定时为20ms的定时,等程序处理完毕后,再回到原来被中断的地方,继续原来的工作。
中断7是用来停止报警的,一旦我所计的数的百位超过2,系统就会产生报警,如果不加任何处理,报警声会一直持续,所以在这里我用外部中断7来使报警声停止报警。
4.3定时器T0中断
t0:
movth0,#0d8h
movtl0,#0f0h
djnzr2,intout
clrtr1
clrtr0
setbf0
lcalldelay
movth1,#00h
movtl1,#00h
setbtr1
setbtr0
mova,r3
movr2,a
reti
intout:
movth0,#0d8h
movtl0,#0f0h
reti
定时器T0中断子程序时是让计数器停止计数的,在此程序的开始先给定时器赋初值,然后根据当定时器T0定时时间达到时,关闭计数器T1,同时也关闭定时器T0,在关闭计数器的同时把计数器标志位置成1,然后延时一段时间再开启定时器和计数器,与此同时给计数器的初使值设置为0。
4.4液晶显示部分
4.4.1十六进制转换成十进制数
show:
mova,tl1
movb,#100
divab
mov7ch,a
mov7dh,b
mova,7dh
movb,#10h
divab
mov7dh,a
mov7eh,b
mov7ah,#0
在计数器中我只选用了它的低8位的数取出来去显示,我把取出来的数先存放在寄存器a中,由于寄存器a中的数是十六进制数,所以我把它化成了十进制的数,先用a中的数去除以一百,把所得的商存放在7ch单元中,再把所得的商存放在7dh单元中,然后把7dh单元中的数给a,再用a中的数除以10,然后把商送给7dh,余数给7eh单元,这样我就实现了十六进制到十进制的转换,百位的数存放在7ch单元中,十位的数存放在7dh单元中,个位的数存放在7eh单元中。
4.4.2液晶显示
rep:
lcalldelay
lcalllcdinit
movdptr,#ncddata
movr4,#0eH
line1:
clra
movca,@a+dptr
incdptr
movp7,a
movp6,#05H
movp6,#04H
lcalldelay
djnzr4,line1
movp7,#0c0H
movp6,#01H
movp6,#00H
lcalldelay
movdptr,#netdata
movr4,#04H
line2:
clra
incdptr
movca,@a+dptr
movr1,a
mova,@r1
adda,#30H
movp7,a
movp6,#05H
movp6,#04H
lcalldelay
djnzr4,line2
lcalldelay
ljmpwait
portinit:
clra
movxbr0,a
movp74out,#0f0H
ret
lcdinit:
lcalldelay
movp7,#38H
movp6,#01H
movp6,#00H
lcalldelay
movp7,#0eH
movp6,#01H
movP6,#00H
lcalldelay
movp7,#06H
movp6,#01H
movp6,#00H
lcalldelay
movp7,#01H
movp6,#01H
movp6,#00H
lcalldelay
ret
液晶显示部分,我设置的第一行是静态显示的,显示的内容是“转速是”,这三个字一共是10个英文字母,用r4来控制第一行显示字母的个数movr4,#0eH,用外部指针dptr作为查表的首地址,通过查表把“转速是”这三个字的英文字母就显示出来了。
第二行是动态显示部分,这部分我使用了两个地址指针dptr和r1,dptr是用来指向所要查表的首地址,r1是用来指向7ch这个首地址,其实r1所指向的就是7ch,7dh,7eh单元里的数,而我所设置的查表就是让它去查7ch,7dh,7eh单元里的数,如果7ch,7dh,7eh单元里的数改变了,液晶显示器中也会发生相应的而改变。
5程序的调试
我们编写的每一个程序都需要进行调试,我在设计中遇到了很多困难。
首先在分段测量的时候,我选择的定时时间为50ms、1s,这样的时间太长了,由于时间太长就会导致定时的时间还没有结束,计数器计的数已经重复计了好几次,这样就会产生很大的误差的,后来经过同学们的讨论,我缩短了定时器所定的时间。
其次在我设计中遇到的问题是,每当计数器所计的数超出我设定的量程时,就会产生报警,这时如果不使程序停止运行,它会一直在报警,后来我想到用中断7去实现停止报警,所以我就编出以下程序:
int7:
movp3if,#00h
setbp3.5
lcalldelay
reti
最后在我的设计中遇到的最大一个问题是,无论我外加脉冲加一个什么值,液晶显示屏上显示的总是一个固定的数不变,这个问题我几乎调试了将近一周的时间,后来发现很多问题,最开始我是在定时器T0里给计数器T1清零时,马上就又启动了计数器,后来在T1清零之后加了调用延时程序,这样就可以延时一段时间之后再启动计数器了。
动态显示刚开始也有问题,最开始只用了一个指针片外指针,后来用了一个指针r1,让它去指向7ch,7dh,7eh单元里的数,再配合着片外指针dptr就实现了动态显示。
line2:
clra
incdptr
movca,@a+dptr
movr1,a
mova,@r1
adda,#30H
movp7,a
movp6,#05H
movp6,#04H
lcalldelay
djnzr4,line2
6工作过程分析
6.1主程序
在主函数最起初先禁止关门狗程序。
然后初始化交叉开关和通用I/O口,打开总使能开关,并把交叉开关使能置1。
接着是对扩展中断允许许寄存器EIE2赋值,允许外部中断6和7。
端口3中断标志寄存器P3IF赋值,使外部中断6和7检测到下降沿触发。
然后设置定时器T0和T1的工作方式,他们的工作方式是由特殊功能寄存器TMOD所决定的,TMOD是8位的特殊功能寄存器,高四位用于设置T1的工作方式,低四位用于设置T0的工作方式,我设置的MOVTMOD#51H,是想选择T0是十六位定时,T1是十六位计数,并且选择外部输入脉冲作为计数器的计数脉冲源。
然后设置定时器和计数器的初值,再使能T1外部引脚,使能交叉开关,允许外部中断6和外部中断7,使能外部总中断,开定时器T0中断,开启定时器T0,开计数器T1中断,开启计数器。
初始化之后等待中断。
6.2中断6,中断7
首先进行中断6,中断7初始化,movp3if,#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来控制第一行显示字母的个数movr4,#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系列单片机.北京:
北京航空航天大学出版社,2003
[2]何立民.单片机高级教程.北京:
北京航空航天大学出版社,2000
[3]刘迎春.MCS-51单片机原理及应用.北京:
清华大学出版社.第1版,2005
[4]林占江.电子测量技术.北京:
电子工业出版社,2007
[5]康华光主编.电子技术基础(第四版).北京:
高等教育出版社,1999
[6]周立功.单片机实验与实践教程(三).北京:
北京航空航天大学出版社,第1版,2006
附录
main:
movwdtcn,#0deh
movwdtcn,#0adh
movtmod,#51h
movtl1,#00h
movth1,#00h
movtl0,#0fh
movth0,#0d8h
movr2,#02h
movr3,#02h
movxbr0,#00h
movxbr1,#08h
movxbr2,#40h
moveie2,#30h
setbea
setbet0
setbtr0
setbet1
setbtr1
lcallshow
clrf0
wait:
jbf0,show
sjmpwait
int6:
movp3if,#00h
movtmod,#51h
movth0,#0d8h
movtl0,#0f0h
movr3,#2
reti
int7:
movp3if,#00h
setbp3.5
lcalldelay
reti
t0:
movth0,#0d8h
movtl0,#0f0h
djnzr2,intout
clrtr1
clrtr0
setbf0
lcalldelay
movth1,#00h
movtl1,#00h
setbtr1
setbtr0
mova,r3
movr2,a
reti
intout:
movth0,#0d8h
movtl0,#0f0h
reti
show:
mova,tl1
movb,#100
divab
mov7ch,a
mov7dh,b
mova,7dh
movb,#10h
divab
mov7dh,a
mov7eh,b
mov7ah,#0
rep:
lcalldelay
lcalllcdinit
movdptr,#ncddata
movr4,#0eH
line1:
clra
movca,@a+dptr
incdptr
movp7,a
movp6,#05H
movp6,#04H
lcalldelay
djnzr4,line1
movp7,#0c0H
movp6,#01H
movp6,#00H
lcalldelay
movdptr,#netdata
movr4,#04H
line2:
clra
incdptr
movca,@a+dptr
movr1,a
mova,@r1
adda,#30H
movp7,a
movp6,#05H
movp6,#04H
lcalldelay
djnzr4,line2
lcalldelay
ljmpwait
portinit:
clr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机转速表程序设计 课设 单片机 转速表 程序设计