单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于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, 下载次数: 595)


评分

参与人数 4黑币 +65 收起 理由
326636983 + 5 很给力!
ls13579 + 5 牛!
249796790 + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
249796790 发表于 2018-7-12 21:07 | 只看该作者
作者做的很详细,新手表示找到救命稻草了
回复

使用道具 举报

板凳
lczyzr 发表于 2018-10-10 12:03 | 只看该作者
作者做的很详细!
回复

使用道具 举报

地板
乾坤 发表于 2018-10-10 14:30 | 只看该作者
非常好,很实用!
回复

使用道具 举报

5#
vcfang 发表于 2018-10-10 15:55 来自手机 | 只看该作者
很详细还得慢慢研究
回复

使用道具 举报

6#
1628235666 发表于 2018-10-30 12:12 | 只看该作者
刚刚试过 特别好用 如果用12M晶振 可以测下限130HZ 上限16MHZ   估计改成24M晶振 可以测的更高
回复

使用道具 举报

7#
流年藕 发表于 2018-11-3 15:09 | 只看该作者
做的十分详细了,可以一步步看明白
回复

使用道具 举报

8#
586486 发表于 2018-12-9 21:40 | 只看该作者
谢谢分享,非常好的学习资料。
回复

使用道具 举报

9#
entice321 发表于 2018-12-22 19:44 | 只看该作者
感谢楼主
回复

使用道具 举报

10#
wswa 发表于 2019-2-28 20:31 | 只看该作者
感谢楼主
回复

使用道具 举报

11#
zgf123456 发表于 2019-3-5 18:10 | 只看该作者
感谢楼主
回复

使用道具 举报

12#
sylmm 发表于 2019-3-7 08:51 | 只看该作者
很给力的资料
回复

使用道具 举报

13#
RYLM123123 发表于 2019-3-21 21:05 | 只看该作者
很详细哦
回复

使用道具 举报

14#
无敌中华小子 发表于 2019-3-21 21:17 | 只看该作者
感谢了楼主
回复

使用道具 举报

15#
凌冰啊 发表于 2019-3-26 09:09 来自手机 | 只看该作者
谢谢啊
回复

使用道具 举报

16#
774388942 发表于 2019-3-31 10:37 | 只看该作者
谢谢分享
回复

使用道具 举报

17#
浮云般飘散 发表于 2019-4-9 10:33 | 只看该作者
感谢分享
回复

使用道具 举报

18#
北极光123 发表于 2019-4-13 14:41 | 只看该作者
本帖最后由 北极光123 于 2019-4-13 22:18 编辑

感谢楼主
回复

使用道具 举报

19#
北极光123 发表于 2019-4-13 22:19 | 只看该作者

感谢楼主
回复

使用道具 举报

20#
小七七七 发表于 2019-4-14 17:01 | 只看该作者
感谢分享
回复

使用道具 举报

21#
小七七七 发表于 2019-4-14 17:06 | 只看该作者
感谢分享
回复

使用道具 举报

22#
jacki 发表于 2019-4-26 19:11 | 只看该作者
实用啊
回复

使用道具 举报

23#
hanmeiqi 发表于 2019-5-4 12:20 | 只看该作者
可以好好研究一下
回复

使用道具 举报

24#
jacki 发表于 2019-5-5 18:08 | 只看该作者
这里的74HC393芯片在这里就是计数用吗?
回复

使用道具 举报

25#
zhuchengzhou 发表于 2019-5-13 10:14 | 只看该作者
很专业嘛
回复

使用道具 举报

26#
zhuchengzhou 发表于 2019-5-13 10:15 | 只看该作者
谢谢楼主,可惜没有黑比下载
回复

使用道具 举报

27#
ftj 发表于 2019-5-13 22:14 来自手机 | 只看该作者
感谢楼主
回复

使用道具 举报

28#
嵌入单芯 发表于 2019-5-14 10:35 | 只看该作者
谢谢楼主
回复

使用道具 举报

29#
dada3966 发表于 2019-5-15 00:05 | 只看该作者
非常的棒
回复

使用道具 举报

30#
dada3966 发表于 2019-5-15 00:05 | 只看该作者
非常非常的棒
回复

使用道具 举报

31#
llj99127 发表于 2019-5-16 18:40 | 只看该作者
为什么仿真不了呀楼主
回复

使用道具 举报

32#
ETETT 发表于 2019-6-6 16:51 | 只看该作者
谢谢楼主分享,这个找了很久了,太需要了
回复

使用道具 举报

33#
a929301750 发表于 2019-6-12 13:05 | 只看该作者
感谢楼主分享 谢谢
回复

使用道具 举报

34#
HearingWings 发表于 2019-6-12 14:54 | 只看该作者
这个代码正确吗
回复

使用道具 举报

35#
byxiao 发表于 2019-6-14 02:42 来自手机 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

36#
liuleiniubi 发表于 2019-6-18 08:50 | 只看该作者
不错  这个程序可以
回复

使用道具 举报

37#
清风清酒 发表于 2019-6-30 16:44 | 只看该作者
小新找到迷茫的方向了,感谢
回复

使用道具 举报

38#
林一游 发表于 2019-7-1 14:41 | 只看该作者
牛,太牛了。
回复

使用道具 举报

39#
winkle 发表于 2019-7-12 13:19 | 只看该作者
做的真不错,很有帮助
回复

使用道具 举报

40#
sjwjwj 发表于 2019-7-12 15:23 | 只看该作者
很好用。
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

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