找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2728|回复: 5
收起左侧

51单片机智能频率计程序设计

[复制链接]
ID:664287 发表于 2019-12-15 14:44 | 显示全部楼层 |阅读模式
设计一个智能频率计,外部提供四种频率信号,要求:
(1)上电后,LCD1601字符屏先显示初始化界面:“Frequency Testing
(2)通过开关选择四种频率信号,再按下测量开关,测量频率,测量完成后在字符屏上显示测量结果。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
1.png 51hei截图20191215143758.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<absacc.h>
  3. #include<string.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define WCOMM XBYTE[0x0000]
  7. #define RCOMM XBYTE[0x0001]
  8. #define WDATA XBYTE[0x0002]
  9. #define RDATA XBYTE[0x0003]
  10. uchar LCD_Disp_Buffer[]="Frequency Testing";
  11. uchar count=0;
  12. sbit K1=P1^0;
  13. uint temp;
  14. void BusyWait()
  15. {
  16.    while((RCOMM & 0x80) != 0x00);
  17. }
  18. void Write_Command(uchar cmd)
  19. {
  20.    BusyWait();
  21.    WCOMM=cmd;
  22. }
  23. void Write_Data(uchar dat)
  24. {
  25.    BusyWait();
  26.    WDATA=dat;
  27. }
  28. void Initialise()
  29. {
  30.    Write_Command(0x30);
  31.    Write_Command(0x01);
  32.    Write_Command(0x06);
  33.    Write_Command(0x0c);
  34. }
  35. void ShowString(uchar *str)
  36. {
  37.     uchar i=0;
  38.         Write_Command(0x80);
  39.         while(str[i]!='\0'&&i<16&&str[i]!='A')
  40.         Write_Data(str[i++]);
  41.         for(;i<16;i++) Write_Data(' ');
  42.   }
  43. void Init()
  44. {
  45.    TMOD=0x51;
  46.    EA=1;
  47.    ET0=1;
  48.    ET1=1;
  49.    TL1=255;
  50.    TH1=255;
  51.    TH0=(65536-50000)/256;
  52.    TL0=(65536-50000)%256;
  53. }
  54. void Delay(uchar t)
  55. {
  56.    uchar a,b;
  57.    for(;t>0;t--)
  58.    for(a=38;a>0;a--)
  59.    for(b=140;b>0;b--);
  60. }
  61. void main()
  62. {
  63.   uchar i=0;
  64.   Initialise();
  65.   Init();
  66.   ShowString(LCD_Disp_Buffer);
  67.   while(1)
  68.   {
  69.          if(K1==0)
  70.          {
  71.            temp=0;
  72.            TR1=1;
  73.            TR0=1;
  74.          }
  75.          ShowString(LCD_Disp_Buffer);
  76.   }
  77. }
  78. void jishu( ) interrupt 3
  79. {
  80.    TL1=255;
  81.    TH1=255;
  82.    temp++;
  83. }
  84. void time_0( ) interrupt 1
  85. {
  86.     uchar i;
  87.    TH0=(65536-50000)/256;
  88.    TL0=(65536-50000)%256;
  89.    if(++count==20)
  90.    {
  91.           TR1=0;
  92.           TR0=0;
  93.       count=0;
  94.           LCD_Disp_Buffer[0]=temp/10000+'0';
  95.       LCD_Disp_Buffer[1]=temp/1000%10+'0';
  96.       LCD_Disp_Buffer[2]=temp/100%10+'0';
  97.       LCD_Disp_Buffer[3]=temp%100/10+'0';
  98.       LCD_Disp_Buffer[4]=temp%10+'0';
  99.           for(i=5;i<16;i++)
  100.            LCD_Disp_Buffer[i]=' ';
  101.           TL1=255;
  102.       TH1=255;
  103.    }
  104. }
复制代码

所有资料51hei提供下载:
智能频率计.zip (30.66 KB, 下载次数: 44)
回复

使用道具 举报

ID:677584 发表于 2020-1-3 17:21 来自手机 | 显示全部楼层
频率范围多少
回复

使用道具 举报

ID:8222 发表于 2020-1-3 21:20 | 显示全部楼层

对于没有分频器的,这种单片机在12M频率下,最多能有400KHZ的测量范围。
回复

使用道具 举报

ID:685981 发表于 2020-1-14 12:33 | 显示全部楼层
运行之后按下按钮不显示所测数据,是什么原因呢
回复

使用道具 举报

ID:685981 发表于 2020-1-14 12:41 | 显示全部楼层
请问不显示所测频率是什么原因呢
回复

使用道具 举报

ID:685981 发表于 2020-1-14 14:29 | 显示全部楼层
运行后不显示频率表
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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