标题: 基于51单片机的数字频率计(电路图+pcb+论文+仿真+源码) [打印本页]

作者: taczer    时间: 2018-5-2 13:26
标题: 基于51单片机的数字频率计(电路图+pcb+论文+仿真+源码)
基于51单片机的数字频率计
设计的频率计范围能够达到1HZ-1MHZ(实际上51单片机达不到这个范围,不要在实验环境下进行),这个是课设来着,用Proteus仿真实现的,给有需要的同学参考一下

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载).

Altium Designer画的数字频率计电路原理图和PCB图如下:(51hei附件中可下载工程文件)





论文内容截图:


单片机源码:
  1. #include<reg51.h>
  2. #include<stdio.h>
  3. #include<intrins.h>
  4. typedef unsigned char uchar;
  5. typedef unsigned int  uint;
  6. sbit RS=P2^5;
  7. sbit RW=P2^6;
  8. sbit E=P2^7;
  9. sbit CLK=P2^0;
  10. sbit DO=P2^1;
  11. sbit DI=P2^1;
  12. sbit CS=P2^2;
  13. sbit CLR=P3^0;
  14. sbit GATE=P3^1;
  15. sbit K1=P3^7;
  16. uint  num=0;
  17. uint  c=0;
  18. float d=0;
  19. uchar e=1,f=1;
  20. unsigned long int aaa=0,bbb=0;
  21. uchar LCD_wait()//LCD1602内部等待函数
  22. {
  23.         RS=0;
  24.         RW=1;        
  25.         _nop_();
  26.         E=1;
  27.         _nop_();
  28.         E=0;
  29.         return P0;               
  30. }
  31. void LCD_write(bit aa,uchar bb)//向LCD写入命令或数据
  32. {
  33.         E=0;
  34.         RS=aa;
  35.         RW=0;               
  36.         _nop_();
  37.         P0=bb;        
  38.         _nop_();//注意顺序
  39.         E=1;               
  40.         _nop_();//注意顺序
  41.         E=0;               
  42.         _nop_();
  43.         LCD_wait();//LCD1602内部等待函数        
  44. }
  45. void LCD_display(uchar temp)
  46. {
  47.         LCD_write(0,0x08|temp);        
  48. }
  49. void LCD_input(uchar cc)
  50. {
  51.         LCD_write(0,0x04|cc);
  52. }
  53. void LCD_init()//初始化LCD
  54. {
  55.         //RW=0;
  56.         LCD_write(0,0x38);//8位数据端口,2行显示,5*7点阵
  57.         LCD_write(0,0x38);
  58.         
  59.         LCD_write(0,0x0C);//开启显示, 无光标
  60.         LCD_write(0,0x01);//清屏
  61.         LCD_write(0,0x0C);//AC递增,画面不动
  62.         
  63. }
  64. void LCD_sfj1(uchar x,uchar y)
  65. {
  66.         if(y==0)
  67.                 LCD_write(0,0x80|x);
  68.         if(y==1)
  69.                 LCD_write(0,0x80|(x-0x40));
  70. }
  71. void LCD_print(uchar *p)
  72. {
  73.         while(*p!='\0')
  74.         {
  75.                 LCD_write(1,*p);
  76.                 p++;
  77.         }
  78. }
  79. void delay1(uchar x)//ms延时子函数
  80. {                    
  81.     uchar i;
  82.     for(i=0;i<x;i++); //延时,脉冲一位持续的时间
  83. }
  84. uchar start(bit temp) //把模拟电压值转换成8位二进制数并返回,dat为通道选择。
  85. {         
  86.         uchar i,aa=0;
  87.     CS=0;
  88.     DO=0;//片选,DO为高阻态
  89.     delay1(10);
  90.     CLK=0;
  91.     delay1(2);
  92.     DI=1;         
  93.     CLK=1;         
  94.     delay1(2);//第一个脉冲,起始位
  95.     CLK=0;                                          
  96.     delay1(2);                                          
  97.     DI=1;                                          
  98.     CLK=1;                                          
  99.     delay1(2);//第二个脉冲,DI=1表示双通道单极性输入         
  100.     CLK=0;                                                                                 
  101.     delay1(2);                                                                                 
  102.     DI=temp;        /*******************************/                                                                                         
  103.     CLK=1;
  104.     delay1(2);//第三个脉冲,DI=1表示选择通道1(CH2)         
  105.     DI=0;                                                                                   
  106.     DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备
  107.     CLK=1;                                                                                                                                                                                    
  108.     delay1(2);                                                                           
  109.     CLK=0;                                                                           
  110.     delay1(2);//经实验,这里加一个脉冲AD便能正确读出数据,
  111.         //不加的话读出的数据少一位(最低位d0读不出)                  
  112.         for(i=0;i<8;i++)                                                                          
  113.     {
  114.             CLK=1;
  115.                delay1(2);
  116.                CLK=0;
  117.                delay1(2);
  118.                aa=(aa<<1)|DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数
  119.         }
  120.     CS=1;//取消片选,一个转换周期结束
  121.     return(aa);//把转换结果返回
  122. }
  123. uint fenjie(bit cc)
  124. {
  125.         uchar dd;
  126.         uint  ee;
  127.         dd=start(cc);
  128.         ee=(uint)dd*100/51; //51是由5/255的倒数得来的,5是5V,255是8位AD。
  129.         return(ee);
  130. }        
  131. void delay2(uint z)//按键消抖
  132. {
  133.         uint x;
  134.         uchar y;
  135.         for(x=0;x<z;x++)
  136.                 for(y=0;y<110;y++);
  137. }
  138. void delay3()//1s延时子函数            
  139. {
  140.         uchar h,i,j,k;
  141.         for(h=5;h>0;h--)
  142.                 for(i=4;i>0;i--)
  143.                         for(j=116;j>0;j--)
  144.                                 for(k=214;k>0;k--);
  145. }
