具有放大整形电路的简易数字频率计,有protues仿真代码和Word版实验报告
课程设计报告目录 摘要. I 关键词语. I Abstract I Key words I 前言. 1 第一章 频率计设计. 1 1.1频率计概要. 1 1.2发展动态. 1 1.3设计任务. 1 第二章 系统模块设计. 1 2.1整体设计. 1 2.2测频思路. 1 2.3模块分析. 1 第三章 硬件设计. 1 3.1主控模块. 1 3.2放大整形电路. 1 3.3分频设计. 1 3.4驱动显示. 1 第四章 软件设计. 1 4.1模块设计. 1 4.2中断服务. 1 4.3显示实现过程. 1 4.4量程转换. 1 4.5软件概述. 1 第五章 系统调试. 1 5.1硬件调试. 1 5.2软件调试. 1 5.3系统调试. 1 5.4误差分析. 1 第六章 总结. 1 参考资料. 1 致 谢. 1 附录. 1 设计任务
1.3.1任务
设计一个以单片机为主要控制模块的简易数字频率计。
1.3.2设计要求
(1)基本要求
实现对周期信号的频率进行测量。
测量范围:
信号:三角波、正弦波、方波;
幅度:0.5V~5V;
频率:1Hz~1MHz;
测量误差≤0.1%。
(2)驱动显示部分
用74LS245驱动4位共阳极数码管,以十进制数字显示测量的数据。电源用电池代替。
第二章 系统模块设计
2.1整体设计
在单位时间内对待测信号进行计数,计数值作为信号频率显示在数码管上。本设计用单片机STC80C51制作简易数字频率计,高频段采用外部10分频,低频段直接用单片机计数,实现对1HZ-1MHZ范围的频率测量。显示部分用74LS245驱动四位共阳极数码管,显示测量出来的频率结果。可以测量正弦波、三角波及方波的频率值。
设计的原理框图如图2.1所示。
仿真电路图及结果:
单片机源程序如下:
- /*=======================================================
- <<<<<<<<<<<<<<<<<<< 爱普雷德技术团队 >>>>>>>>>>>>>>>>>>>>
- <<<<<<<<<<<<<<<<<<< 我们一起追求卓越 >>>>>>>>>>>>>>>>>>>>
- ---------------------------------------------------------
- ---------------------------------------------------------
- All right reserved.2013.01
- ---------------------------------------------------------
- 文件名: digitron_drv.c
- 描述: 数码管模块c文件
- 作者:
- =========================================================
- -----------------------------------------------------------------------------------------------------------*/
- #include "digitron_drv.h"
- code uint8 Segment[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- code uint8 Select[] = {0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- /**********************************************
- 功能:
- 输出位选字节和段码字节
- 输入参数:
- SelectByte: 位选字节
- SegmentByte: 段码字节
- 输出参数:
- 无
- 返回值:
- **********************************************/
- static void DigOutput(uint8 SelectByte, uint8 SegmentByte)
- {
- uint8 i;
-
- DIG_SHCP = 0;
- DIG_STCP = 0;
- for(i=0; i<8; i++)
- {
- if(SegmentByte&0x80)
- {
- DIG_DATA = 1;
- }
- else
- {
- DIG_DATA = 0;
- }
- _nop_();
- DIG_SHCP = 1;
- _nop_();
- DIG_SHCP = 0;
- _nop_();
- SegmentByte <<= 1;
- }
- for(i=0; i<8; i++)
- {
- if(SelectByte&0x80)
- DIG_DATA = 1;
- else
- DIG_DATA = 0;
- _nop_();
- DIG_SHCP = 1;
- _nop_();
- DIG_SHCP = 0;
- _nop_();
- SelectByte <<= 1;
- }
- DIG_STCP = 1;
- _nop_();
- DIG_STCP = 0;
- _nop_();
- }
- /**********************************************
- 功能:
- 在某位显示自定义段码
- 输入参数:
- DigSelect: 数码管位选择(1——8,即最右到最左)
- CustomSeg: 自定义段码值
- 输出参数:
- 无
- 返回值:
- **********************************************/
- void DigShowCustom(uint8 DigSelect, uint8 CustomSeg)
- {
- if(0<DigSelect<9)
- {
- DigOutput(Select[DigSelect],CustomSeg);
- }
- }
- /**********************************************
- 功能:
- 在某位显示数字
- 输入参数:
- DigSelect: 数码管位选择(1——8,即最右到最左)
- Number: 数字(0——9)
- Dp: 小数点(1:显示;0:不显示)
- 输出参数:
- 无
- 返回值:
- **********************************************/
- void DigShowNumber(uint8 DigSelect, uint8 Number, bit Dp)
- {
- if((0<DigSelect<9)&&(Number<10))
- {
- if(Dp)
- {
- DigOutput(Select[DigSelect],(Segment[Number]&~0x80));
- }
- else
- {
- DigOutput(Select[DigSelect],(Segment[Number]|0x80));
- }
- }
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
简易数字频率计(单片机课程设计).zip
(4.92 MB, 下载次数: 266)
|