单片机频率测量课程实习报告Word文档下载推荐.docx
《单片机频率测量课程实习报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机频率测量课程实习报告Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
1.测量频率方法分析…………………………………………………4
2.频率计数分析………………………………………………………4
(二)频率计模块电路设计………………………………………………5
1.电路连接图…………………………………………………………5
2.根据实际连接图,编写数码管编码………………………………5
(三)实验器材的选择分析………………………………………………5
1.STC89C52芯片……………………………………………………5
2.单位(共阴极)数码管…………………………………………5
3.74AHCT573N锁存器………………………………………………5
五、实习总结……………………………………………………………………5
附件1:
频率计模块电路调试图
附件2:
频率源模块调试图
附件3:
频率计模块程序代码
附件4:
频率源模块程序代码
数字频率计
一、实习目的
(一)设计题目:
一个以单片机为核心的频率测量装置,并用LED数码管显示出频率。
(二)实验要求
设计一个以单片机为核心的频率测量装置。
使用AT89C51单片机的定时器/计数器的定时和计数功能,外部扩展LED数码管,要求累计每秒进入单片机的外部脉冲个数,用LED数码管显示出来。
二、实习时间
2011年12月16日
三、实习地点
福建农林大学东方学院6#603
四、实习内容
(一)实验原理分析
1.测量频率方法分析
(1)测量频率有测频法和测周法两种。
①测频法,利用外部电平变化引发的外部中断,测算1s内的波数,从而实现对频率的测定;
②测周法,通过测算某两次电平变化引发的中断之间的时间,实现对频率的测定。
简而言之,测频法是直接根据定义测定频率,测周法是通过测定周期间接测定频率。
(2)理论上,测频法适用于较高频率的测量,测周法适用于较低频率的测量。
(3)经过调校,在测量低频信号时,本项目中测频法精度已高于测周法,故舍弃测周法,全量程采用测频法。
2.频率计数分析
采用T1作为计数器进行计数,T1为16位计数器,所以一次可以计数65536次,在本实验中采用四个数码管显示和每一秒读一次TH1和TL1中的数值,所以最高计数频率为65.536KHZ,满足四位数码管0~9.999KHZ检测和显示。
(二)频率计模块电路设计
1.电路连接图
2.根据实际电路连接,编写数码管编码
序号
编码
0x7E
5
0xE6
1
0x12
6
0xeE
2
0xBC
7
0x32
3
0xB6
8
0xfe
4
0xD2
9
0xF6
(三)实验器材的选择分析
1.STC89C52芯片
2.四个单位(共阴极)数码管,由于只用STC89C52芯片驱动数码管时,驱动电流很好弱,数码管亮度很暗,所以我选择了74AHCT573N锁存器来驱动数码管。
3.74AHCT573N锁存器,锁存器输出的电流足够驱动数码管。
五、实习总结
通过这次单片机课程实习,我学会了更灵活地使用电烙铁来焊接电路,并且对单片机和其他外围芯片有了更加深入的了解和应用,学会了如何去选择芯片让电路更加稳定有效。
而且在程序和电路运行和调试时,让我对一些常见错误的错调试能力有了很大的提高。
通过这次单片机课程实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我的创新精神,从而不断地战胜自己,超越自己。
创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
同时,要衷心地感谢罗老师的耐心指导和帮助。
经过这次的课程设计也给我带来了许多灵感,大大的开阔了自己的视野,我想对今后的学习和工作都会有很大的帮助,这次的课程实习也为今后的课程设计和毕业设计做了一个很好的铺垫。
频率计检测出50HZ的频率
频率计检测出100HZ的频率
频率计检测出782HZ的频率
P2^0输出50HZ的频率
P2^0
输出100HZ的频率
输出800HZ的频率
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitD=P2^4;
ucharcodetable[]={0x7E,0x12,0xBC,0xB6,0xD2,
0xE6,0xeE,0x32,0xfe,0xF6};
uintshu;
ucharnum1,num2;
voiddelay_ms(uinta)
{
inti;
for(a;
a>
0;
a--)
for(i=110;
i>
i--);
}
voiddisplay(uintshu)
uintqian,bai,shi,ge;
qian=shu/1000;
bai=shu%1000/100;
shi=shu%100/10;
ge=shu%10;
P2=0Xfe;
P1=0x00;
D=1;
P1=table[qian];
D=0;
delay_ms
(1);
P2=0Xfd;
P1=table[bai];
P2=0Xfb;
P1=table[shi];
P2=0Xf7;
P1=table[ge];
voidmain()
TMOD=0X51;
ET0=1;
ET1=1;
EA=1;
TR0=1;
TR1=1;
while
(1)
{
display(shu);
}
voidT0_time()interrupt1
uinta1;
a1++;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
if(a1==20)
a1=0;
TR1=0;
num1=TH1;
num2=TL1;
shu=num1*256+num2;
TH1=0X00;
TL1=0X00;
voidT1_time()interrupt3
TH1=0X00;
TL1=0X00;
sbitdula=P2^6;
sbitwela=P2^7;
sbitlcdrs=P3^5;
sbitlcden=P3^4;
sbits1=P3^1;
//功能键
sbits2=P3^2;
//增大键
sbits3=P3^3;
//减小键
sbitrd=P3^7;
//设置成键盘公共端
sbitpinlv=P2^0;
sbitbeep=P2^3;
floatshu2,shu3;
uintshu,shu1;
ucharcount,s1num;
charge,shi,bai,qian,wan,swan;
ucharcodetable[]="
pinlv:
"
;
ucharcodetable1[]="
HZ"
uinti,j;
for(i=a;
i--)
for(j=110;
j>
j--);
voiddi()//蜂鸣器
beep=0;
delay_ms(10);
beep=1;
voidwrite_com(ucharcom)//液晶写命令
lcdrs=0;
P0=com;
lcden=0;
lcden=1;
voidwrite_data(uchardat)//液晶写数据
lcdrs=1;
P0=dat;
voidwrite_shu(ucharadd,uchardat)
write_com(0x80+0x40+add);
//设置显示位置
write_data(0x30+dat);
//write_data(dat);
voidinit()
ucharnum;
TMOD=0x01;
TH0=shu1/256;
TL0=shu1%256;
//TR0=1;
rd=0;
//设置成键盘公共端为低
wela=0;
//让数码管不显示
dula=0;
//液晶使能端
ge=0;
shi=0;
bai=0;
qian=0;
wan=0;
swan=0;
count=0;
s1num=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x40);
//设置显示初始坐标
for(num=0;
num<
6;
num++)
write_data(table[num]);
delay_ms(5);
write_com(0x80+0x40+12);
//显示HZ
2;
write_data(table1[num]);
write_shu(11,ge);
write_shu(10,shi);
write_shu(9,bai);
write_shu(8,qian);
write_shu(7,wan);
write_shu(6,swan);
voidkeyscan()
if(s1==0)
if(s1==0)
{
s1num++;
//功能键按下的次数
while(!
s1);
//等被释放
di();
//响一下
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+11);
//按下第一次
write_com(0x0f);
//光标开始闪烁
}
if(s1num==2)
write_com(0x80+0x40+10);
if(s1num==3)
write_com(0x80+0x40+9);
if(s1num==4)
write_com(0x80+0x40+8);
if(s1num==5)
write_com(0x80+0x40+7);
if(s1num==6)
write_com(0x80+0x40+6);
if(s1num==7)
write_com(0x0c);
//按下第四次取消闪烁
shu=swan*100000+wan*10000+qian*1000+bai*100+shi*10+ge;
shu2=11059200/24;
shu3=shu2/shu;
shu1=65536-shu3;
//shu1=65536-(11059200/12/shu);
TH0=shu1/256;
TL0=shu1%256;
}
if(s1num!
=0)//只有功能键按下后
if(s2==0)//加
delay_ms(5);
if(s2==0)
while(!
s2);
//等待释放
if(s1num==1)
{
ge++;
if(ge>
=10)
ge=0;
write_shu(11,ge);
//每调节一次就刷新显示
//重新回到调节位置
}
if(s1num==2)
{
shi++;
if(shi>
shi=0;
write_shu(10,shi);
write_com(0x80+0x40+10);
if(s1num==3)
bai++;
if(bai>
bai=0;
write_shu(9,bai);
write_com(0x80+0x40+9);
if(s1num==4)
qian++;
if(qian>
qian=0;
write_shu(8,qian);
write_com(0x80+0x40+8);
if(s1num==5)
wan++;
if(wan>
wan=0;
write_shu(7,wan);
write_com(0x80+0x40+7);
if(s1num==6)
swan++;
if(swan>
swan=0;
write_shu(6,swan);
write_com(0x80+0x40+6);
}
}
}
if(s3==0)//减
if(s3==0)
s3);
ge--;
if(ge<
0)
ge=9;
shi--;
if(shi<
shi=9;
bai--;
if(bai<
bai=9;
qian--;
if(qian<
qian=9;
wan--;
if(wan<
wan=9;
swan--;
if(swan<
swan=9;
init();
keyscan();
pinlv=~pinlv;