18 字符液晶显示的频率计.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
18 字符液晶显示的频率计

一、实验内容: 设计一个以单片机为核心的频率测量装置。使用AT89C51单片机的定时器/计数器的定时和计数功能,外部扩展6位LED数码管,要求累计每秒进入单片机的外部脉冲个数,用LED数码管显示出来。 (1)被测频率fx<110Hz,采用测周法,显示频率×××. ×××;fx>110Hz,采用测频法,显示频率××××××。 (2)利用键盘分段测量和自动分段测量。 (3)完成单脉冲测量,输入脉冲宽度范围是100?s~0.1s。 (4)显示脉冲宽度要求如下。 Tx<1000?s,显示脉冲宽度×××。 Tx>1000?s,显示脉冲宽度××××。 测量频率有测频法和测周法两种。 (1)测频法,利用外部电平变化引发的外部中断,测算1s内的波数,从而实现对频率的测定; (2)测周法,通过测算某两次电平变化引发的中断之间的时间,实现对频率的测定。简而言之,测频法是直接根据定义测定频率,测周法是通过测定周期间接测定频率。 理论上,测频法适用于较高频率的测量,测周法适用于较低频率的测量。经过调校,在测量低频信号时,本项目中测频法精度已高于测周法,故舍弃测周法,全量程采用测频法。 二、实验电路及功能说明 以单片机为核心的频率测量装置。使用AT89C51单片机的定时器/计数器的定时和计数功能,外部扩展6位LED数码管,要求累计每秒进入单片机的外部脉冲个数,用LED数码管显示出来。 三、实验程序流程图: 主程序: 子程序: 实验结果分析 心得体会 通过综合实验让我对之前学习的单片机进行了一番新的认识,这就时我有了更深的理解和更熟练的应用。 程序清单 #include reg51.h #include absacc.h #define uchar unsigned char #define uint unsigned int #define WCOMM XBYTE[0X0000] #define RCOMM XBYTE[0X0001] #define WDATA XBYTE[0X0002] #define RDATA XBYTE[0X0003] void BusyWait() { while((RCOMM 0x80))!=0x00; } void Write_Command(uchar cmd) { BusyWait();WCOMM=cmd; } void Write_Data(uchar dat) { BusyWait();WDATA=dat; } void Initialise() { Write_Command(0x30); Write_Command(0x01); Write_Command(0x06); Write_Command(0x0c); } void ShowString(uchar*str) { uchar i=0; Write_Command(0x80); while(str(i)!=\0i16) Write_Data(str(i++)); for( ;i16;i++) Write_Data(); } #include reg51.h #include string.h #define uchar unsigned char #define uint unsigned int uchar code prompt[]= please press k1 and wait for a while,Current Frequency will show on the LCD...; uchar LCD_Disp_Buffer[]=Frequency-----Hz; uchar Count = 0; abit k1=p1^0; void Initialise(); void ShowString(uchar sty[]); void Delay(uchar ms) { uchar i; while(ms--) for (i=0;i120;i++); } void main() { uchar i=0; Initialise(); while(prompt[1]!=\0) { ShowString(prompt+1); i++; Delay(15); } IE=0x8A; TMOD=0x51; TH0=(65536-50000)/256; TL0=(65536-50000)\256; while(1) { if(k1==0) { Delay(10); if(k1==0) { TR1=TR0=1; } } void INT_T0() interrpt 1 { unit Tmp,i; TH0=(65536-50000)/256; TL0=(65536-50000)\256; if(++Count==20) {

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档