复制代码
碍于篇幅,上述只有部分代码,其他在压缩包中

论文内容预览:http://www.51hei.com/bbs/dpj-115892-1.html
全部资料51hei下载地址:
基于51单片机数字频率计的设计.zip (984.6 KB, 下载次数: 2082)



作者: 249796790    时间: 2018-7-12 21:07
作者做的很详细,新手表示找到救命稻草了
作者: lczyzr    时间: 2018-10-10 12:03
作者做的很详细!
作者: 乾坤    时间: 2018-10-10 14:30
非常好,很实用!
作者: vcfang    时间: 2018-10-10 15:55
很详细还得慢慢研究
作者: 1628235666    时间: 2018-10-30 12:12
刚刚试过 特别好用 如果用12M晶振 可以测下限130HZ 上限16MHZ   估计改成24M晶振 可以测的更高
作者: 流年藕    时间: 2018-11-3 15:09
做的十分详细了,可以一步步看明白
作者: 586486    时间: 2018-12-9 21:40
谢谢分享,非常好的学习资料。
作者: entice321    时间: 2018-12-22 19:44
感谢楼主
作者: wswa    时间: 2019-2-28 20:31
感谢楼主
作者: zgf123456    时间: 2019-3-5 18:10
感谢楼主

作者: sylmm    时间: 2019-3-7 08:51
很给力的资料
作者: RYLM123123    时间: 2019-3-21 21:05
很详细哦
作者: 无敌中华小子    时间: 2019-3-21 21:17
感谢了楼主
作者: 凌冰啊    时间: 2019-3-26 09:09
谢谢啊
作者: 774388942    时间: 2019-3-31 10:37
谢谢分享

作者: 浮云般飘散    时间: 2019-4-9 10:33
感谢分享
作者: 北极光123    时间: 2019-4-13 14:41
本帖最后由 北极光123 于 2019-4-13 22:18 编辑

感谢楼主

作者: 北极光123    时间: 2019-4-13 22:19

感谢楼主
作者: 小七七七    时间: 2019-4-14 17:01
感谢分享
作者: 小七七七    时间: 2019-4-14 17:06
感谢分享
作者: jacki    时间: 2019-4-26 19:11
实用啊
作者: hanmeiqi    时间: 2019-5-4 12:20
可以好好研究一下

