找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5511|回复: 0
收起左侧

简易频率计+AD原理图+单片机代码

[复制链接]
ID:183423 发表于 2017-5-4 12:12 | 显示全部楼层 |阅读模式
单片机简易频率计原理图如下:
频率计.png

0.png
----------------------------------------------------------------------------------------------------
第一部分:文件夹命名规则
----------------------------------------------------------------------------------------------------
APP        应用程序文件夹
BRD        板载设备驱动与使用文件夹
CPU        微控制器相关文件夹
CPU-CFF    微控制器内存等配置文件夹
CPU-STP    微控制器启动代码文件夹
ELS        其他代码文件夹
FUC        通用自定义代码文件夹
GEN        通用标准代码文件夹
PRJ        工程文件夹
PRJ-EXE    IAR工程输出可执行文件文件夹
PRJ-OBJ    工程输出文件文件夹
PRJ-LST    工程输出链表文件夹
SYS        操作系统文件夹

51单片机源程序
  1. //==================================================================================================
  2. //  工程功能:
  3. //  工程等级:工程级/驱动级
  4. //  工程硬件:STC89C52RC
  5. //  工程软件:Keil C51 uVision4
  6. //  工程作者:智心科技(ZhiXinKeJi)(http://bengbucollege.taobao.com/)
  7. //  工程创建:2014-10-31
  8. //  工程版次:1
  9. //  工程修改:2014-10-31
  10. //  修改内容:
  11. //==================================================================================================

  12. //==============================包含的头文件========================================================
  13. #include"MAIN.H"                            // 包含全局头文件,

  14. //==============================定义全局变量========================================================
  15. unsigned long Freq_CUNT;

  16. //==================================================================================================
  17. //  实现功能:主函数
  18. //  函数说明:
  19. //  函数备注:
  20. //==================================================================================================
  21. void main(void)
  22. {
  23.         TIME_Cnfg();                // 配置 定时器(TIME)
  24.         SEGx4_Init();                // 初始化 SEGx4

  25.         while(1)
  26.         {        
  27.                 if(Freq_CUNT<=10000)                        
  28.                 {
  29.                         SEGx4_ShowNumbx4(Freq_CUNT);                // 1Hz单位
  30.                         LEDx2_Sets(LEDc1,LEDs0);                        // 黄灯亮
  31.                         LEDx2_Sets(LEDc2,LEDs1);                        // 绿灯灭
  32.                 }
  33.                 else if(Freq_CUNT<=400000)
  34.                 {
  35.                         SEGx4_ShowNumbx4(Freq_CUNT/1000);        // 1KHz单位
  36.                         LEDx2_Sets(LEDc1,LEDs1);                        // 黄灯灭
  37.                         LEDx2_Sets(LEDc2,LEDs0);                        // 绿灯亮
  38.                         DELAY_nMS(1000);
  39.                 }
  40.                 else
  41.                 {
  42.                         SEGx4_ShowStrg("----");                                //
  43.                         LEDx2_Sets(LEDc1,LEDs1);                        // 黄灯灭
  44.                         LEDx2_Sets(LEDc2,LEDs1);                        // 绿灯灭
  45.                 }
  46.         }
  47. }
