简易频率计设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

U
i
为输入的周期信号,经过比较和整形电路后将其变为周期脉冲
信号送入 T0 引脚计数使用。
上图为电路信号发生器部分以及 LF393 比较器调节信号
整体参考图如下:
实际仿真电路显示图如下:
实际仿真电路显示图如下 4、系统软件设计 本系统的软件设计分为主程序、LCD 显示驱动程序、T1 25ms 定时中断服务程序和 T0 计数溢出中断服务程序 4 个部分。 为了方便管理和调试, 将整个程序分成两个模块程序文件, 分别是主模块 main.c 和液晶显示模块 LCD1602.c。液晶显示模块 LCD1602 可以单独调试, 仿真成功后将这两个文件加入到同一个项目中,并建立液晶显示模块 LCD1602.c 文件的 .h
TMOD=0x15; x=12/24.00; y=25000/x; z=65536-y; time1_H=z/256; time1_L=z%256; TH1=time1_H; TL1=time1_L; TR1=1; TH0=0; TL0=0; TRO=1; } void main(void) { unsigned char i; unsigned char str[6]={0,0,0,0,0,0}; init_lcd(); t0_t1_init(); ET1=1; ET0=1; EA=1; cont_25=0; T0_num=0; flag_1s=0; disp_str(0,5,"Frequency is:"); while(1) { if(flag_1s==1) { for(i=6;i>0;i--) { str[i-1]=fdata%10+0x30; fdata=fdata/10; } disp_str(1,5,str); flag_1s=0; } delay_s(200); } } /*液晶显示驱动模块 LCD1602.c 程序*/ #include <reg51.h> #include <intrins.h>
(2) 、T1 25ms 定时中断服务程序 系 统 时 钟 为 24MHz , 机 器 周 期 为 0.5us , 最 大 定 时 时 间 为
65536 0.5us 32.768ms ,我们选用的定时时间为 25ms,定时中断 40 次即可实现 1s 定 时,T1 中断服务程序的流程图如下:
参考文献
1.张顺兴 . 数字电路与系统设计 . 第 1 版 . 南京:东南大学出版社,2004 2.邹其洪 . 电工电子实验与计算机仿真 . 第 1 版 . 北京:电子工业出版社, 2003.9 3.王玉秀 . 电工电子基础实验 . 第 1 版 . 南京:东南大学出版社,2006 4.孙肖子 . 模拟电子技术基础 . 第 1 版 . 西安:西安电子科技大学出版社, 2001.1 5.谢自美 . 电子线路设计•实验•测试 . 第 2 版 . 武昌:华中科技大学出版社, 2000.7 6.张豫滇 . 电子电路课程设计 . 第 1 版 . 南京:河海大学出版社,2005.8 7.高玉芹. 单片机原理与应用及编程技术.北京 .机械工业出版社 2011.6
} void init_lcd(void) { lcd_cmd(0x01); lcd_cmd(0x3c); lcd_cmd(0x0C); } void disp_str(uchar x,uchar y,uchar *p) { if(x==0) lcd_cmd(0x80+y); else lcd_cmd(0xc0+y); while(*p) lcd_data(*p++); } /*液晶显示驱动模块 LCD1602.h*/ #define uchar unsigned char void init_lcd(void); void disp_str(uchar x,uchar y,uchar *p);
湖北民族学院理学院
测试与传感技术课程设计
设计题目:
简易频率计设计
ຫໍສະໝຸດ Baidu姓 学 专
名: 号: 业:
胡 嗣 维 021240*** 物 理 学 杨 老 师
指导老师:
2015 年 7 月 5 日
简易数字频率计的设计
实验目标:设计一个简易的数字频率计,能实时测量周期信号的频率,并将结果显示出 来,频率测量范围为 0~1MHz
#define uchar unsigned char #define uint unsigned int sbit RS=P1^7; sbit RW=P1^6; sbit E=P1^5; sfr LCDDATA=0x80; sbit RDY=LCDDATA^7; void lcd_cmd(uchar cmd) { LCDDATA=cmd; RS=0; RW=0; E=1; _nop_(); E=0; while(1) { LCDDATA=0xff; RS=0; RW=1; E=0; _nop_(); E=1; if(RDY==0) break; } } void lcd_data(uchar dat) { LCDDATA=dat; RS=1; RW=0; E=1; _nop_(); E=0; while(1) { LCDDATA=0xff; RS=0; RW=1; E=0; _nop_(); E=1; if(RDY==0) break; }
首先根据行号和列号发出写入地址命令, 然后将指针变量指向的字符串发写入数据命令, 将 数据显示在 LCD 上。 五、实验误差分析: 本次试验要求频率稳定, 因此测量频率的结果可能由于实验材料的精度不够而有所误差
主程序: /*主函数 main.c*/ #include <reg51.h> #include <stdio.h> #include <LCD1602.h> unsigned char time1_H,time1_L; unsigned char cont_25; unsigned char time0_H,time0_L; unsigned char T0_num=0; unsigned long fdata; sbit bdata flag_1s; void delay_s(unsigned char n) { unsigned char i; for(i=0;i<n;i++); } /*定时器 T1 25ms 中断服务程序,40 次中断为 1s*/ void Time1_int(void) interrupt 3 { TH1=time1_H; TL1=time1_L; cont_25++; if(cont_25>39) { cont_25=0; TR0=0; time0_H=TH0; time0_L=TL0; TH0=0;TL0=0; TR0=1; fdata=(time0_H*256+time0_L)+T0_num*65536; T0_num=0; flag_1s=1; } } /*T0 中断函数,当技术超出 65536 溢出时,中断*/ void Time0_int(void)interrupt 1 { T0_num++; } void t0_t1_init(void) { float x; unsigned int idata y,z;
(3) 、T0 计数溢出中断服务程序 T0 设置为计数器工作方式,初值为 0,如果输入周期信号频率很高,在 1s 时间内 T0 计数到 65536 就会溢出,因此在 T0 计数溢出中断服务程序中要统计溢出的次数,在 1s 的计数值即为频率=T0 的溢出次数×65536+当前读出的 T0 计数值。 ( 4) 、LCD 显示程序 LCD1602 显示程序流程图如下:
总体方案
1.频率测量基本原理 数字频率计的主要功能是测量周期信号的频率。频率是单位时间内(1s)信号发生周期变 化的次数。如果能在给定的 1s 时间内对周期信号进行计数,并将计数结果显示出来,就实 现了对被测信号的频率测量。 2 实现方法 单片机 AT89S51 内部具有两个 16 位定时/计数器,如果用 T0 对外界周期信号进行计数, T1 作为定时器产生 1s 的定时中断, 在 T1 的定时中断服务程序中读取 T0 的计数值, 即可实 现频率的测量。由于测量的频率范围是 0~1000000Hz(1MHz) ,根据单片机对外部信号的计 数需要两个机器周期才能识别一个脉冲, 所以外部计数脉冲的频率应该小于振荡频率的 1/24. 所以选择 24MHz 才能实现频率测量范围为 0~1000000Hz(1MHz) 。如果系统的频率测量范 围更大,则可以在周期脉冲信号接入 T0 引脚前加分频电路即可。 3 系统硬件设计 系统硬件连接电路图如图所示。系统比较简单,数据处理量不大,因此选用 AT89S51 作为 控制系统的核心。其特点是低功耗、高性能的 CMOS 单片机。AT89S51 单片机采用静态时 钟方式,时钟频率为 0~33MHz。本次我们采用的是 24MHz 的工作频率。频率测量没有大量 的运算和暂存数据,现有的 128B 片内 RAM 已经满足要求,因此不必要外扩片外 RAM。系 统选用 LCD1602 显示频率,因为系统外扩的元件先对比较少,LCD1602 采用 I/O 并行接口 方式和单片机相连。图中
文件,主模块 main.c 包含这个头文件即可(或者在主模块 main.c 中将调用 LCD1602.c 文 件的函数声明为外部函数即可) 。 在不同的应用系统中硬件上单片机和 LCD1602 的连接如果 改变,只需要改变 LCD1602.c 文件中的引脚定义即可。 (1)主程序 主程序首先完成对 T0、T1 和中断的初始化,然后开放中断并启用 T0、T1 工作;接下 来判断 1s 定时时间是否已到, 1s 定时时间到则将计数值处理后送到 LCD 显示器显示。 主程 序流程图如下:
相关文档
最新文档