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

51单片机模拟救护车声音 喇叭滴答声 源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-28 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
51单片机模拟救护车声音 喇叭滴答声 源程序( F3 V. b9 g! w6 ]/ ~. N+ m- l/ p

4 R3 j' P6 G, X* F4 O+ ~

6 R; M6 I6 u2 @8 L- X! w单片机源程序:
/ q$ N6 c9 ]5 f. B6 y$ J. A/*-----------------------------------------------$ T- u- Q* ?# T! l0 ~5 _
  名称:喇叭
1 d2 n' u2 w/ ]7 z" z  修改:无
0 O1 U3 T) y) ?. ?  内容:模救护车发声
9 N( p6 M: a' c. ]3 a# o  I------------------------------------------------*/
$ [& f" u  X, K$ ^% C) l  q" V#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义) ^" Z6 r# ?* ?, {2 X  O3 l
6 t1 W* K/ r2 L3 U2 h& R  D0 [2 b8 \
sbit SPK=P1^2;    //定义喇叭端口
. n4 c. j& t  F  O0 c$ R# ?0 Nunsigned char frq;
$ V# W" W8 g9 B9 x5 X0 h
0 R" Z0 O. h6 H' c! ^" rvoid DelayUs2x(unsigned char t);//函数声明
- Q1 W" g6 \, n. Nvoid DelayMs(unsigned char t);7 e  p; I' B+ }# v0 F; P
/*------------------------------------------------  z+ ?* O7 l: j" k
                    定时器初始化子程序
4 G+ a$ h7 _. o------------------------------------------------*/
3 Z2 R9 x  I5 M; o! k2 X" bvoid Init_Timer0(void)+ ^/ Z9 ^8 L; R7 n7 \/ b" F
{
8 }7 h. I' ^/ E$ t TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
& S* n; w; }3 f" \, u" D5 F9 d3 q //TH0=0x00;              //给定初值
# n  c& F" V6 F: n7 j //TL0=0x00;* A2 ~1 q" j5 R: |
EA=1;            //总中断打开
3 K0 B* }$ X5 R/ ]" M ET0=1;           //定时器中断打开
& g9 F, }" b1 l$ e, u1 }% e0 ~. g! r TR0=1;           //定时器开关打开/ k) F" l& h4 m
}
& K7 v' x. ]- W+ d3 J/*------------------------------------------------6 [' p# ]# t4 P' m" p4 f$ R9 n) D
                    主函数# c, [. ^- r; n
------------------------------------------------*/
) Q) g% {: }% ^; O; imain()
8 U0 W& W. Q7 O+ a& P6 U' L4 |9 \{% |+ Z: d: k" ]6 z
unsigned char i;
! i9 U$ y3 W3 T  t- w. z% A Init_Timer0(); //初始化定时器
8 Z/ f7 |+ ^( U2 R% h while(1)
- N! ?" V: E4 f2 n9 K0 H( e  z5 q      {
2 p7 l7 K( Q  Z  k$ B4 |  U7 ~* R  B' H   frq=0;/ p1 D" o" P0 `4 x& C- l( {7 ^! X
   for(i=0;i<60;i++)//播放1s左右一种频率
) k' a" |4 K7 e6 ]( R      {
8 a) b8 ?) ~$ ]& ]      DelayMs(10); % r/ t6 R8 `  j6 j1 ^* t
          }3 e. C2 Q. }( H
   frq=100;
( R& z/ U# |% G, w" A   for(i=0;i<60;i++)//播放1s左右另外一种频率
* J3 J, t5 n& @4 z  j, b- D      {  
# I* Y7 O5 i5 ]8 r& s4 D7 e      DelayMs(10);
! ]1 S- u/ r6 U% p: W4 `: t          }
3 K' y6 I. v/ N7 H" Q+ e; {' U  e- Z# l4 k9 P9 b6 E
         }
