找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机+74LS160频率计,最高可测频10M

  [复制链接]
跳转到指定楼层
楼主
因为51单片机晶振的原因,测频的范围有限制,这时就需要外置74LS160分频器,进行分频。
本程序采用了定时器的方式2定时,8位自动重装计数器,精准定时。

电路原理图如下:



单片机源程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define Duan P2
  4. #define Wei P1
  5. sbit mr = P3^0;
  6. unsigned char code smg_duan[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7. unsigned char code smg_wei[] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  8. unsigned int Num;
  9. long int pin;
  10. long int count;
  11. void delay_ms(int i)
  12. {
  13.         int j;
  14.         for(i;i>0;i--)
  15.                 for(j=100;j>0;j--);
  16. }

  17. void display(long int num)
  18. {
  19.         long num1[8],i;
  20.         num1[7] = num/10000000;
  21.         num1[6] = (num/1000000)%10;
  22.         num1[5] = (num/100000)%10;
  23.         num1[4] = (num/10000)%10;
  24.         num1[3] = (num/1000)%10;
  25.         num1[2] = (num/100)%10;
  26.         num1[1] = (num/10)%10;
  27.         num1[0] = num%10;
  28.         for(i=0;i<8;i++){
  29.         Wei = smg_wei[i];
  30.         Duan = smg_duan[num1[i]];
  31.         delay_ms(1);
  32.         }
  33. }

  34. void main()
  35. {
  36.         TMOD = 0x72;
  37.         TH0 = 0x06;
  38.         TL0 = 0x06;
  39.         TH1 = 0x00;
  40.         TL1 = 0x00;
  41.         ET1 = 1;
  42.         ET0 = 1;
  43.         EA = 1;
  44.         //PT1=1;
  45.         TCON = 0x50;
  46.         while(1)
  47.         {
  48.                 display(pin);
  49.         }

  50. }

  51. void timer0() interrupt 1   //定时器
  52. {
  53.                 unsigned char a;
  54.                 if(Num==3999)
  55.                 {
  56.                 TCON = 0x00;
  57.                 EA=0;
  58.                 Num = 0;
  59.                 a=P0&0x0f;               //分频器读数
  60.                 pin = (256*count+TL1)*10+a;    //溢出的次数*256+还未溢出的次数+分频器的计数
  61.                 TH1 = 0x00;
  62.                 TL1 = 0x00;
  63.                 TL0 = 0x06;
  64.                 TH0 = 0x06;
  65.                 count = 0;
  66.                 mr=0;
  67.                 _nop_();
  68.                 EA=1;
  69.                 TCON = 0x50;
  70.                 mr=1;
  71.                 }
  72.                 else Num++;
  73.                 //display(pin);
  74. }

  75. void timer1() interrupt 3    //计数器
  76. {
  77.         count++;    中断溢出的次数
  78. }
复制代码

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:855982 发表于 2020-12-7 14:28 | 只看该作者
为啥我按着你的仿真做 数码管乱码呀
回复

使用道具 举报

板凳
ID:855982 发表于 2020-12-7 15:32 来自手机 | 只看该作者
大佬,为啥我的数码管不行
回复

使用道具 举报

地板
ID:899981 发表于 2022-6-13 14:34 | 只看该作者
没有代码?
回复

使用道具 举报

5#
ID:1110848 发表于 2024-2-10 01:46 | 只看该作者
可以、抛砖引玉之作
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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