找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简易数显频率计数器的设计PPT课件+仿真+单片机源码

[复制链接]
跳转到指定楼层
楼主
单片机频率计数器的设计ppt课件内容预览:

1.掌握单片机的工作原理,最小系统的设计,外部中断和
     定时中断。
2、了解数字频率计测频率与测周期的基本原理;熟练掌握
     数字频率计的设计与调试方法。
3、掌握3.掌握C51编写中断程序。
4、掌握PROTEUS仿真,烧写器的使用,硬件电路设计、焊
     接、装配,培养学生利用单片机技术解决生活中的实际
     问题的能力。

一、任务描述
1、设计一个能够计数和计时的产品,测量1s内的脉冲个数即
      频率计,利用单片机外部中断和定时中断。
2、利用Keil C 软件编写主函数、外部中断和定时中断C程序
      代码。
3、测量信号:方波 ;正弦波;三角波;采用用液晶显示频率值。
4、测量频率范围: 1Hz到9999Hz之间,要求频率误差小于1%。



1、进行功能分析,工作框架搭建,工作分工。

2、使用软硬件开发平台proteus 7.4进行电路仿真。设计要点:新建电路图设计文件,查找元器件,放置元器件,布局布线,修改元器件属性,进行仿真单片机程序。

3、使用单片机集成开发环境keil C2.0。要点:C程序构成,  关键词,运算符与表达式,数据结构,结构化语句。

4、使用单片机下载软件STC_ISP_V3.3,通过串口或USB将单片机程序下载到单片机芯片中进行调试。

5、完善单片机产品硬件电路,进行合适的电容、电阻、芯片、传感器、显示器件等进行焊接,通电运行后观察硬件电路是否满足要求。

6、完成实验文档编写,包括:题目、作者、摘要、关键词,绪论,硬件电路,软件流程、代码,数据分析。



误差来源:
(1)、单片机计数速率的限制引起误差。因为采用的是12 MHz的晶振,单
        片机最大计数速度为500 kHz,所以当被测信号越接近500 kHz时,
        测量结果与实际频率的误差就越大。而当被测信号大于500 kHz时,
        频率计将测不出信号频率。
(2)、原理上存在±1误差。由于该设计是在计数门限时间1秒内的频率信
       号脉冲数,所以定时开始时的第一个脉冲和定时时间到时的最后一个
        脉冲信号是否被记录,存在随机性。
(3)、晶振的准确度会影响一秒定时的准确度,从而引起测量结果误差。

减小误差措施
(1)、选用频率较高和稳定性好的晶振。
(2)、测量频率低的信号时,可适当调整程序,延长门限时间,减少原理上
        ±1的相对误差。
(3)、测量频率较高的信号时,可先对信号进行分频,再进行测量。

单片机源程序如下:
  1. #include<reg51.h>
  2. #include <stdio.h>
  3. #define uchar unsigned char
  4. uchar display_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
  5. //定义数组存放显示数据的编码
  6. uchar display_data[8]={0,0,0,0,0,0,0,0};   //定义数组存放显示数据的各位
  7. uchar c1,b1;
  8. sbit P1_1=P1^1;
  9. void delay(void)   //延时
  10. {
  11. uchar i;
  12. for(i=500;i>0;i--);
  13. }
  14. void display()   //显示程序
  15. {
  16.   uchar i,k;
  17.   k=0x01;
  18.   for(i=0;i<8;i++)
  19.   {
  20.   P2=0;
  21.   P0=display_code[display_data[i]];
  22.   P2=k;
  23.   k=k<<1;
  24. delay();
  25. }
  26.   P2=0;
  27. }
  28. void convert()  //转换程序
  29. {
  30. uchar i,f2;
  31. long f,f1,k;
  32. f=c1*65536+TH1*256+TL1 ;
  33. f1=f-f%10;                                //此变量是为了让八位LED的高位为0时不显示而设置
  34. for(i=7;i>0;i--)                //此循环将计数值转换为显示数组,从高位到低位依次存放在
  35. //display_data[0]至display_data[7]
  36. {display_data[i]=f%10;
  37. f=f/10;
  38. }
  39.                    display_data[0]=f;
  40. k=1e7;                //从这开始到本子程序结束的语句完成让八位LED的高位为0时不显示
  41. for(i=0;i<7;i++)
  42. {f2=f1/k;
  43. if(f2==0)
  44. {
  45. display_data[i]=10;
  46. k=k/10;
  47. }
  48. }
  49. }
  50. void timer1(void) interrupt 3  //定时器1中断服务程序
  51.    {
  52. c1++;                       
  53.    }
  54. void timer0(void) interrupt 1  //定时器0中断服务程序
  55.    {
  56. TH0=0xb1;                         //装入时间常数
  57. TL0=0xe0;                       
  58. P1_1=!P1_1;                        //P1.1取反,从P1.1引脚输出25Hz的方波信号,通过导线连接
  59. //到P3.5引脚输入,以方便调试程序。若使用其它信号源,则去掉即可。
  60. if (b1==49)
  61. {
  62. convert();
  63. c1=0;                                //将计数值清零
  64. b1=0;
  65. TH1=0;
  66. TL1=0;
  67. }
  68. else b1++;
  69. }
  70. void main(void)  //主函数
  71. {
  72. P1_1=0;
  73. c1=0;
  74. b1=0;
  75. TH1=0;
  76. TL1=0;
  77. TMOD=0x51;
  78. TH0=0Xb1;
  79. TL0=0Xe0;
  80. IE=0x8a;
  81. TCON=0x50;
  82. while(1)
  83. {
  84. display();
  85. }
  86. }

复制代码


所有资料51hei提供下载:
任务2 简易数显频率计数器的设计.rar (986.15 KB, 下载次数: 86)

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

使用道具 举报

沙发
ID:349413 发表于 2018-6-11 14:00 | 只看该作者
有帮助,但还想知道如何拓展测试频率比,周期,时间间隔,占空比,相位
回复

使用道具 举报

板凳
ID:123977 发表于 2019-5-7 10:58 | 只看该作者
挺好的,有帮助
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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