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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机点滴测速的信号处理设计,含源码,PCB原理图* V' [) x4 G9 ]( T

' ~& W* h0 r5 C' O5 T# o. {

- ~# k$ p$ r% P# N  F- x: O点滴检测(数码管)使用说明+ B+ p: ^& V( j6 I" H
4 E+ k' D1 Z% }* w1 J2 e
一、通过“设置”按键设置‘检测点滴间隔时间’的设置,设置范围“1-9”秒(通过数码管进行实时显示)。在启动检测的状态下设置,‘检测点滴间隔时间’按新设定的数值进行计时;
) ?) D! X0 Y# q/ g  t二、通过“启动”按键,切换检测的‘启动’与‘停止’状态(在报警的状态下,按下‘启动’按键,取消报警)。
' `9 u4 |" x" {: h7 @$ G1 t
) p' l; C$ z0 ~- S; T& k单片机点滴测速的proteus仿真原理图:
9 u0 Y  J, Z' |  e9 F $ e8 f- h. N* x3 v1 |- A6 ?
7 j# i2 @! S7 p% U

) a% ~, E( p: }3 G: E点滴检测装置的原理图 用ad画的:3 t& `* O3 \; W3 G0 m( [5 m9 v* r

: K' I7 z) E$ g
" s0 `% J+ Q, O6 e! S& D7 w; F2 U) Z1 p! }+ y, j
点滴测速设计的pcb图,用ad画的
9 x$ H1 i. H; k' m
8 m4 _2 r0 u- e( y/ r0 X/ t! J  z' w5 t0 e- A
6 w  ~; K  X/ R" |; f1 B5 L" }
点滴测速设计的单片机源码:
1 J4 d7 o6 a' U. y( v) K
//功能:通过S1按键设置点滴间隔时间(LED数码管显示)  S2启动/关闭点滴检测(关闭警报)
  h% z4 h) j! D( [1 a8 E//晶振:12Mkz                  时间:2015-1-6' g$ _+ M5 P# ^7 O0 ?
#include2 M, H: G5 D; D  K& l( V. t
#include3 t' h; Y% s2 F# f
#define uchar unsigned char # B9 J4 \% F5 ~" L# ]/ F! @2 T6 v
#define uint unsigned int " F! e0 ~  }" `* v! J

5 W8 q" Q& t/ B, [9 |8 O
/ {% O5 n, Y3 d! w) N# B#define RdCommand 0x01 //定义ISP的操作命令, m& K2 w1 O* z5 V6 p" A& I+ M
#define PrgCommand 0x02
; v8 |0 O  B# Y' Z# ]1 ^% P#define EraseCommand 0x03 # B0 g+ g% e# J& j9 U$ }
#define Error 1. J. l6 j6 j' e, }: W
#define Ok 07 X- a: u+ B% t# U" R
#define WaitTime 0x01 //定义CPU的等待时间% M# U: u2 W: m0 }3 q5 I6 E0 f, s3 i7 c
sfr ISP_DATA=0xe2;  //寄存器申明$ h3 N- g# m* e: z1 H% L
sfr ISP_ADDRH=0xe3;
  D4 z  b( x4 ]$ P4 V! H+ W1 esfr ISP_ADDRL=0xe4;% e" d. W$ s0 U% N% \5 b& j# U6 m
sfr ISP_CMD=0xe5;
& t0 Z, C/ S2 x" B1 fsfr ISP_TRIG=0xe6;$ k( F/ S6 }  `. {
sfr ISP_CONTR=0xe7;
  z5 q9 b2 S5 W8 E. y
6 ^# b5 P4 H" msbit led_1=P0^0;                   //绿色指示灯        
( X9 ~. j. V: \) G4 i* b/ o; lsbit led_2=P0^1;                   //红色指示灯
8 p3 E, Q% n' [" H! j. bsbit key_1=P3^6;                   //设置按键        
; o5 _1 y, i7 c$ t, O; f" q1 hsbit key_2=P3^7;                   //启动检测按键
% S5 H9 M# `3 y6 ]& Msbit beep=P1^2;                           //蜂鸣器
% S* j" |# a- Q& L( f' m3 v5 |4 o2 n# P! B- t" q
uchar TIME,ms,tes_t,k;
& _7 X8 k* Z# y7 lbit state,deteOK,beep1;           //标志位3 r  _* f' _1 O5 [
' ^- v9 k: P; n& ^+ h
uchar code seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};6 n- E: ?) D- T. Q) D& Z
  q+ Z9 ?2 j2 z: H$ D4 Q

