单片机课程设计报告书.doc
- 文档编号:1642172
- 上传时间:2022-10-23
- 格式:DOC
- 页数:10
- 大小:272.50KB
单片机课程设计报告书.doc
《单片机课程设计报告书.doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告书.doc(10页珍藏版)》请在冰豆网上搜索。
基于MCS51的简易数字频率计
学院:
年级:
专业:
学号:
姓名:
指导老师:
一.课程设计的目的及意义
(1)目的:
通过本次课程设计,巩固和加深“单片机原理与应用”中的理论知识,了解和应用dvcc仿真系统,结合软硬件,基本掌握单片机的应用的一般设计方法,提高电子电路的设计和实验能力,并且提高自身查找和运用资料能力
(2)意义:
通过本次课程设计,使得理论知识系统化,从中或得一些实战工作经验,提高个人与团体指挥的作用。
二.课程设计课题:
频率计系统设计:
用AT89C51单片机设计一个六位LED显示的频率计。
三.频率计原理:
本系统采用测量频率法,可将频率脉冲直接连接到AT89C51的T0端,将T/C1用做定时器。
T/C0用做计数器。
在T/C1定时的时间里,对频率脉冲进行计数。
在1S定时内所计脉冲数即是该脉冲的频率。
图1:
测量时序图
由于T0并不与T1同步,并且有可能造成脉冲丢失,所以对计数器T0做一定的延时,以矫正误差。
具体延时时间根据具体实验确定。
四.功能及按键说明
P0.0~P0.5为LED位选择,其中P0.5指向十万位P0.0指向个位,RP1为P0口的上拉电阻。
P2.0~P2.7为LED的段位选择,对应LED的A,B,C,D,E,F,G,DP。
P3.4为待测频率入口。
五.程序流程图
1.主程序main流程图
2.定时50ms中断子程序xtimer1()流程图
3.显示子程序display流程图
六.原理图
图2:
频率计原理图
七.源程序代码
/*简易数字频率计:
T1定时计器,T0计数器,由P34(/T0)口输入待测频率*/
/*T1定时1S,在这1S内T1的计数值就是待测的频率值。
*/
#include
#include
#defineucharunsignedchar//宏定义
#defineuintunsignedint//宏定义
sfr16DPTR=0x82;//定义DPTR
bitstatus_F=1;//状态标志位
uintaa,qian,bai,shi,ge,bb,wan,shiwan;//定义变量
ucharcout;
unsignedlongtemp;//定义长整型变量
/*数码管显示0-9*/
ucharcode
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/*子函数声明*/
voiddelay(uintz);
voidinit();
voiddisplay(uintshiwan,uintwan,uintqian,uintbai,uintshi,uintge);
voidxtimer0();
voidxtimer1();
/*主函数*/
voidmain()
{
P0=0XFF;//初始化P0口
init();//调用定时器,计数器初始化
while
(1)
{
if(aa==19)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
status_F=1;//完成计数
TR1=0;//关闭T1定时槛,定时1S完成
delay(46);//延时较正误差
TR0=0;//关闭T0
DPL=TL0;//计数量的低8位
DPH=TH0;//计数量的高8位
temp=DPTR+cout*65535;//计数值放入变量
shiwan=temp%1000000/100000;
wan=temp%100000/10000;
qian=temp%10000/1000;//显示千位
bai=temp%1000/100;//显示百位
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(shiwan,wan,qian,bai,shi,ge);//调用显示函数
}
}
/*定时器,计数器初始化*/
voidinit()
{
temp=0;//变量赋初值
aa=0;
cout=0;
IE=0X8A;//开中断,T0,T1中断
TMOD=0x15;//T1为定时器工作于方式1,T0为计数器工作于方式1
TH1=0x3c;//定时器赋高8初值,12M晶振
TL1=0xb0;//定时器赋低8初值,12M晶振
TH0=0;//计数器赋高8初值初值
TL0=0;//计数器赋低8初值
TR1=1;//开定时器1
TR0=1;//开计数器0
}
/*显示子函数*/
voiddisplay(uintshiwan,uintwan,uintqian,uintbai,uintshi,uintge)
{
P0=0xdf;//P0口是位选11011111改成11111101==0XDF
P2=table[shiwan];//显示shiwan位
delay(5);
P0=0xef;//P0口是位选11101111改成11111110==0XFE
P2=table[wan];//显示wan位
delay(3);
P0=0xf7;//P0口是位选111101111改成01111111==0X7F
P2=table[qian];//显示千位
delay(3);
P0=0xfb;//P0口是位选11111011改成10111111==0XBF
P2=table[bai];//显示百位
delay(3);
P0=0xfd;//P0口是位选11111101改成11011111==0XDF
P2=table[shi];//显示十位
delay(3);
P0=0xfe;//P0口是位选 11111110改成11101111==0XEF
P2=table[ge];//显示个位
delay(3);
}
/*定时中断子函数*/
voidxtimer1()interrupt3
{
TH1=0x3c;//定时器赋高8初值
TL1=0xb0;//定时器赋低8初值
aa++;
}
/*计数器中断子函数*/
voidxtimer0()interrupt1
{
cout++;
}
/*延时子函数。
延时1MS*/
voiddelay(uintz)
{
uinti,j;
for(i=0;i for(j=0;j<110;j++);//j上限为125 } 八.仿真结果与分析 此简易频率计的特点是由于加入了延时补偿,对于低频率脉冲能够准确计数,对于较高频率,则频率越高,误差越大。 但总体来讲,误差相对较小。 1.在1~3257HZ,测量结果是准确的,如图1所示1HZ,1KHZ,3257HZ的仿真图: 图3: 1HZ,1KHZ,3257HZ的仿真图: 2.在3258HZ~9.5KHZ的时候测量有误差并且慢慢减少。 在3258HZ时候达到最大误差0.03069%,如图。 9.5KHZ时候达到最小误差0.01368%。 如图。 图3: 测量3258HZ的仿真结果 图4: 测量95013HZ的仿真结果 3.从9.6KHZ~999.7629KHZ,测量误差越来越大,在9.6KHZ为0.01458%,在999.7629KHZ时为0.0237% 图5: 测量9.6KHZ的仿真结果 图6: 测量999.7629KHZ的仿真结果 九.课程设计心得体会 在单片机应用系统设计时,必须先确定该系统的技术要求,这是系统设计的依据和出发点,整个设计过程都必须围绕这个技术要求来工作。 在设计时遵循从整体到局部也即自上而下的原则。 把复杂的问题分解为若干个比较简单的、容易处理的问题,分别单个的加以解决。 在设计开始时,我们应根据应用的和设计要求提出设计的总体任务,绘制硬件和软件的总框图。 将总任务分解成可以独立表达的子任务,这些子任务再向下分,直到每个子任务足够简单,能够直接而容易的实现为止。 在程序调试时应按各个功能模块分别调试。 在程序设计时,正确合理的设计是非常重要的,比如说,有些执行程序以实时中断方式调用时,如果不正确的设计,有可能陷入无休止的中断申请,使程序无法正常工作。 正确的程序设计包括程序的结构是否合理,一些循环结构和循环指令的使用是否恰当,能否使用较少的循环次数或较快的指令,是否能把某些延迟等待的操作改为中断申请服务,能否把某些计算方法和查表技术适当简化等。 另外程序的设计要具有可扩展性,程序的结构要标准化,便于阅读、修改和扩充。 通过本次课程设计,我更加地了解和掌握单片机的基本知识和基本的编写程序,也更加深入地了解单片机这么课程,掌握汇编语言的设计和调试方法,熟悉DVCC系统的操作及其功能应用,更加熟悉设计的流程及程序的组合、调用和系统的调试。 在程序设计中,要善于调用或参考已有程序并加以修改,得到自己想要的能够实现硬件系统性能,这样可以节省很多时间,比如说,本次设计中的那个额外增加的功能——脉冲计数,就是调用DVCC实验指导书里的程序并做一些修改而实现的。 九.参考文献 [1]苏家.柏荣,志锋,单片机原理及应用技术,等教育出版社, [2]李群芳,肖看.单片机原理、接口及应用.清华大学出版社. [3]DVCC系列单片机微机仿真实验系统实验指导书(附录) 9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告书