复制代码
  1. /*================================================================================================*/
  2. /*  文件功能:SEGx4-四位数码管                                                                    */
  3. /*  文件说明:端口直接连接方式                                                                    */
  4. /*  硬件平台:STC89C52RC                                                                          */
  5. /*  软件平台:Keil uVision4-C51 V9.0                                                              */
  6. /*================================================================================================*/

  7. //==============================包含的头文件========================================================
  8. #include"MAIN.H"                            // 包含全局头文件,
  9. #include"SEGx4.H"                           // 包含外设头文件,SEGx4-四位数码管
  10. #include"SEGx4_FONT.H"                      // 包含外设头文件,SEGx4-四位数码管/字库文件


  11. //==============================硬件端口定义========================================================
  12. #define SEGx4_DATAPORT P0                   // 定义 SEGx4 段码 8位端口
  13. sbit SEGx4_BIT0=P2^4;                       // 定义 SEGx4 位码 0号端口
  14. sbit SEGx4_BIT1=P2^5;                       // 定义 SEGx4 位码 1号端口
  15. sbit SEGx4_BIT2=P2^6;                       // 定义 SEGx4 位码 2号端口
  16. sbit SEGx4_BIT3=P2^7;                       // 定义 SEGx4 位码 3号端口


  17. //==============================宏自定义声明========================================================
  18. //  SEGx4 位数
  19. #define SEGx4_UNIT              4           // 数据引脚,数据端口使用的数量。


  20. //==============================定义引用变量========================================================
  21. unsigned char SEGx4_ShowData[SEGx4_UNIT];   // 定义字符数组,存放待显示字符编码



  22. //==================================================================================================
  23. //  函数功能:SEGx4 初始化
  24. //  函数标记:应用函数,完成,
  25. //  函数说明:   
  26. //--------------------------------------------------------------------------------------------------
  27. //  输入参量:无
  28. //  输出参量:无
  29. //==================================================================================================
  30. void SEGx4_Init(void)
  31. {        

  32. }

  33. //==================================================================================================
  34. //  函数功能:SEGx4 显示字符串
  35. //  函数标记:应用函数,完成,
  36. //  函数说明:   
  37. //--------------------------------------------------------------------------------------------------
  38. //  输入参量:_STRG:待显示的字符串;
  39. //  输出参量:无
  40. //==================================================================================================
  41. void SEGx4_ShowStrg(unsigned char *_STRG)
  42. {
  43.         unsigned char i=0;        //定义局部变量,一定赋予初始值为0
  44.         unsigned char j;                //定义局部变量,用于循环
  45.         while(*_STRG)
  46.         {
  47.                 for(j=0;j<32;j++)                                                        //循环32次,查询数码管字模位置
  48.                 {
  49.                         if(SEGx4_CODE[j].CHAR==*_STRG)        //判断第k个字符的编码是否与输入字符相等
  50.                         {
  51.                                 SEGx4_ShowData[i]=SEGx4_CODE[j].CODE;        
  52.                                 i++;
  53.                                 break;
  54.                         }
  55.                 }
  56.                 _STRG++;
  57.         }        
  58. }

  59. //==================================================================================================
  60. //  函数功能:SEGx4 显示 4位整型数字
  61. //  函数标记:应用函数,完成,
  62. //  函数说明:   
  63. //--------------------------------------------------------------------------------------------------
  64. //  输入参量:_STRG:待显示的字符串;
  65. //  输出参量:无
  66. //==================================================================================================
  67. void SEGx4_ShowNumbx4(unsigned int _NUMB)
  68. {
  69.         unsigned char i,j;                                //定义局部变量,用于循环计数
  70.         unsigned char Numb_Arry[4];        //定义局部数组,用于存储变量

  71.         Numb_Arry[0]=_NUMB/1000 %10+0x30;
  72.         Numb_Arry[1]=_NUMB/100  %10+0x30;
  73.         Numb_Arry[2]=_NUMB/10   %10+0x30;
  74.         Numb_Arry[3]=_NUMB/1    %10+0x30;

  75.         for(i=0;i<4;i++)
  76.         {
  77.                 for(j=0;j<32;j++)                                                                        //循环32次,查询数码管字模位置
  78.                 {
  79.                         if(SEGx4_CODE[j].CHAR==Numb_Arry[i])        //判断第k个字符的编码是否与输入字符相等
  80.                         {
  81.                                 SEGx4_ShowData[i]=SEGx4_CODE[j].CODE;
  82.                                 break;        
  83.                         }
  84.                 }
  85.         }
  86. }

  87. //==================================================================================================
  88. //  函数功能:SEGx4 T2 中断服务函数
  89. //  函数标记:中断函数,完成,
  90. //  函数说明:   
  91. //--------------------------------------------------------------------------------------------------
  92. //  输入参量:无
  93. //  输出参量:无
  94. //==================================================================================================
  95. void SEGx4_IRQHandler(void)
  96. {
  97.         static unsigned char SEGx4_BITS=0;                // 定义全局变量,用于循环数码管位数         
  98.         SEGx4_BIT0=1;
  99.         SEGx4_BIT1=1;
  100.         SEGx4_BIT2=1;
  101.         SEGx4_BIT3=1;
  102.         //----------------------------------------------------------------------------------------------
  103.         // 段码
  104.         //----------------------------------------------------------------------------------------------        
  105.         SEGx4_DATAPORT=SEGx4_ShowData[SEGx4_BITS];        

  106.         //----------------------------------------------------------------------------------------------
  107.         // 位码
  108.         //----------------------------------------------------------------------------------------------
  109.         switch(SEGx4_BITS)                                       
  110.         {
  111.                 case 0:SEGx4_BIT0=0;SEGx4_BIT1=1;SEGx4_BIT2=1;SEGx4_BIT3=1;break;
  112.                 case 1:SEGx4_BIT0=1;SEGx4_BIT1=0;SEGx4_BIT2=1;SEGx4_BIT3=1;break;
  113.                 case 2:SEGx4_BIT0=1;SEGx4_BIT1=1;SEGx4_BIT2=0;SEGx4_BIT3=1;break;
  114.                 case 3:SEGx4_BIT0=1;SEGx4_BIT1=1;SEGx4_BIT2=1;SEGx4_BIT3=0;break;
  115.                 default:break;
  116.         }

  117.         //----------------------------------------------------------------------------------------------
  118.         // 循环移位
  119.         //----------------------------------------------------------------------------------------------
  120.         SEGx4_BITS++;
  121.         if(SEGx4_BITS>5)
  122.         {

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

复制代码

下载:
简易频率计-第01A版.zip (451.63 KB, 下载次数: 45)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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