找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1094|回复: 1
收起左侧

基于单片机频率计的设计 求指导

[复制链接]
ID:1051397 发表于 2022-11-10 18:39 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif

单片机源程序如下:
  1. #include "reg51.h"

  2. #define        uint8 unsigned short int

  3. uint8 i,k;

  4. /******  ???????  *******/
  5. void delay_us(int t)
  6. {
  7.     i = t;
  8.     while(i--)
  9.         {}
  10. }
  11. /*******************************/

  12. /*************************************  ?????  **************************************/
  13. uint8 code smg_data[11] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//?????????(0-9????)
  14. uint8 smg7,smg6,smg5,smg4,smg3,smg2,smg1,smg0;//???????:???????...???
  15. //?????????
  16. void smg(int a)
  17. {
  18.     smg0 = 8;
  19.         smg1 = 6;
  20.         smg2 = 6;
  21.         smg3 = (a%100000)/10000;
  22.     smg4 = (a%10000)/1000;//??????
  23.         smg5 = (a%1000)/100;//??????
  24.         smg6 = (a%100)/10;//??????
  25.         smg7 = a%10;//??????

  26.         P2 = 0xf7;//1111 0000???8????
  27.         P0 = smg_data[smg7];
  28.         delay_us(200);
  29.         P0 = smg_data[10];//?????
  30.         delay_us(10);

  31.         P2 = 0xf6;//1111 0000???7????
  32.         P0 = smg_data[smg6];
  33.         delay_us(200);
  34.         P0 = smg_data[10];//?????
  35.         delay_us(10);

  36.         P2 = 0xf5;//1111 0000???6????
  37.         P0 = smg_data[smg5];
  38.         delay_us(200);
  39.         P0 = smg_data[10];//?????
  40.         delay_us(10);

  41.         P2 = 0xf4;//1111 0000???5????
  42.         P0 = smg_data[smg4];
  43.         delay_us(200);
  44.         P0 = smg_data[10];//?????
  45.         delay_us(10);

  46.         P2 = 0xf3;//1111 0000???4????
  47.         P0 = smg_data[smg3];
  48.         delay_us(200);
  49.         P0 = smg_data[10];//?????
  50.         delay_us(10);

  51.         P2 = 0xf2;//1111 0001???3????
  52.         P0 = smg_data[smg2];
  53.         delay_us(200);
  54.         P0 = smg_data[10];//?????
  55.         delay_us(10);

  56.         P2 = 0xf1;//1111 0010???2????
  57.         P0 = smg_data[smg1];
  58.         delay_us(200);
  59.         P0 = smg_data[10];//?????
  60.         delay_us(10);

  61.         P2 = 0xf0;//1111 0011???1????
  62.         P0 = smg_data[smg0];
  63.         delay_us(200);
  64.         P0 = smg_data[10];//?????
  65.         delay_us(10);
  66. }
  67. /****************************************************************************************/

  68. /**********  ?????  ***********/
  69. int count = 0;//????????
  70. //???????,?????1??
  71. void single_in() interrupt 2
  72. {
  73.     count++;//??????,???1
  74. }
  75. /***********************************/

  76. /*******************  ???????  ********************/
  77. uint8 flag = 1;//??????????
  78. uint8 time0_num = 0;//???0????
  79. int fr_cest = 0;//????
  80. void timer0() interrupt 1
  81. {
  82.     TH0 = 0x3c;//???0????,?????50??,65536-50000=3cb0
  83.         TL0 = 0xb0;
  84.         time0_num++;//???0????
  85.         if(time0_num>=20&&flag==0)//???0????20?,???1?,??????
  86.         {
  87.             EX1 = 0;//??????,??????
  88.                 fr_cest = count;//????
  89.                 time0_num = 0;//???0?????0
  90.                 flag = 1;//??????
  91.         }
  92.         else if(time0_num>=20&&flag==1)
  93.         {
  94.             EX1 = 1;//??????,?????
  95.                 count = 0;//??????0
  96.                 time0_num = 0;//???0?????0
  97.                 flag = 0;//???????
  98.         }
  99. }
  100. /*********************************************************/

  101. /****************************  ?????  ******************************/
  102. void interrupt_init()
  103. {
  104.     TMOD = 0x11;    //0001 0001  T1????0  T1??????  01,T1????1        T0????0  T0??????  01,T0????1
  105.     TCON = 0x14;    //0001 0100  T1????0  T1????  T0????0  T0????        ??1????0  ??1?????  ??0????0  ??0????
  106.         IP = 0x09;      //0000 1001         --  --         --  ?????????        T1???????  ????1?????  T0???????  ????0?????
  107.         IE = 0x86;      //1000 0110         ?????  --  --  ??????        ??T1??  ??????1  ??T0??  ??????0  
  108. }
  109. /***********************************************************************/

  110. void main()
  111. {
  112.     interrupt_init();//?????
  113.         while(1)
  114.         {
  115.             if(flag==1)
  116.                 {
  117.                     if(fr_cest>10000)
  118.                         {
  119.                             P1 = 0x01;
  120.                         }
  121.                         else if(fr_cest<100)
  122.                         {
  123.                             P1 = 0x04;
  124.                         }
  125.                         else
  126.                         {
  127.                             P1 = 0x00;
  128.                         }
  129.                     smg(fr_cest);
  130.                 }
  131.                 else
  132.                 {
  133.                     P1 = 0x02;
  134.                 }
  135.         }
  136. }
复制代码

所有资料51hei附件下载:
基于单片机频率计的设计.7z (79.81 KB, 下载次数: 11)


回复

使用道具 举报

ID:1057947 发表于 2022-12-16 20:01 | 显示全部楼层
求仿真的使用手册
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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