作者: jacki    时间: 2019-5-5 18:08
这里的74HC393芯片在这里就是计数用吗?
作者: zhuchengzhou    时间: 2019-5-13 10:14
很专业嘛
作者: zhuchengzhou    时间: 2019-5-13 10:15
谢谢楼主,可惜没有黑比下载
作者: ftj    时间: 2019-5-13 22:14
感谢楼主
作者: 嵌入单芯    时间: 2019-5-14 10:35
谢谢楼主

作者: dada3966    时间: 2019-5-15 00:05
非常的棒
作者: dada3966    时间: 2019-5-15 00:05
非常非常的棒
作者: llj99127    时间: 2019-5-16 18:40
为什么仿真不了呀楼主
作者: ETETT    时间: 2019-6-6 16:51
谢谢楼主分享,这个找了很久了,太需要了
作者: a929301750    时间: 2019-6-12 13:05
感谢楼主分享 谢谢
作者: HearingWings    时间: 2019-6-12 14:54
这个代码正确吗
作者: byxiao    时间: 2019-6-14 02:42
好资料,51黑有你更精彩!!!
作者: liuleiniubi    时间: 2019-6-18 08:50
不错  这个程序可以
作者: 清风清酒    时间: 2019-6-30 16:44
小新找到迷茫的方向了,感谢
作者: 林一游    时间: 2019-7-1 14:41
牛,太牛了。
作者: winkle    时间: 2019-7-12 13:19
做的真不错,很有帮助
作者: sjwjwj    时间: 2019-7-12 15:23
很好用。
作者: 高山低谷    时间: 2019-7-30 18:36
非常不错,学到了
作者: 1124952194    时间: 2019-8-6 14:52
不能打开?
作者: huatuo    时间: 2019-8-19 14:37
作者做的很详细,新手表示找到救命稻草了
作者: afeiaa    时间: 2019-9-4 16:25
感谢楼主
作者: 9782    时间: 2019-9-18 14:22
很好,感谢楼主
作者: 清风清酒    时间: 2019-10-17 16:54
感谢分享
作者: sxcbiss    时间: 2019-10-25 15:39
给力嗷
作者: 586486    时间: 2019-11-30 20:20
谢谢分享,学习了。
作者: 活跃的万金油    时间: 2019-12-7 17:12
楼主 为啥下载完程序 电路也接好了 屏幕没显示呢
作者: 活跃的万金油    时间: 2019-12-9 00:59
1628235666 发表于 2018-10-30 12:12
刚刚试过 特别好用 如果用12M晶振 可以测下限130HZ 上限16MHZ   估计改成24M晶振 可以测的更高

请问一下  为什么按照电路接好之后 1602只有第一排一行块块呀,没有显示,是正常的吗   以后加入一个输入信号也是没反应的呢  我的晶振是11.0592的 麻烦你啦帮我看看好吗
作者: 乘大风破浪    时间: 2019-12-12 20:22
真的很谢谢楼主,解决了问题,电路还有些看不懂,楼主很棒。

