找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机数字频率计仿真(可按键切换量程)含源码

  [复制链接]
跳转到指定楼层
楼主
之前课程设计做的  误差很小   分享给大家  里面有程序和仿真   也做过实物  可以按键切换量程10倍和1倍


单片机源程序如下:
  1. #include <reg52.h >
  2. #include <intrins.h >
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit  k1=P3^0;
  6. sbit  k2=P2^0;
  7. sbit  LED=P2^1;
  8. unsigned  char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴数码管
  9. unsigned  char code dispcode[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//显示0-9    /修改   新增0x00
  10. unsigned  char count [8]={0, 0, 0, 0, 0, 0, 0, 0};//定义数组存放显示数据的各位
  11. unsigned  int  T0count =0;
  12. unsigned  char time1tick =0;
  13. unsigned  char i =0,a=0,j=0,y=0;
  14. unsigned  int x ;//int最大是65536
  15. void pulse_init (void)
  16. {
  17. TMOD =0x16;//T0工作在方式2,计数器模式,T1工作方式为方式1,定时器模式
  18. TH0=0x00;
  19. TL0=0x00;
  20. TH1=(65536-50000)/256;//50ms中断一次,中断20次完成1秒定时,计算初值
  21. TL1=(65536-50000)%256;
  22. ET0=1;
  23. ET1=1;
  24. //EX0=1;
  25. //EX1=1;
  26. EA=1;       
  27. }


  28. void delay (uint ms)
  29. {
  30. unsigned char i,j;
  31. for(i =0; i<ms; i ++)
  32. for(j =0; j<250;j ++)
  33.                                         {
  34.                                                 _nop_();
  35.                                           _nop_();
  36.                                           _nop_();
  37.           }
  38. }
  39. static void time0_int (void) interrupt 1 using 0
  40. {
  41. T0count ++;
  42. }
  43. void t1(void) interrupt 3 using 0
  44. {
  45. time1tick++;
  46. TH1=(65536-50000)/256;//50ms中断一次,中断50次完成1秒定时,计算初值
  47. TL1=(65536-50000)%256;
  48. if (time1tick==10*a)
  49. {
  50. time1tick=0;
  51. TR0=0;
  52. TR1=0;
  53. ET0=0;
  54. ET1=0;
  55. }
  56. }

  57. void display (void)
  58. {
  59.   x=256*T0count+TL0;//转换成10进制
  60.         i=7; //数码管的显示高位为数据的低位
  61.         while(x)//赋值
  62. {
  63. count[i]=x%10;
  64. x=x/10;
  65. i--;       
  66. }
  67. while(i--)
  68. {
  69. count[i]=10;//修改
  70. }
  71. for(i=0;i<8;i++)
  72. {     
  73.         if(i==7&&j==1)
  74.         {
  75.                 P1=0x80;
  76.                 delay(1);
  77.    }
  78.            P0=dispbit[i];
  79.             P1=dispcode[count[i]];
  80.             delay(1);
  81. }
  82. }

  83. //void  int0_int(void) interrupt 0
  84. //{
  85. //  j=1;
  86. //}

  87. //void  int1_int(void) interrupt 3
  88. //{
  89. //  j=0;
  90. //}

  91. void main()
  92. {       

  93. if(!k2)
  94. {delay(5);
  95.         if(!k2)
  96.         j=0;
  97.         else
  98. ……………………

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

所有资料51hei提供下载:
频率计.zip (81.66 KB, 下载次数: 140)






评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:365669 发表于 2018-7-5 16:09 | 只看该作者
谢谢楼主
回复

使用道具 举报

板凳
ID:363028 发表于 2018-7-13 11:03 | 只看该作者
谢谢楼主
回复

使用道具 举报

地板
ID:363028 发表于 2018-7-13 11:04 | 只看该作者
谢谢楼主
回复

使用道具 举报

5#
ID:370518 发表于 2018-7-14 16:06 | 只看该作者
那要是做实物,怎样实现的频率输入啊,求解
回复

使用道具 举报

6#
ID:407522 发表于 2018-10-16 10:01 | 只看该作者
请问切换量程为10倍是什么原理?是由哪一段代码控制的?
回复

使用道具 举报

7#
ID:411697 发表于 2018-10-18 14:33 | 只看该作者
乾坤 发表于 2018-10-16 10:01
请问切换量程为10倍是什么原理?是由哪一段代码控制的?

同问,这个也搞不懂,希望指教
回复

使用道具 举报

8#
ID:407522 发表于 2018-10-22 20:35 | 只看该作者
单片机1234567 发表于 2018-10-18 14:33
同问,这个也搞不懂,希望指教

最后一段代码中,delay(5)改为delay(20)后,就能按一下按键后一直有小数点,这一句case(1):a=20; break;代码,a=20时就能使测出的频率达到0.1Hz,a=2时测出的频率为原频率的十分之一;
delay(5)改为delay(0)后,按按键就不会出现小数点。
回复

使用道具 举报

9#
ID:411697 发表于 2018-10-30 23:16 来自手机 | 只看该作者
你好,我们现在是做51单片机,这个52单片机可以用吗
回复

使用道具 举报

10#
ID:262375 发表于 2018-12-19 17:36 | 只看该作者
单片机1234567 发表于 2018-10-30 23:16
你好,我们现在是做51单片机,这个52单片机可以用吗

52和51区别在硬件上,和软件关系不大
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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