4 S) |1 W" g( [& d$ A$ y( B& n* T}- E% I4 c, u5 e' F0 q4 y
/*------------------------------------------------
* R  g; I; X2 D  g uS延时函数,含有输入参数 unsigned char t,无返回值3 ^! \& H( O5 _9 Z1 O
unsigned char 是定义无符号字符变量,其值的范围是
: _8 @( r' ^! S. d 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时/ J) W% x9 X3 }0 f0 _8 h# v
长度如下 T=tx2+5 uS , o" V/ [! O: }& q" ^: R' N
------------------------------------------------*/
, [9 Y: J$ r2 c% w2 ]void DelayUs2x(unsigned char t). ^' e4 n9 v. }8 ^* v5 ~% G
{   
2 b9 j' r& ^) O- R while(--t);
, `2 G  r" ^; U7 M7 |' M& A}
$ J3 i% X( |% |0 h; Q& B/*------------------------------------------------" h( B1 M5 H% x7 p8 y% f
mS延时函数,含有输入参数 unsigned char t,无返回值, q9 h6 i  A# A& ]& T# K
unsigned char 是定义无符号字符变量,其值的范围是, x  k  v! ^; R
0~255 这里使用晶振12M,精确延时请使用汇编1 Z; M4 t' [$ v7 V1 A
------------------------------------------------*/. x1 z) O  k' l. k" C  L
void DelayMs(unsigned char t)
; N  ^) ?1 Y: Z+ e  e{
3 U/ f+ F! S/ X6 z' k, v' f: u+ L1 }) L2 k4 ^
while(t--)
4 k  Q& {7 a( X: `: Z9 _' v4 v {/ Q* s; _3 q6 j) ^
     //大致延时1mS
1 f7 f2 K+ F7 H$ U     DelayUs2x(245);% p& b% x8 X$ `
         DelayUs2x(245);
/ a) c$ J) E! a: a8 X }- B  h0 G2 ]7 G# {- c) I$ Q* ^
}
" `" r# ^6 Y) a+ E& X9 G$ X/*------------------------------------------------
, A0 b; I8 Q! q                 定时器中断子程序
7 I7 b# G1 h+ ^------------------------------------------------*/4 U( _4 O' ]6 m# o9 L
void Timer0_isr(void) interrupt 1 + t( x$ |. w) f
{
- _. o; V/ L7 M- f TH0=0xfe;                  //重新赋值 ' C! R9 ?0 N7 x& i$ g0 g
TL0=frq;         //低8位值在主程序中不断累加
) h& o- U9 P9 ~( T" N7 z. y. ?5 b5 k$ T' o! p

5 N5 i# S  Y# E% d- a; B…………限于本文篇幅 余下代码请从论坛下载附件…………( |+ i: y8 X4 A, G5 }2 Y" z
, z& y* ?- U# J- ^8 e0 T" x

, M) ?/ D* P: B3 q3 j3 {8 y# s% v% {: y. u! A+ L5 p  I% t

2 g+ W% O( r9 X* P0 V: `- u
* w5 E0 _/ p" A$ s. T2 @
. V# N/ e* Z$ N- @! k/ Y6 G/*-----------------------------------------------
0 E( `) Z% s3 z; ?  m  名称:喇叭9 p* l. q" F+ `9 t2 G8 t
  修改:无
5 R( J7 a" j  u% P/ @3 R$ z* I' }  内容:模拟滴答声! r) G, _) P4 f, t# I
------------------------------------------------*/
5 A/ s1 s- q3 L% x0 W" X#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义1 [' H, _: a* \, N& F2 G4 ?4 w

$ y- v6 h7 x% Fsbit SPK=P1^2;    //定义喇叭端口
3 O7 G# M5 X  \; ^8 punsigned char frq;
' [; p0 x+ ^' }2 j; @" A' H/ ]/ B" Z0 b" _. B* ^
void DelayUs2x(unsigned char t);//函数声明 % ?& O' D$ C* A) y
void DelayMs(unsigned char t);
+ a2 N+ l& `0 m6 p& C% R6 x0 X1 f
# D- Y# Q- `0 n9 A+ I* {3 p/*------------------------------------------------
8 I1 j6 E) A( b# ?$ P0 e# |                    主函数/ R8 A& _! k+ M8 k9 G
------------------------------------------------*/" P# F6 ~, x% Y
main(), B; O5 v6 I9 i
{
* M. b! X- \( Z0 `: w/ P% Q9 j unsigned int i;) B& K1 s/ O* P, X3 Y

0 u& M5 O5 r' {- \ while(1); Z  v7 n! u2 ]; t) G) N1 J
      {1 R6 e; X& C  Z* r' |/ U
   for(i=0;i<500;i++)
' [* h& H! T* n6 E% \6 V      {8 m( d0 {+ T+ k. k* z" c$ l* W
      DelayUs2x(200); ; l3 E) F1 A9 ?* a8 k; r" x
          DelayUs2x(200);
, H+ ~2 x1 C4 C  t5 N  F  D( [0 c7 C+ c          SPK=!SPK;
$ N3 i6 G8 ?! ]. d3 T          }
3 s2 D: }& O* L- ]$ |2 f+ p9 J   for(i=0;i<500;i++)  i$ h7 o/ q" c1 e( L5 N( p; o
      {, d. K, q3 O' w/ G+ p& d/ f1 T
      DelayMs(1);  
# F: B% \( U8 ^3 J' w/ {          SPK=!SPK;
- w3 e0 w2 M9 w, i          }
' V0 h7 H, P* ~1 _6 x% }* a" U# c' M' M) A4 p7 [2 ~
          }1 O0 B4 L3 J! f
}' _1 M% s& {9 i5 x: P
/*------------------------------------------------1 J0 p) V- M/ A( d
uS延时函数,含有输入参数 unsigned char t,无返回值. n; J5 y1 }( Q8 Y+ \# f
unsigned char 是定义无符号字符变量,其值的范围是
  }6 \) n4 W# Q5 y$ c 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
% s7 w7 U* N/ O: D& J3 b& w 长度如下 T=tx2+5 uS " Y6 U. }6 r7 \& G4 \* i/ {
------------------------------------------------*/$ H  d& C: _1 S2 @
void DelayUs2x(unsigned char t). v( i. I& Y2 Z. K
{   
! ]/ D8 A1 y$ H8 s* v  f, T; j& x& J while(--t);
0 q. ~: W- ?( _7 Z# |}  h1 l' D3 W6 @/ v1 o
/*------------------------------------------------
. {$ K+ e) N) P+ l* t3 Q( b' J mS延时函数,含有输入参数 unsigned char t,无返回值7 A/ i  T4 h2 B1 h) q( _
unsigned char 是定义无符号字符变量,其值的范围是
8 b# w4 i, W1 ^& }+ R 0~255 这里使用晶振12M,精确延时请使用汇编4 s. i/ F: }9 L3 |, _
------------------------------------------------*/
1 c0 V, D$ \) ?/ n# b  Evoid DelayMs(unsigned char t): n2 Q  {+ N7 R2 c7 y, m
{+ t+ l6 q; U, q& ~

% i2 y. e, g! Z* V. u while(t--)
* g6 L7 L2 C5 \: a {
: h2 }) s6 ^) x9 ]7 e, `. A
6 m: L  X/ e4 z4 J8 r# K; o0 U. ~8 u' C
…………限于本文篇幅 余下代码请从论坛下载附件…………
: n5 a5 W! N' }% t0 B; Y* i% `6 t7 d  W0 y
游客,如果您要查看本帖隐藏内容请回复

; Q$ j. R' n3 m2 Q8 J6 ?0 S, p  s4 Z; M3 H
0 f4 }; Y2 [7 c

该用户从未签到

2#
发表于 2018-11-28 11:08 | 只看该作者
滴滴滴 谢谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 06:58 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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