作者: cghe    时间: 2019-12-12 22:28
非常好的资料,感谢分享
作者: 24k纯帅的    时间: 2019-12-13 08:34
很详细,太棒了给新手研究很管用
作者: qq17620639340    时间: 2019-12-16 16:37
楼主你好,我输入程序都搞定后,1602上有waiting 但是之后没有仿真上的没信号时的F=...hz,全是方块,请问下是什么原因?
作者: 962499    时间: 2019-12-16 17:33
感谢大佬
作者: 物业tuan    时间: 2019-12-26 19:13
大家谁知道怎么实现分频?
作者: martian618    时间: 2019-12-27 21:26
做的不错,谢谢分享!
作者: 不朽梦    时间: 2020-1-2 15:06
谢谢楼主
作者: 不朽梦    时间: 2020-1-2 15:09
好棒    很好
作者: 不朽梦    时间: 2020-1-2 15:12
很好  真的好棒
作者: suntt    时间: 2020-1-2 22:30
谢谢,很好
作者: 小江哥哥    时间: 2020-4-5 09:56
很好,不错的东西
作者: jgjbd    时间: 2020-4-6 23:09
感谢感谢,有做出实物的嘛,精度是多少啊
作者: Tempo03    时间: 2020-5-10 17:26
nice!!!!!
作者: frinos    时间: 2020-5-12 18:05
谢谢分享!!!
作者: mxq12123    时间: 2020-5-13 11:33
非常感谢 学习了很多
作者: mxq12123    时间: 2020-5-13 11:33
感谢你的资料,很有帮助
作者: mxq12123    时间: 2020-5-13 11:37
非常感谢,很有帮助的资料
作者: jianghuiasd    时间: 2020-6-6 09:55
大神啊太厉害了叭
作者: jianghuiasd    时间: 2020-6-6 09:57
很好很详细
作者: 陆明松    时间: 2020-6-7 15:07
感谢作者分享的学习资料
作者: 545457415    时间: 2020-6-9 23:54
谢谢分享
作者: 卫中豪    时间: 2020-6-10 12:55
频率计单片机,这下不愁看
作者: duyunyun    时间: 2020-6-14 05:19
....我们要求范围是10HZ-100KHZ   怎么改啊?
作者: duyunyun    时间: 2020-6-14 05:22
...我们要求10HZ-100KHZ 怎么改啊?
作者: 123学习者    时间: 2020-6-17 15:42
进来学习,感谢楼主
作者: hhdsdy    时间: 2020-6-17 23:31
这个和最近DIY了一个简易数字频率计(PCB+电路图+单片机源码+实物制作)极为相似啊
作者: fanfan1234    时间: 2020-6-18 00:58

非常好,很实用!
作者: 黑心莲    时间: 2020-6-19 10:26
做的十分详细了,可以一步步看明白
作者: 111ssss    时间: 2020-6-20 19:45
楼主这个好详细呀

作者: Pauljh    时间: 2020-6-23 18:18
感谢楼主

作者: 包邮拉杆我    时间: 2020-6-26 20:32

很详细还得慢慢研究
作者: sunnywu503    时间: 2020-6-28 02:44
试验中不知道能否防制OK
作者: zhihong    时间: 2020-7-12 22:56
1628235666 发表于 2018-10-30 12:12
刚刚试过 特别好用 如果用12M晶振 可以测下限130HZ 上限16MHZ   估计改成24M晶振 可以测的更高

感谢楼主分享的资料,并且也感谢朋友们的文档,谢谢
作者: 974608483    时间: 2020-7-13 11:00
感谢楼主的分享,51有你更精彩
作者: maple597    时间: 2020-8-7 12:50
这个RP1是什么东西啊
作者: maple597    时间: 2020-8-7 12:58
楼主为什么我照着你这个弄了一个 lcd不显示啊
作者: dr.out    时间: 2020-8-7 13:30
最近正好在学习相关的东西,谢谢楼主!
作者: 立即俩的爹    时间: 2020-10-13 13:06
很实用,感谢作者的分享。

作者: juice12138    时间: 2020-10-23 10:32
谢谢作者!!
作者: a1159900630    时间: 2020-10-24 17:27
这个pcb打印出来  能直接用吗
作者: wbwcf13e    时间: 2020-11-2 19:07
a1159900630 发表于 2020-10-24 17:27
这个pcb打印出来  能直接用吗

图片上的PCB打印出来不能用,必须是扩展名为PCB的文件,而且还在软件里需要设置,然后打印。
作者: 小表弟    时间: 2021-3-24 11:44
怎么修改频率计上限为1m,2m,3m以上或者改为500k
作者: akaichan    时间: 2021-3-24 14:21
樓主好厲害! 要收藏
作者: cmyldd    时间: 2021-10-9 09:08
做得不错的工具
作者: ZOUYUEYUE777    时间: 2021-10-15 14:19
作者做的新手小白都可以看得懂

作者: ZOUYUEYUE777    时间: 2021-10-15 14:21
实用的,可以平常做实验用

作者: 享有生活    时间: 2022-4-11 13:13
很给力,慢慢研究,谢谢分享
作者: iucv    时间: 2022-12-4 19:12
你好,我看了你的数字频率计,在原理图转换成PCB的时候出现了线程出错的情况,不知道是什么原因
作者: 爱电路i    时间: 2023-1-13 23:05
感谢楼主分享,非常的详细、实用。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1