- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于51单片机频率计设计
基于51单片机的频率计的设计;一.方案的设计与比较;以上三种方案比较:第一种方案具有设计复杂度小、电路简洁、功能实用且成本低廉等特点,其稳定性较好基本能满足设计要求。方案二采用单片机处理能较高要求,但成本提高且设计复杂。方案三采用专用频率计设计模块固然设计简单且稳定但系统可扩展性能较差。
综上所述,本课题采用第一种设计方案。
; 二.设计原理与总体方案 ;根据设计要求用单片机的内部定时器0产生基准信号,由INTO输入被测信号,通过定时方式计算被测信号的高电平持续时间。并通过单片机计算得出结果,最后由1062液晶显示器显示测量结果。
频率计的系统设计框架如下图所示 ;三.硬件设计 ;3.1 电平转换电路:;3.2 分频电路:;系统分频电路如下图所示 ;3.3数据选择电路:;3.4单片机系统:;3.5显示电路: ;四. 软件设计:;4.2主程序;其计数工作示意图如下图所示;主程序流程图如下图所示;主程序:
#includereg51.h //头文件
#includestdio.h
#includelcd.c
#includemath.h
sbit p32=P3^2; //P3^2作为信号输入端
main()
{ unsigned int period,k,j,i=0; // period,为定时器计数总值,i是分频次数
float f,m; //浮点变量
char buff[30];
init_LCD(); //初始化LCD
P2=0x00; //选通D0路信号
while(1)
{
TMOD=0X09; //配置定时器0为工作方式1,即16位定时器,并硬件启动
TH0=0; //装定时器初值为0
TL0=0;
while(p32==1); //执行完这条语句后信号电平状态为低电平
TR0=1; //使能TR0;
while(p32==0); //等待信号高电平到来,如果高电平来了则定时器开始计时,如果没来,则继续循环等待。
while(p32==1); //等待信号高电平结束后,如果低电平,则定时器停止计时
TR0=0; //关闭定时器
period=TH0*256+TL0; //计算定时器装的总值
while(period=500) /*判断是否分频及计算分频次数*/ 即频率是否大于1KHZ
{ P2++;
i++;;period=period*10;
if(i==6)
{P2=0x00;
break;
}
}
k=pow(10,i); /* 10的i次方*/
f=(1000000.0/(2*period))*k;
if(f1000)
sprintf(buff,f=%5.2fHZ,f);
else
{m=f/1000.0;
sprintf(buff,f=%5.2fKHZ,m);
}
lcdprintf(0,0,buff);
}
}
显示子程序:
#include lcd.h
char code CGRAM_TABLE[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,// ;年
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, //;月
0x0F,0x09,0x09,0x0F,0x0,0x09,0x0F,0x00}; // ;日
void delay() //延时子程序
{
unsigned char i;
for(i=0;i250;i++);
};void init_LCD() //初始化LCD
{
unsigned char i;
WR_COM=0x38; //设置为8位数据总线,16*2,5*7点阵
for(i=0;i100;i++)
delay();
WR_COM=0x01; //清屏幕
for(i=0;i50;i++)
delay();
WR_COM=0x06; //光标移动,显示区不移动,读写操作后AC加1
for(i=0;i50;i++)
delay();
WR_COM=0x0c;
for(i=0;i50;i++)
delay();
}
/*******************************
文档评论(0)