找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8567|回复: 3
打印 上一主题 下一主题
收起左侧

具有放大整形电路的简易数字频率计单片机课程设计报告及全套资料下载

[复制链接]
跳转到指定楼层
楼主
具有放大整形电路的简易数字频率计,有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所示。




仿真电路图及结果:

单片机源程序如下:
  1. /*=======================================================
  2. <<<<<<<<<<<<<<<<<<< 爱普雷德技术团队 >>>>>>>>>>>>>>>>>>>>
  3. <<<<<<<<<<<<<<<<<<< 我们一起追求卓越 >>>>>>>>>>>>>>>>>>>>
  4. ---------------------------------------------------------
  5. ---------------------------------------------------------
  6.                All right reserved.2013.01
  7. ---------------------------------------------------------
  8. 文件名: digitron_drv.c
  9. 描述: 数码管模块c文件
  10. 作者:
  11. =========================================================
  12. -----------------------------------------------------------------------------------------------------------*/
  13. #include "digitron_drv.h"

  14. code uint8 Segment[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  15. code uint8 Select[] = {0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

  16. /**********************************************
  17. 功能:
  18.     输出位选字节和段码字节
  19. 输入参数:
  20.     SelectByte:  位选字节
  21.     SegmentByte: 段码字节
  22. 输出参数:
  23.     无
  24. 返回值:
  25. **********************************************/
  26. static void DigOutput(uint8 SelectByte, uint8 SegmentByte)
  27. {
  28.     uint8 i;
  29.    
  30.         DIG_SHCP = 0;
  31.         DIG_STCP = 0;

  32.         for(i=0; i<8; i++)
  33.         {
  34.             if(SegmentByte&0x80)
  35.         {
  36.                 DIG_DATA = 1;
  37.         }
  38.                 else
  39.         {
  40.                     DIG_DATA = 0;
  41.         }
  42.                 _nop_();
  43.                 DIG_SHCP = 1;
  44.                 _nop_();
  45.                 DIG_SHCP = 0;
  46.                 _nop_();
  47.                 SegmentByte <<= 1;
  48.         }
  49.         for(i=0; i<8; i++)
  50.         {
  51.             if(SelectByte&0x80)
  52.                 DIG_DATA = 1;
  53.                 else
  54.                     DIG_DATA = 0;
  55.                 _nop_();
  56.                 DIG_SHCP = 1;
  57.                 _nop_();
  58.                 DIG_SHCP = 0;
  59.                 _nop_();
  60.                 SelectByte <<= 1;
  61.         }
  62.         DIG_STCP = 1;
  63.         _nop_();
  64.         DIG_STCP = 0;
  65.         _nop_();
  66. }

  67. /**********************************************
  68. 功能:
  69.     在某位显示自定义段码
  70. 输入参数:
  71.     DigSelect: 数码管位选择(1——8,即最右到最左)
  72.     CustomSeg: 自定义段码值
  73. 输出参数:
  74.     无
  75. 返回值:
  76. **********************************************/
  77. void DigShowCustom(uint8 DigSelect, uint8 CustomSeg)
  78. {
  79.     if(0<DigSelect<9)
  80.     {
  81.         DigOutput(Select[DigSelect],CustomSeg);
  82.     }
  83. }

  84. /**********************************************
  85. 功能:
  86.     在某位显示数字
  87. 输入参数:
  88.     DigSelect: 数码管位选择(1——8,即最右到最左)
  89.     Number:    数字(0——9)
  90.     Dp:        小数点(1:显示;0:不显示)
  91. 输出参数:
  92.     无
  93. 返回值:
  94. **********************************************/
  95. void DigShowNumber(uint8 DigSelect, uint8 Number, bit Dp)
  96. {
  97.     if((0<DigSelect<9)&&(Number<10))
  98.     {
  99.         if(Dp)
  100.             {
  101.             DigOutput(Select[DigSelect],(Segment[Number]&~0x80));
  102.             }
  103.             else
  104.             {
  105.             DigOutput(Select[DigSelect],(Segment[Number]|0x80));
  106.             }
  107.     }
  108. }


  109. ……………………

  110. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
简易数字频率计(单片机课程设计).zip (4.92 MB, 下载次数: 266)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:661037 发表于 2019-12-31 16:27 | 只看该作者
请问怎么创建select目标
回复

使用道具 举报

板凳
ID:854025 发表于 2020-12-3 20:26 | 只看该作者
这个我为什么运行不出来,显示cpu过载,里面的参数该怎么设置
回复

使用道具 举报

地板
ID:854025 发表于 2020-12-3 20:50 | 只看该作者
为什么我运行显示cpu过载
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表