找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 38091|回复: 99
收起左侧

基于51单片机的数字频率计(电路图+pcb+论文+仿真+源码)

  [复制链接]
ID:196106 发表于 2018-5-2 13:26 | 显示全部楼层 |阅读模式
基于51单片机的数字频率计
设计的频率计范围能够达到1HZ-1MHZ(实际上51单片机达不到这个范围,不要在实验环境下进行),这个是课设来着,用Proteus仿真实现的,给有需要的同学参考一下

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载).
1.png
Altium Designer画的数字频率计电路原理图和PCB图如下:(51hei附件中可下载工程文件)
0.png 0.png


0.png

论文内容截图:
0.jpg 0.jpg

单片机源码:
  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, 下载次数: 2025)

评分

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

查看全部评分

回复

使用道具 举报

ID:370518 发表于 2018-7-12 21:07 | 显示全部楼层
作者做的很详细,新手表示找到救命稻草了
回复

使用道具 举报

ID:407469 发表于 2018-10-10 12:03 | 显示全部楼层
作者做的很详细!
回复

使用道具 举报

ID:407522 发表于 2018-10-10 14:30 | 显示全部楼层
非常好,很实用!
回复

使用道具 举报

ID:407513 发表于 2018-10-10 15:55 来自手机 | 显示全部楼层
很详细还得慢慢研究
回复

使用道具 举报

ID:226878 发表于 2018-10-30 12:12 | 显示全部楼层
刚刚试过 特别好用 如果用12M晶振 可以测下限130HZ 上限16MHZ   估计改成24M晶振 可以测的更高
回复

使用道具 举报

ID:420124 发表于 2018-11-3 15:09 | 显示全部楼层
做的十分详细了,可以一步步看明白
回复

使用道具 举报

ID:418213 发表于 2018-12-9 21:40 | 显示全部楼层
谢谢分享,非常好的学习资料。
回复

使用道具 举报

ID:452047 发表于 2018-12-22 19:44 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:482379 发表于 2019-2-28 20:31 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:151626 发表于 2019-3-5 18:10 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:243793 发表于 2019-3-7 08:51 | 显示全部楼层
很给力的资料
回复

使用道具 举报

ID:495685 发表于 2019-3-21 21:05 | 显示全部楼层
很详细哦
回复

使用道具 举报

ID:427430 发表于 2019-3-21 21:17 | 显示全部楼层
感谢了楼主
回复

使用道具 举报

ID:351489 发表于 2019-3-26 09:09 来自手机 | 显示全部楼层
谢谢啊
回复

使用道具 举报

ID:501358 发表于 2019-3-31 10:37 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:406947 发表于 2019-4-9 10:33 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:431981 发表于 2019-4-13 14:41 | 显示全部楼层
本帖最后由 北极光123 于 2019-4-13 22:18 编辑

感谢楼主
回复

使用道具 举报

ID:431981 发表于 2019-4-13 22:19 | 显示全部楼层

感谢楼主
回复

使用道具 举报

ID:511752 发表于 2019-4-14 17:01 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:511752 发表于 2019-4-14 17:06 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:522481 发表于 2019-4-26 19:11 | 显示全部楼层
实用啊
回复

使用道具 举报

ID:526888 发表于 2019-5-4 12:20 | 显示全部楼层
可以好好研究一下
回复

使用道具 举报

ID:522481 发表于 2019-5-5 18:08 | 显示全部楼层
这里的74HC393芯片在这里就是计数用吗?
回复

使用道具 举报

ID:536706 发表于 2019-5-13 10:14 | 显示全部楼层
很专业嘛
回复

使用道具 举报

ID:536706 发表于 2019-5-13 10:15 | 显示全部楼层
谢谢楼主,可惜没有黑比下载
回复

使用道具 举报

ID:537421 发表于 2019-5-13 22:14 来自手机 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:416322 发表于 2019-5-14 10:35 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:538489 发表于 2019-5-15 00:05 | 显示全部楼层
非常的棒
回复

使用道具 举报

ID:538489 发表于 2019-5-15 00:05 | 显示全部楼层
非常非常的棒
回复

使用道具 举报

ID:537270 发表于 2019-5-16 18:40 | 显示全部楼层
为什么仿真不了呀楼主
回复

使用道具 举报

ID:556663 发表于 2019-6-6 16:51 | 显示全部楼层
谢谢楼主分享,这个找了很久了,太需要了
回复

使用道具 举报

ID:560802 发表于 2019-6-12 13:05 | 显示全部楼层
感谢楼主分享 谢谢
回复

使用道具 举报

ID:560917 发表于 2019-6-12 14:54 | 显示全部楼层
这个代码正确吗
回复

使用道具 举报

ID:560514 发表于 2019-6-14 02:42 来自手机 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:564306 发表于 2019-6-18 08:50 | 显示全部楼层
不错  这个程序可以
回复

使用道具 举报

ID:575097 发表于 2019-6-30 16:44 | 显示全部楼层
小新找到迷茫的方向了,感谢
回复

使用道具 举报

ID:575282 发表于 2019-7-1 14:41 | 显示全部楼层
牛,太牛了。
回复

使用道具 举报

ID:541246 发表于 2019-7-12 13:19 | 显示全部楼层
做的真不错,很有帮助
回复

使用道具 举报

ID:552535 发表于 2019-7-12 15:23 | 显示全部楼层
很好用。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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