/ u7 e6 E/ u1 N5 ?, a/* ================ 打开 ISP,IAP 功能 ================= */  f' H, E" V% p2 d1 h* P7 }3 J
void ISP_IAP_enable(void)% ^* i0 ]9 V6 k" L' ^9 h9 ^
{+ Q, Y  P3 }& w/ c+ N4 \
EA = 0;       /* 关中断   */5 {& `; {* z/ Q. u3 [4 U9 x. L
ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */# x- ^! m: Z9 j
ISP_CONTR = ISP_CONTR | WaitTime; /* 写入硬件延时 */* Z" S$ B8 m- r
ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN=1  */
" M- y# |% r4 E+ A+ [}
! N2 Q  o2 {! ~. W1 d/ @" `2 R% w/* =============== 关闭 ISP,IAP 功能 ================== */1 r* a. _' {% E! ~" u, i
void ISP_IAP_disable(void); y. i; z. R% B1 _6 r" A
{  [* V9 s- c9 i( ]8 m
ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */' W( H; w4 K, b+ P0 S# m2 N; T. H3 t
ISP_TRIG = 0x00;
7 ?( E* @( y: H0 {& n+ r EA   =   1;   /* 开中断 */
, q' N8 ?8 v. w}) \9 r1 d7 C9 N% ], }! h; q) @
/* ================ 公用的触发代码 ==================== */
3 X: w- M6 a) K2 u- bvoid ISPgoon(void)8 w+ o9 ?9 A* ?! m
{( X: `& X, w3 u
ISP_IAP_enable();   /* 打开 ISP,IAP 功能 */
  P- l& b  \" V9 b% N. w ISP_TRIG = 0x46;  /* 触发ISP_IAP命令字节1 */7 v2 D% }! S. L! d" i* I5 I4 a
ISP_TRIG = 0xb9;  /* 触发ISP_IAP命令字节2 */2 @6 I9 [  o. v( e
_nop_();7 G2 E& f7 C/ J% T* G
}
8 o* ~$ T7 r8 K) k/* ==================== 字节读 ======================== */
6 B$ k" h1 \( _unsigned char byte_read(unsigned int byte_addr)- m, ~4 j- @$ c4 _7 A
{
" v1 E9 a/ R' C/ ] ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址赋值 */( G, w/ l7 _- C# ^7 z" b
ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);7 T) @; j5 ?3 f* B, Z- m% U' G
ISP_CMD   = ISP_CMD & 0xf8;   /* 清除低3位  */
/ K$ I! ?8 z& _( ^6 c# Z ISP_CMD   = ISP_CMD | RdCommand; /* 写入读命令 */% g: d8 t0 F: }
ISPgoon();       /* 触发执行  */
8 @4 E- R$ D+ Q4 e& p. Z ISP_IAP_disable();    /* 关闭ISP,IAP功能 */
# c% E) w8 |5 z+ r3 r) C return (ISP_DATA);    /* 返回读到的数据 */
4 t$ ~9 w* ~) G& G2 T  S( @6 H}
/ y2 x  q" ^6 C# v5 a( _8 A! F) A5 p4 K# A/* ================== 扇区擦除 ======================== */$ k! @8 L% m* G6 m
void SectorErase(unsigned int sector_addr)0 x# F8 |: |2 }# @
{
+ M! d5 O; r* O! D unsigned int iSectorAddr;
* O  T3 p3 d9 @! g# z, W iSectorAddr = (sector_addr & 0xfe00); /* 取扇区地址 */
6 d) n# ^& j, m  ^ ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
% E" V1 n; @. I2 q ISP_ADDRL = 0x00;, }5 d' F& k0 Q2 o7 U1 r
ISP_CMD = ISP_CMD & 0xf8;   /* 清空低3位  */% T6 e- @- k8 B( ^; F3 q
ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3  */7 s3 {0 a& }5 x
ISPgoon();       /* 触发执行  */
( b" \6 J: u( ~* \) Y& B9 k' J ISP_IAP_disable();    /* 关闭ISP,IAP功能 */8 {' D4 N; C5 e* ]1 ]
}
, o6 z, o: i; b4 ?- x$ r& K/* ==================== 字节写 ======================== */
+ V  Z  X6 c3 Y  R; h9 v: Qvoid byte_write(unsigned int byte_addr, unsigned char original_data)
$ H9 w6 b! f" @9 G  z$ V{7 G! J5 j+ |# x) K0 M- N. P, S* \+ n4 n
ISP_ADDRH = (unsigned char)(byte_addr >> 8);  /* 取地址  */% [! f. s* _' U
ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
4 [4 Z9 j1 e( M8 ~2 \) y" A, T7 j ISP_CMD  = ISP_CMD & 0xf8;    /* 清低3位 */  n) d+ l- }! X
ISP_CMD  = ISP_CMD | PrgCommand;  /* 写命令2 */6 ?7 V% b& E# C9 X" g" w
ISP_DATA = original_data;   /* 写入数据准备 */
. t& q" h! F  ]; K: E% a ISPgoon();       /* 触发执行  */1 g3 `" \& k3 B1 G% R. O
ISP_IAP_disable();     /* 关闭IAP功能 */
0 u, D! h1 Z# o; B' b3 y3 D0 N}* F& u6 H) x6 K0 `) x

$ u6 Z9 f* X9 |# E4 F  [7 n( `7 \* O+ _" X" e$ R4 T1 v
void delay(uint T)                                //延时子程序
/ @" S3 K8 X1 e& x' V{
- R: M( p3 b6 D; [, t        while(T--);
6 Z4 R$ I- f1 i' V; H! `7 C! n0 x}8 Q, X: g( H! T6 P
; {/ g* R8 k% {& g2 Z  O  F
void key()                                                 //按键处理程序( y! i  ?4 v+ h4 Q
{
6 g& `: ?7 t7 Y) I1 y! R6 u        if (key_1==0)
7 Y' L% V2 W5 N* a, C6 _        {: k5 j- q2 Y% z3 J
                delay(1000);! g! ?) v9 ]# k9 |7 x7 a( p* x  [
                if (key_1==0); w0 w7 a* B# `5 C, ^) p
                {
0 M) ~/ F5 _4 d; J2 ?' ?- s                        while(key_1==0);
$ t+ T3 u' G7 ?% ^" C# A2 [0 x                        TIME++;
4 j  }# _! R7 D% q- D6 J8 c                        if(TIME>9)9 ~4 a# B! z+ S( a# |' X; P
                        {
$ {+ x/ @. Q+ V6 j                                TIME=1;( X1 }; Y) k4 Z
                        }, i5 T3 V/ n  H( `( z3 x* P
                        tes_t=TIME;7 k, \& ?: I+ _9 N, a
                        ms=0;
4 X  h9 g; g9 M) v$ K! L2 c                        SectorErase(0x2000);: c0 `, y% S. ~: J) M7 a& G
                        byte_write(0x2000,TIME);
! S0 |6 O" H# U6 W' d3 ^# D, C                }
% V: W% Y" M+ |$ [$ ~; G% I( G        }
! t9 Q6 A% @* W$ o/ J$ R- Q        if (key_2==0)+ A+ |1 R: @7 q4 F8 ~4 B' H
        {
+ U- C9 R9 {* M' n* [! E0 d' U                delay(1000);
8 e; }. @& T* L! w( u% M$ O; \                if (key_2==0)9 z5 }0 p9 _* K- X0 Q- X" X
                {3 i5 [4 J- M$ s1 ~7 M: N
                        while(key_2==0);
3 A+ f$ E4 N  O- `! C- Y  y7 X" D                        state=!state;
/ m  _( O9 p' d* A7 b- R  m; q                        if (state)
& v1 r% ?3 o6 w% ]                        {' j( g3 M5 A7 N" U- W$ ]
                                ms=0;$ G0 J7 I: V% |% A# P
                                tes_t=TIME;# e; d) k0 z8 ~# ?9 y
                        }else& O4 X, l% q- g5 |, i' P( ~( V
                        {& p1 E9 j) }$ b) k7 S2 P
                                beep=1;' z5 T$ I: Q: q* B) x3 ^* i3 P! B
                                led_1=led_2=1;( V- D' n4 E1 x; h3 u9 z
                                deteOK=0;
5 J7 D  [  U6 `) r& N                        }
# {  g6 C" X& w' h$ q! k                }
! E5 _2 u' D) K* H        }# `/ _3 C, ?9 r2 I: C
}
' L% W, m6 x. {- g1 u4 P/ }- V/ \0 M
void main()
$ Q; w$ y! A# z{5 K7 g) ?( p/ g0 f' _$ G; \
        TMOD=0x01;                                                //打开定时器0、外部中断0% S7 G5 ~, H" z) t4 a0 D- S
        TH0=0x3c;
# S- C9 i5 t8 x* m0 \6 y        TL0=0xb0;+ x; f) K4 V( D( w7 v, a
        ET0=1;
- J/ n1 R" I7 Y  A        EA=1;
5 ~) B9 i5 t+ N2 f: i% T+ _        TR0=1;
0 S  o9 `! j, V" ^  I) |        IT0=1;                                                        //设置下降沿触发方式0 M0 U2 L2 H! ~% @, l. `* b
        EX0=1;
) [2 Y7 K  r' k3 A: T) G        TIME=byte_read(0x2000);
3 J- u6 n' D: F$ T        if (TIME==0||TIME>100)TIME=3;6 X# J' {8 d% i9 _
        while(1)
, d! |1 m3 {7 J* M- c! k- Q( x5 {' o        {. j. h" z$ E* }; d
                P2=seg[TIME];                                //  数码管显示# o! Z. H4 x* Y: ]* f. {7 X
                key();
: T3 Y# ^2 z. @                if (state)
4 ?! C, h6 b; f( `+ z9 a                {
  j) ~  {& s& ?: z0 e1 S& r                        if (deteOK)1 D2 s8 ~: J2 A
                        {
- r& `, R: r2 z& R' k* I8 H                                beep1=1;- B3 V; @7 F* {' _, W+ V% ~2 [
                                led_2=0;
: C3 ^* T7 }& K                                led_1=1;; y1 a2 q0 y$ i$ I& V
                        }else
9 z' R2 j, Y# u: Y: s                        {
/ Q! p1 x7 b/ G+ f. Q. [4 D                                beep1=0;" N7 M% I& {! I8 e. |: V
                                led_1=0;
0 x. b7 g  D  L" n/ f                                led_2=1;
6 k) v1 m; Q; d4 ]: L+ `7 A8 v+ `                                beep=1;                        2 L1 j; Z! ^  [4 z' v
                        }" a& e8 V- t- I
                }else0 G- E6 ?- U, `
                {  
4 t, c) h0 ~+ p                        beep1=0;
, V8 N; e3 H+ K+ v                        beep=1;
$ i9 V4 n) U- [                        led_1=led_2=1;3 u* A" I5 _4 \: |5 Q
                        deteOK=0;
$ v8 U  H! z" a. [( e8 D                }        , f8 U( j8 v4 Y. p; N: }+ Z* I
        }8 c3 ^. D: n' s+ J, R
}
0 W" |% V: h/ R* G
: m7 X' A! `5 K0 A/ Kvoid TIME_ms() interrupt 1                        //定时器0 ' y5 T$ A# G/ }0 F$ O1 o. f- [
{8 I& ]% L& ]! S- O# @- _. G+ R
        TH0=0x3c;
" U: E4 b2 M- i7 k' G        TL0=0xb0;& b4 J4 w! X* Q
        ms++;. b/ p) _2 {5 m4 V
        k++;
5 {  c: q8 e% M- I* F" P: |. \% d2 `        if(beep1==1&&k%3==0)                        //蜂鸣器报警处理
! o* W/ K6 d( Q) S# k        {9 n; U& p( t0 _8 H, D+ M
                beep=!beep;) S7 l: @4 B3 Y* o
                if(k>19)k=0;
( d, d  R: t! _, J& W        }
& s8 h$ |# b( a% F/ p0 T" w7 e7 S        if(ms==20)                                                //1S定时
9 F! p5 U; A: i  C9 @" T3 A7 w, N5 R5 {        {
& U# G3 K8 R8 w  R% l% F% Z5 W                ms=0;
3 I$ f; v7 d# O8 R" y                   if (state)                                        //启动点滴计时0 Z3 o  L9 V+ X' B0 h' p- a
                {
" ~) ]; e' D) K' C$ L2 I/ j7 u                        tes_t--;
# N7 W3 E9 w2 n' Z# C2 r                        if (tes_t==0): {6 V. {3 r" h% n/ d5 V
                        {
# T! S0 U5 {; B: l                                deteOK=1;                        //超出计时时间: x  w) @4 e1 r2 \4 |* Y$ i. Y
                        }
7 D( `3 L# b( \& c% e                }
5 G* J: T$ N  y* ?( q        }
# Z, z& [) @" Q/ u& _; x}( }* q2 b* T$ Y$ W
5 ^3 f$ @5 L3 V* @( F6 C" _
void dete() interrupt 03 z, a, ^: a* D: N1 @+ _) s
{
* H2 z2 U- O0 D, b/ e        if (state==1)                                          //点滴检测               
- g& O) j& a8 q: m9 f1 r5 j$ _/ z        {! h5 h* z* i; x1 |
                tes_t=TIME;
* M. ?2 f9 \0 _# m, u+ ~                ms=0;+ Q3 @$ E6 |: ^1 F
        }# K( ?2 o. f. F0 m
}$ k0 L/ E  c* h5 |+ S! P
6 o/ _$ d) N* e# Y: F' \
点滴测速设计的所有资料下载:
2 r" T. d0 S* d. R3 O4 M
游客,如果您要查看本帖隐藏内容请回复

( I! Q% Y2 ^" A2 [# g4 k

$ @: y+ w$ M/ @6 ~' m

该用户从未签到

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

该用户从未签到

3#
发表于 2020-6-2 09:02 | 只看该作者
感谢楼主分享,学习一下
5 Q# Q7 f9 a& i9 G( h  z2 ?, p# g0 D
  • TA的每日心情
    开心
    2025-7-22 15:00
  • 签到天数: 1163 天

    [LV.10]以坛为家III

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

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-23 05:06 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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