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

单片机点滴测速的信号处理设计,含源码,PCB原理图

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机点滴测速的信号处理设计,含源码,PCB原理图& J- {) h5 ^- Q( C( f
1 V! B2 E. O5 g  j# E4 w& x; [* X
' P1 P) e& c1 m0 b* G
点滴检测(数码管)使用说明
/ w9 S" e2 F, u0 k9 K) }8 g$ X, h2 {6 Q6 m
一、通过“设置”按键设置‘检测点滴间隔时间’的设置,设置范围“1-9”秒(通过数码管进行实时显示)。在启动检测的状态下设置,‘检测点滴间隔时间’按新设定的数值进行计时;
* I# Q5 A0 _6 y7 @# T3 d6 c3 D二、通过“启动”按键,切换检测的‘启动’与‘停止’状态(在报警的状态下,按下‘启动’按键,取消报警)。: L5 {0 s% u% Z, l! _

0 R" V9 ]! p" H: V! d. n+ X单片机点滴测速的proteus仿真原理图:2 k4 w; |( c# D6 B. u5 i) E6 M
" I  [: ]% `. h' w9 @6 l/ _

5 C/ U, \. [  Z' F4 f  G1 g/ y
# X$ S- E$ ~+ c' d# h) t: [点滴检测装置的原理图 用ad画的:: }& w, O% r1 P) O+ P8 V$ a

2 e6 P& }4 w: D" `  ?, i* F! n2 ~' N& p5 m' c

3 r( W# u' C" |: ?4 s6 [点滴测速设计的pcb图,用ad画的) `* }+ E: b( X3 K! [" I6 A6 r- `- S
) E9 e! t# v1 w9 }) Z+ O& j2 V

* u6 C' W6 S7 {+ _' G/ L" @2 {
: J( z9 T; k2 Z# a) ^5 V& ^* L点滴测速设计的单片机源码:
1 W0 i% E' {8 Q" {
//功能:通过S1按键设置点滴间隔时间(LED数码管显示)  S2启动/关闭点滴检测(关闭警报)
9 Y4 _% A9 e7 X" {2 H! D//晶振:12Mkz                  时间:2015-1-6
  S1 E' _% ~  ~0 M9 W% O( M+ j#include8 {' W4 o3 G# s  R; ?( E, o) \
#include
# @4 u' J) I1 \3 H#define uchar unsigned char # A2 g: y& K  Q& Z; ?  z
#define uint unsigned int
$ [7 c9 Q8 w: V7 v, @2 ]% J1 x: y$ v" D$ \
) b5 e: L2 S, F/ W+ T$ A1 n2 K2 D
#define RdCommand 0x01 //定义ISP的操作命令
, ?7 O9 G. }2 h8 q* ]6 E8 C1 z) u: g#define PrgCommand 0x02
% a- k: V; P/ t( L8 B6 d#define EraseCommand 0x03
  ^# A8 @- L  k- ?, Y; z5 i#define Error 14 c+ m. {% P9 Z$ S- s
#define Ok 02 A  N$ @6 C7 K5 {$ ?  `
#define WaitTime 0x01 //定义CPU的等待时间
$ e$ U( o3 G! K: B: Y, [sfr ISP_DATA=0xe2;  //寄存器申明
6 F  b5 N' }% B# Vsfr ISP_ADDRH=0xe3;
; ^/ M9 d, X$ l8 S' Osfr ISP_ADDRL=0xe4;* u2 ^" `) {1 q6 @9 F
sfr ISP_CMD=0xe5;2 g7 t: ^, A6 U2 M; }
sfr ISP_TRIG=0xe6;
' v+ j, g- u" n* `5 ?  j0 Msfr ISP_CONTR=0xe7;( n) @0 \& u& F2 L6 y

8 c; y& |1 I6 ^7 L% a# v2 a% hsbit led_1=P0^0;                   //绿色指示灯        
) f8 Q5 D: Y$ f4 c9 W5 x2 msbit led_2=P0^1;                   //红色指示灯& l/ D: D, b; t) u) U% f
sbit key_1=P3^6;                   //设置按键        
1 L4 R1 w- R' ^sbit key_2=P3^7;                   //启动检测按键
! M1 h8 k6 P, dsbit beep=P1^2;                           //蜂鸣器% `, k2 w9 S( I: Q3 z+ Q

( X  U$ |8 x( Juchar TIME,ms,tes_t,k;/ i- [+ `) K5 E* Z6 y
bit state,deteOK,beep1;           //标志位$ f2 H. e/ n9 q* e/ P
4 V4 z9 t3 ?0 v' O: W* j/ d& O2 ~, @
uchar code seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};; D6 O  p/ H3 A8 M( Y! @
/ o5 H+ f1 [+ h

. ?5 g6 _) [8 B" E" S4 u1 T/* ================ 打开 ISP,IAP 功能 ================= */8 {' m3 T% W' c
void ISP_IAP_enable(void)
, |+ L6 l8 i; H3 ~{
4 R9 X4 L) t* A4 v& }8 H EA = 0;       /* 关中断   */# ?( s9 K9 s5 l1 T5 W( m6 {; A  N
ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */+ ?7 n0 E* X# M. z- K, @
ISP_CONTR = ISP_CONTR | WaitTime; /* 写入硬件延时 */
2 [2 K$ E! T5 L; N% \1 l  A1 h) q5 H, Q ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN=1  */! X. r8 V4 s' a5 Q. Z4 l# j
}
7 n( \* [# W3 w/* =============== 关闭 ISP,IAP 功能 ================== */* z4 Y# ~  c% M0 W" ]6 c) @' a
void ISP_IAP_disable(void)
9 i- ]8 N, t1 N2 f. A% P2 `{- K) m+ {7 [9 `( ?6 D9 [
ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */3 H: {4 q0 h; N% G
ISP_TRIG = 0x00;. H0 z5 R4 l8 e3 T0 X: g" @
EA   =   1;   /* 开中断 */6 }3 ?) z3 w' ]
}
  u  X& m$ `, w2 m( E3 o/* ================ 公用的触发代码 ==================== */# [0 L5 {1 C; P0 A& D7 E) _
void ISPgoon(void). g* H9 G/ x8 A$ A6 e
{
7 |+ J; h3 ^0 j ISP_IAP_enable();   /* 打开 ISP,IAP 功能 */
3 T% O9 `) a) _4 [# M ISP_TRIG = 0x46;  /* 触发ISP_IAP命令字节1 */
: X, f- B0 O$ Q0 u/ o ISP_TRIG = 0xb9;  /* 触发ISP_IAP命令字节2 */2 f8 k/ i; [. C, w4 M8 {- ?' p
_nop_();+ L* W3 q  ]6 o" M0 ^4 a: y1 M
}% Q! b5 X# K, r9 w7 q, H) q
/* ==================== 字节读 ======================== */# d4 h+ G4 T7 t! O2 c
unsigned char byte_read(unsigned int byte_addr)
$ g0 f0 P$ }3 p  ^: u9 S3 |{
4 S% ~) r6 ~) A$ S9 Y; d( q7 H* S- A ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址赋值 */: X) \# ]& o7 H, J
ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
& n1 P, U" l9 N% V8 g* ~$ O  v0 a* e ISP_CMD   = ISP_CMD & 0xf8;   /* 清除低3位  */2 e3 B1 ?& {8 _
ISP_CMD   = ISP_CMD | RdCommand; /* 写入读命令 *// R- ?$ I4 o+ S% h1 ?
ISPgoon();       /* 触发执行  */
" E! c" d; \: ?" D- ]5 g ISP_IAP_disable();    /* 关闭ISP,IAP功能 */
3 Z1 ~# F" U3 A3 c return (ISP_DATA);    /* 返回读到的数据 */2 y2 P3 M4 U' l+ A0 i
}
7 d; p1 f5 [$ n1 P/* ================== 扇区擦除 ======================== */, t0 _2 h& f( p6 w1 L% o: e! y0 D/ a
void SectorErase(unsigned int sector_addr)8 B6 f8 i9 \5 o9 y+ C5 X
{
* i1 g2 o4 p( \8 s) V! q unsigned int iSectorAddr;8 t. M! [0 R* Q
iSectorAddr = (sector_addr & 0xfe00); /* 取扇区地址 */
: t8 o- l; [8 Q$ A; l3 A ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);6 J9 \* C% M- s  h
ISP_ADDRL = 0x00;; e6 H! ?6 ?$ I/ R
ISP_CMD = ISP_CMD & 0xf8;   /* 清空低3位  */
. V$ `9 p( e, h# v ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3  */1 }# }# {7 l" b0 v2 S
ISPgoon();       /* 触发执行  */
3 z* U9 B2 K  U  I ISP_IAP_disable();    /* 关闭ISP,IAP功能 */
" L  _# s' g( j; i5 V! A8 v) Z+ @}! \# ~# P' o6 o  i3 c+ M4 [
/* ==================== 字节写 ======================== */
$ c2 G' ]- D% ~void byte_write(unsigned int byte_addr, unsigned char original_data)2 Z$ D! O1 [& i
{
  `4 S% N; k9 R8 b( h5 ]" e" N7 r/ d ISP_ADDRH = (unsigned char)(byte_addr >> 8);  /* 取地址  */
: f% \! D$ j6 r9 t& z, T ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);  d# O0 T' Z, y2 y( o2 W3 @
ISP_CMD  = ISP_CMD & 0xf8;    /* 清低3位 */
$ n% N& b5 h4 D) ^2 f9 Z' K# n ISP_CMD  = ISP_CMD | PrgCommand;  /* 写命令2 */* `- S: b* H- p& I
ISP_DATA = original_data;   /* 写入数据准备 */2 ?; Z6 o& Q$ K
ISPgoon();       /* 触发执行  */
% _- @6 n6 U# x& G+ u ISP_IAP_disable();     /* 关闭IAP功能 */3 s- @; C. u8 ~/ c
}6 P! U  }1 U! H
3 B) g  U5 V' H% }8 I9 m  Q  ^5 I  N) O

# s% q$ `6 |, a' Lvoid delay(uint T)                                //延时子程序 $ N1 C' Z8 ^' G0 ^
{" X: h( l1 @; i
        while(T--);* I9 j! G0 o; }' o! @4 ?, e/ V
}  {; |3 ]% n) l8 l( P4 [1 k

4 ^! w  w/ F2 m( V' H8 bvoid key()                                                 //按键处理程序
) S% ]9 [! f7 u9 h% H{8 p! E% d. J9 y2 S+ m; R$ ~( `
        if (key_1==0)& ^/ ~- j* y8 w# U6 C# X
        {
; N6 Y; H6 }. |+ f. F1 o                delay(1000);
$ s$ o* L0 S) ^5 S7 k, g+ z$ x+ c                if (key_1==0); b4 D7 Y5 O  D3 i8 a+ \' O" c
                {
, p7 n1 J/ `# |                        while(key_1==0);
3 s4 z5 }' o( _1 c+ \: C4 R& o* W                        TIME++;
6 _3 {% r' k5 I+ q" J) U7 w                        if(TIME>9)
9 c# I" f, p/ I! s8 X                        {
' ?& |( m' z0 v- h                                TIME=1;5 D2 i* w) c7 B
                        }, ?. }& n# n# \1 _0 K# b- c
                        tes_t=TIME;  L9 ^. B2 g, A
                        ms=0;
. `3 N* A+ u9 v9 p6 a0 O- m- {5 i                        SectorErase(0x2000);
. @1 x4 j. d" M9 M+ [* s8 l' t                        byte_write(0x2000,TIME);- k7 Z# l8 c* O4 |. _
                }
. R2 U+ a2 F, f: x4 K# A        }2 a- x! x" \7 E" N
        if (key_2==0)% g" ]2 W% x& k8 {
        {. O) {! Y8 Y- N( h
                delay(1000);  {4 O% M/ k7 W& g$ H
                if (key_2==0)8 L) a! z- K( k; @: a. _
                {! i* I7 ]0 n* a5 _* w6 g& b! x9 \
                        while(key_2==0);
6 i# m1 s. O# a6 W# z+ [                        state=!state;
3 y( G+ e( G0 G6 n% d                        if (state)3 g! z/ [6 S2 D' q3 ^# j
                        {
; Q1 U2 ^; ]0 W. o3 ^                                ms=0;
! ?6 u0 b% A( N$ d- u: A                                tes_t=TIME;( e# B2 f/ C# m( z
                        }else' p% t$ j$ k5 p
                        {; W; \. \" W" V) G+ F  @: t
                                beep=1;
# N2 m& a6 Q6 |                                led_1=led_2=1;
3 i$ a1 ]" j6 N4 E9 C! r                                deteOK=0;
- f, D& x' Q, o                        }
& r+ J3 ~7 t* @2 j: f                }  i  |! e- S# s5 ?. L2 |1 @8 j! o
        }
" |0 `% x8 ?# a- g! e}
' V- a+ n1 s6 D1 J
# v, ?/ T3 o( }6 g( a9 O6 j9 ovoid main()- W8 Z9 N% P' ]" J1 V" ~' \
{, h# v- P6 F! ~0 y
        TMOD=0x01;                                                //打开定时器0、外部中断0
& s" c+ e$ o' `0 b" e  ?9 C% p        TH0=0x3c;
* V3 G# T3 R# p# \1 h, }* ~        TL0=0xb0;
3 N2 I: x" I" w: A! W6 ]+ K        ET0=1;9 y+ x2 t; b5 y% V$ L% I4 T
        EA=1;
3 }9 ^! O3 P' P0 ^' R- o+ O        TR0=1;
- m6 D# W3 R; N9 ^$ l# T        IT0=1;                                                        //设置下降沿触发方式1 d7 b: N4 y+ @! V9 [+ q7 p
        EX0=1;
& i" U. T) Z4 Z/ r# t: f; ^* Z        TIME=byte_read(0x2000);+ X: n3 d) f. `
        if (TIME==0||TIME>100)TIME=3;
9 A: w) N+ ^& `) k# R        while(1)
. p4 e2 c7 S0 B+ e! k+ C        {! n5 {! f$ E* z" N  P# r$ U
                P2=seg[TIME];                                //  数码管显示
8 E3 c8 p& A4 n4 D1 d, l# {$ {3 w; w                key();
3 ~$ H% i) D; A' \  t6 C0 x                if (state). T* {" z; N/ \6 b- I4 ]8 ^
                {4 J1 O6 X& m8 g# H3 x* q3 X6 y+ C
                        if (deteOK)
# K5 R2 i& F& k" W                        {
  @3 z0 a$ y% b& i0 f, o                                beep1=1;
3 Q: p- V# j; n# C* m                                led_2=0;8 V. Q8 V" |  `7 w7 c0 ?
                                led_1=1;
4 T3 y0 k8 u8 @9 I                        }else
7 e% a& l, k( H- x                        {
% V* y- q& h* s; n0 W" T                                beep1=0;
' k2 ?! n' p5 S/ n                                led_1=0;
" ]+ K6 G. a) D                                led_2=1;0 C! |' ]2 |0 l& [* C
                                beep=1;                        9 q' u$ ^1 x5 r9 F3 s) Q
                        }2 s$ J$ _& D* T# f# V7 E
                }else7 ?( y5 R, E8 L, H, N
                {  
6 E6 V2 Y6 t% F% S  P  T                        beep1=0;. P* r2 Y0 {* Z0 R
                        beep=1;/ t! _1 E0 Y& i( P
                        led_1=led_2=1;
  ^& E# l1 D9 B/ P                        deteOK=0;
! V1 F0 K3 c6 C- l0 N  D8 [                }        
  o+ k) G  _  a        }
  n, a+ \! x, K! s: N}/ f" ^! g! {6 _5 n1 U/ L
6 _, A9 Q! ^# @
void TIME_ms() interrupt 1                        //定时器0 # _! r. h; H# z$ V2 A( D
{
( [) D& l9 J; B2 D& R        TH0=0x3c;
% x, k  f" T! r* O+ h        TL0=0xb0;
' S3 G3 d5 G" _1 Y, v        ms++;
& w9 Y" W9 _3 T0 @8 L5 J8 g        k++;
; j* R0 _) d) a4 E        if(beep1==1&&k%3==0)                        //蜂鸣器报警处理' E; d& F, E( U. a, @
        {
+ _5 y6 W! \, D% ^$ r# m8 \& x# r                beep=!beep;7 P6 ~5 T/ v* {
                if(k>19)k=0;
# n& X( U( i5 _        }
, ~0 q0 ~4 T# ]; p9 K  t" _( v        if(ms==20)                                                //1S定时
9 n9 J( F4 ]$ l  T  H2 ]5 \9 y        {9 [. O- ~! m/ C5 u* B1 u
                ms=0;9 R2 P7 g& v  G& q
                   if (state)                                        //启动点滴计时
% K5 ?7 \  V1 O, |( k                {/ A6 `  J4 Y5 z1 s, Z! P0 b
                        tes_t--;' k; Q. ~) Q* S$ S/ J# \# r
                        if (tes_t==0)! d. J6 D2 \3 o1 b0 k8 B
                        {. u( `6 Q7 V  n* |  D, M4 u4 q
                                deteOK=1;                        //超出计时时间
- u  b- H; W- |: m5 @! d0 g& X. b                        }; g9 G# C) w! `% v' i) H: |
                }
# a( u# p3 L- ~        }! b6 X4 [' n5 U; ?2 s# {) X
}' N/ N  f; a1 Y8 ~  C+ B/ r8 z
) W, g3 {  H2 |& U4 j
void dete() interrupt 01 v( h6 _1 x. k& q
{5 P( Y  q8 l; Q
        if (state==1)                                          //点滴检测               
2 `! g! `8 }7 H3 m" x$ R        {
' U6 h9 \* G7 X8 n                tes_t=TIME;" H$ p  R6 h0 f3 g% ~
                ms=0;
$ W' z; `0 ?1 ?$ F, D        }
( p! u2 A, t$ d& G! s}
+ Q6 P" a, m3 u7 l
/ U+ S3 ?& o4 V( q$ w4 ~( F点滴测速设计的所有资料下载:- I. e/ s% G' t
游客,如果您要查看本帖隐藏内容请回复

$ l5 G4 u8 \1 S* }# {9 [

' q0 D9 Z- O. W- L3 B. Z

该用户从未签到

2#
发表于 2019-1-15 23:53 | 只看该作者
看看楼主的原理图

该用户从未签到

3#
发表于 2020-6-2 09:02 | 只看该作者
感谢楼主分享,学习一下. z2 a6 P0 y, O1 K# U5 P
  • TA的每日心情
    开心
    2025-6-22 15:12
  • 签到天数: 1134 天

    [LV.10]以坛为家III

    4#
    发表于 2020-7-16 23:35 | 只看该作者
    谢谢分享

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-23 06:28 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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