找回密码
 注册
关于网站域名变更的通知
查看: 1427|回复: 6
打印 上一主题 下一主题

单片机数字频率计仿真设计0~9000hz 数码管显示 带源码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-17 13:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机数字频率计仿真设计0~9000hz 数码管显示 带源码
" L+ z8 `" T7 u( b5 P& b9 R! V8 h( L  G; a

( T1 q$ B& A( [: A- v6 `今天给论坛的朋友们分享一个51单片机做的数字频率计,用数码管显示,有详细的程序代码.1 t# A  I  E3 ]2 u2 X) t
仿真原理图如下:
. t# l/ g6 s( U1 T) w- |/ T * U* T% y5 i& I" p6 W1 R% c
, L9 g) l! G: B- |+ K+ `
3 {: r. P( R$ V$ |" O1 H0 l
部分单片机源码预览:
3 m, }+ o! e( B' c! _* LfreCountMain.c文件:

- Q+ Y, ?9 e' U, L/*************************************************************************+ d! e+ _* [. m8 Z# U6 V) t
*实例名称:频率计1 z6 b* i* d$ P
*实例说明:实现0~9000hz频率计的统计
2 x* Q0 v& z' r: i5 p*作者:yd* e5 e9 @' U: G5 L) o1 j
*时间:09.06.20' f( h3 I) H8 x# i% q" u
*************************************************************************// t" n9 W& B" j7 {9 Y9 Z" b
#include "target.h"; f3 n$ @/ s+ S+ }. N
#include "led.h"
1 J4 U8 O8 n+ S9 y) ^& u+ Kuchar displayBuff[4]={'0','0','0','0'}; //数码管显示缓冲区,千,百,十,个
; d8 V( C' c7 k! E) X3 |const uchar displayMode=0x00;           //后四位分别对应缓冲区中每位的数据类型,1为任意字符显示,0为数字显示
, m- |& m( @- K3 _) gvoid main()
% C0 X3 u  H: ~{5 q) N3 k& i: E- C) E6 j
  uint get_fre;% ~0 S( |9 k' i4 [
  target_init();' G% X" q6 V" o
  init_led();) r& L" M* n+ L1 q' m
  sei();
- P, L+ d/ _4 p9 O; E7 |; B9 N/ }  while(1)
: C) R5 @  i/ L2 M  {
9 p) Q: X- q9 m' \2 H    get_fre=get_fre_number();
' N6 N3 h% f/ ]3 V  z4 I2 {        if(get_fre/1000<0x0A)' r9 N( y7 t% d( O8 y: |
        {3 q( h" b& L, s
          displayBuff[0]=get_fre/1000+'0';            //计算频率千位,放在缓冲区第0位
- f% ~% E$ _2 \3 \: o- L- I( L3 Y        }, K) @& o' @$ O
        displayBuff[1]=(get_fre/100)%10+'0';          //计算频率百位,放在缓冲区第1位. |, H( v. h2 I6 i' Y, {
    displayBuff[2]=(get_fre%100)/10+'0';          //计算频率十位,放在缓冲区第2位+ E# p% {9 e8 c- h4 A: S
        displayBuff[3]=get_fre%10+'0';                          //计算频率个位,放在缓冲区第3位2 P' j; v. Q( L, ?( x9 d  \
    ledSweepDisplay(displayBuff,displayMode,0x04);//循环显示数码管缓冲区中数据
/ J" C6 @9 N; I. U! O3 X  }
3 T: j1 N9 k/ I. p$ U) E1 z0 }4 v  a- s, p, }4 o' c
}
+ @. K, y9 {3 e% C0 A8 X& l, B7 Y" y* E( W) o* h4 H) _- k
led.c文件:$ [* S; o4 Y7 {
#define LED_GLOBAL 1
! h8 r$ q- g5 Z: I#include "led.h"
9 s# _+ K, O( i& T( F7 `. G5 t/*******************************************************************************************
4 O0 q$ z# v' }4 Y6 u9 @- @) ~' @* V*函数名称:delay_us(uint us)
' B$ ^, J- m: p  G! @4 Q*函数功能:实现微秒级的延时! b- N. Z* e8 M' U3 ?" z2 q+ }9 u
*函数入口:us,延时函数循环后期数
% T+ G( b& R4 L8 f0 ]$ W6 r*函数出口:无
3 ]4 v# |$ Y) }# \, T*******************************************************************************************/9 c" S# d; [' e- y4 v& r
void delay_us(uint us)
' [" ]& l3 A% D{+ m! v8 }/ u: l1 p
  uint i;  Q0 x1 X& }5 z7 \" B% S( o' k
  while(us--): F& n$ a& j$ I- D( n. }
  {+ a, t* g. F4 q6 G& I. [0 l6 H
    for(i=0;i<100;i++);
" S; A7 U+ y4 _9 Y6 z  H' B5 ^! K  }
4 s0 ]. |0 c" c}
) K% f" u2 r% w2 r, J& ~4 b/*******************************************************************************************8 }" w! m; N5 O* R' _6 s7 U
*函数名称:led_init(void)7 w1 \* M) F$ A7 E
*函数功能:四位七段数码管显示初始化
# F9 w5 a7 ~! i7 G7 f1 e*函数入口:无
7 M1 W# @5 T' J5 {*函数出口:无
" f/ O! g! |  N/ U1 `2 j- Q*******************************************************************************************/: S8 p8 U8 [8 V5 u9 k* p5 j
void init_led(void)
% t- c1 U& _. d4 U{1 i+ C0 q0 a6 V* e; {
   LED=segLedCode[0];7 I) g5 h2 L  C; c4 E$ t5 ?9 S
   LED_CS1=0;' f! q! }. \0 r5 p$ D
   LED_CS2=0;
6 C; Z# m& W* Q" c7 N   LED_CS3=0;
! b- X1 \( S$ O8 L. \  X   LED_CS4=0;
$ ]2 H, D# c3 T6 _6 R}
( A: F2 t1 V3 p* Y* I/*******************************************************************************************
6 s/ @, |  P! w& }$ t+ O( V*函数名称:ledWrite(uchar c,uchar n,uchar mod)) q, U5 d  a4 A8 R) U! C
*函数功能:对一组数码管的某一位进行短暂显示
; k' t) T! l( s  u& j*函数入口:c,要显示的数据;n,显示一组数码管中的第n位;mod,c的数据形式
8 r* c) a9 j- L& `1 E& ~, A- O*函数出口:无
5 B" z" w2 n2 k! C; S*说明:当mod==DIGITAL时,c为数字0~9的ANCII码形式,此时在n位数码管上显示想用数字( H4 N( Q- @. S# e4 b2 W
       当mod==CHARACTER,直接将c输出数据口5 t( U2 m3 C8 ]% L' T
*******************************************************************************************/
+ B7 h& N9 G: s. ?void ledWrite(uchar c,uchar n,uchar mod)
( L8 ?8 i3 _% S. W  {. B/ P{
1 f4 p5 e! x: ~& Q! C   if(CHARACTER==mod)$ L! J  E( I$ B: f  F( f$ Y
   {+ G, M1 V$ l6 Q) Z5 k" u# U
          LED=c;  & r' t! j0 r0 F& N/ j& J1 j$ `' S
   }8 h$ a+ n% p$ [
   else if(DIGITAL==mod)0 }) ~5 q: E5 Q- ~; B
           {/ G: Z4 h! H- S* j0 X* I9 e
              if((c-'0')<0x0a): a9 P/ l1 }  Y- F- u% X
                  {& k3 |* O& o8 l" \) S% p
                    LED=segLedCode[c-'0'];$ S9 B# o7 a9 A! X8 g. @
                  }
% p7 I, V4 h7 X2 M" f, i7 f                  else* W* o- P6 P( [$ a4 l+ X* F; [: A
                  {  
( ]; g; O* ?- Y8 B) b                        LED=segLedCode[0];
" [5 f1 N1 O( g7 b8 S1 u                  }
. p! O2 ^( m' k# ]           }
8 X* j  ^- @" A- {- {2 D   switch(n)1 V) \& U* b. f; D# A6 y5 o
   {
( X% T- w6 ]4 J! ^0 W" ^2 s* }                case 0x01:/ L, v- s, W, Y& W, p  J4 E
                {0 t* {" `8 [0 A1 P1 i% ^( O9 h; S1 a$ `
                  LED_CS1=0;
9 U/ B$ q+ m8 B3 T" X                  delay_us(10);$ f0 }2 Q3 z! ]# z2 ?( H1 a# T9 Q
                  LED_CS1=1;
+ E/ _2 h' [! w! Z3 Y7 R# p1 i                  break;
# D  J7 f8 G( [- w# t( _                }
, [5 @; Y$ G1 Z( |! n                case 0x02:
9 ?3 V9 }# l7 Y+ l. h) L) t# ^                {
  \( e0 C, }, x! w5 b3 n& S$ q                  LED_CS2=0;% W8 ^0 J3 L/ N- g/ {3 |
                  delay_us(10);
  o# k8 _) a0 U% V. D+ [                  LED_CS2=1;
) v" o+ U: @% B                  break;3 U2 p0 J- j7 ]
                }
2 i7 Y( a7 \  _# i3 J/ B# ?                case 0x03:7 R- Q% k  J% U7 t
                {
- i$ _% n/ T. J                  LED_CS3=0;, T/ N! I2 h/ L9 X2 X, E* A; H. a
                  delay_us(10);2 \) V& T" u- n: A8 ?
                  LED_CS3=1;
' x0 n: r) R: t                  break;7 |1 v" l/ I0 S0 R
                }
5 d8 _% M$ |5 h8 s+ L            case 0x04:
7 G% C# ]5 o6 v$ P$ o+ n3 F                {
1 N, y  V$ x5 u5 O                  LED_CS4=0;+ [7 r. L# u# Y3 R
                  delay_us(10);' b: i4 a/ G# E; M- v5 n0 U
                  LED_CS4=1;
3 ]# ^; r: G( {" {7 C8 b                  break;' Z9 H' V' U; f  n
                }0 c( y3 b# b! U# d& Z. m0 Z
                default:0 z% Q) D$ ~- ?8 v
                  break;0 U2 Q+ Y; m* o+ k+ E' a
2 T, T) D/ q4 N' j
   }
. K" |! G$ V. Y0 F
$ k$ Y8 p, u7 N! j4 ]}5 j. y% A8 [! C" X* \
/*******************************************************************************************
! T1 w$ j, `% Q2 R*函数名称:ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
7 `0 z. A/ h" b7 |* i*函数功能:循环在数码管上显示缓冲区中的数据
/ d& `# c( O* p  ^*函数入口:segCode,指向显示缓冲区中的指针;segCodeMod,0~7位为1或0标示1~8位数码管显示的数据的类型(DIGITAL或者CHARACTER);segNumber,代表要显示数码管的位数# w( M# I% u0 |4 ~$ s
*函数出口:无: M. l* Q8 a0 t' X' J7 B* [4 o, C
*说明:本函数主要实现将显示缓冲区中的数据在数码管上显示出来5 l6 d4 z. }7 H. e4 a$ P
*******************************************************************************************/                     4 ~6 F' B2 X- I, M5 L8 L
void ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
  B8 j5 Z0 k: s{
* f) U/ I2 b1 v& i& f           uchar segCount;+ x2 k4 ?$ P2 a! W
        for(segCount=0;segCount<segNumber;segCount++)0 W& a/ c5 V+ K8 Y. J" b) G) ^9 L
        {
$ ?4 H. R* F* h% j           if(segCodeMod&0x01)           /*1代表此处显示任意字符 */6 A; D+ S( |2 C% `
           {/ Z3 @. I9 p, e& k
             ledWrite(segCode[segCount],segCount+1,CHARACTER); 8 @; l% k2 ^1 [" g$ W1 m5 n
           }. s! v4 j6 ?/ x! X. X8 d
           else
# o( q* y0 T8 O# b$ @' W5 b           {! `( N8 B' Z5 H" D$ D, T
             ledWrite(segCode[segCount],segCount+1,DIGITAL);: o  y5 f1 z0 A2 Y, Y  H
           }' V  k2 w; X8 g, c4 J: A' v* Y
           segCodeMod=segCodeMod>>1;
. J: z" z2 T& N  P; ], @        }
! m+ t, Q, [$ d# b# R) [}
# V+ @  H* T# T* S+ N: ~5 D& u$ }0 u) ~6 T3 X* t
$ I, @, ], Z. E6 ]
全部资料下载(含仿真工程文件和完整代码):
) C* b+ Z2 \( I! n7 n& Z: Y
游客,如果您要查看本帖隐藏内容请回复

! o4 E% p/ B/ v5 {, D/ G" L+ H
* z) v# _* q& y0 u: j" A8 Z- q

7 I  I1 B( b+ D) h$ ^+ _5 F4 V, Z

该用户从未签到

4#
发表于 2019-9-22 17:28 | 只看该作者
多谢分享                            4 C$ S% y) _3 ^9 u

该用户从未签到

5#
发表于 2019-11-29 09:19 | 只看该作者
非常不错nice

该用户从未签到

6#
发表于 2020-7-13 02:23 | 只看该作者
谢谢楼主,感谢分享
: Y3 `+ h6 E: ]/ Y$ g/ U! }

该用户从未签到

7#
发表于 2021-2-20 19:47 | 只看该作者
非常不错nice' S% W2 b# G( P6 q& j1 h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-31 19:07 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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