- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机原理 课程结业报告
题目(11):数字频率计
学号:K031241711
姓名: 崔明
设计要求
1.完成单脉冲测量,输入脉冲宽度范围是100s~0.1s。
2.使用AT89C51单片机的定时器/计数器的定时和计数功能,外部扩展6位LED数码管,要求累计每秒进入单片机的外部脉冲个数,用LED数码管显示出来。
3.要求
(1)被测频率fx<110Hz,采用测周法,显示频率×××.?×××;fx>110Hz,采用测频法,显示频率××××××。
(2)利用键盘分段测量和自动分段测量。
(3)完成单脉冲测量,输入脉冲宽度范围是100s~0.1s。
(4)显示脉冲宽度要求如下。Tx<1000s,显示脉冲宽度×××。Tx>1000s,显示脉冲宽度××××。
设计原理
测量频率有测频法和测周法两种。
(1)测频法,利用外部电平变化引发的外部中断,测算1s内的波数,从而实现对频率的测定;
(2)测周法,通过测算某两次电平变化引发的中断之间的时间,实现对频率的测定。简而言之,测频法是直接根据定义测定频率,测周法是通过测定周期间接测定频率。
理论上,测频法适用于较高频率的测量,测周法适用于较低频 率的测量。
经过调校,在测量低频信号时,本项目中测频法精度已高于测 周法,故舍弃测周法,全量程采用测频法。
设计电路图
核心代码设计思路及程序流程图
该系统主要由6部分组成:测试部分,定时部分,复位部分,时钟频率产生部分,处理部分和显示部分。其中测试部分是由单片机INTO口的输入中断来完成;定时部分由单片机内的TO定时器产生一秒的定时;复位部分是通过按压式开关向单片机的RST引脚输入高电平使单片机复位;时钟频率产生部分是由一块12MHz晶振和两块30pF的电容组成,产生机器周期为1us;处理部分是通过单片机内的处理程序把从测试部分得出的数据进行处理,最后送给LED数码管显示;显示部分是由LED数码管组成的,显示出单片机中经处理后的最后的数据,即外部脉冲频率。
Proteus仿真图
调试过程中,首先调试程序,使用KEIL编写的c程序存在一些错误,可以通过KEIL的查错功能进行检查,再改正。当然有些错误会“莫名其妙”,这时候可以问问其他人,也可以上网查证。其次是调试硬件,调试硬件可以通过PROTEUS仿真软件模拟,这也可以验证程序是否正确。焊好的电路板也会存在一些错误。
Keil核心源代码
#include
#define uint unsigned int
#define uchar unsigned char
uchar code tabledu[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
uint counter=0,t0=0;
unsigned long int pinlv;
int a0,a1,a2,a3,a4,a5;
void delay_ms(uint z)
{
}
void display()
{
a0=pinlv%10;
a1=pinlv%100/10;
a2=pinlv%1000/100;
a3=pinlv%10000/1000;
a4=pinlv%100000/10000;
a5=pinlv/100000;
if(pinlv=110) {while(1) { P0=0xfe;P2=tabledu[a0];delay_ms(1); P0=0xfd;P2=tabledu[a1];delay_ms(1); P0=0xfb;P2=tabledu[a2];delay_ms(1); uint x,y; for(x=z;x0;x--) { } for(y=10;y0;y--); { ; }
P0=0xf7;P2=tabledu[a3];delay_ms(1); P0=0xef;P2=tabledu[a4];delay_ms(1); P0=0xdf;P2=tabledu[a5];delay_ms(1);
}
} else if(pinlv110) {while(1) { P0=0xfe;P2=tabledu[0];delay_ms(1); P0=0xfd;P2=tabledu[0];delay_ms(1); P0=0xfb;P2=tabledu[0];delay_ms(1); P0=0xf7;P2=tabledu[a0]|0x80;delay_ms(1); P0=0xef;P2=tabledu[a1];delay_ms(1); P0=0xdf;P2=tabledu[a2];delay_ms(1); } } }
void main() {
TMOD=0x01; TH0=(65536-1000)/256;
文档评论(0)