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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机模拟救护车声音 喇叭滴答声 源程序
' ^& d! E; u/ Y) [! \" p  H8 ]& T
, Q0 F1 I3 i7 E  H3 n! ~/ ~4 n$ |1 V# B
# e4 u7 s. E9 K: C* z+ g
单片机源程序:
- k5 q! \2 q. `' |. X7 D/*-----------------------------------------------6 _6 E6 ]) l( _( ?; q8 J! h
  名称:喇叭* c7 `# n/ B3 ^: ]( t1 w( G" G& S
  修改:无
5 h4 `- X. T0 H" j: E3 Q  内容:模救护车发声
6 @2 r2 q8 V' g& S, R------------------------------------------------*/! F& u3 v3 N  c
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义; q# X+ l0 f1 b4 `- r* i
" z# v& ]- y: n) q" x
sbit SPK=P1^2;    //定义喇叭端口
0 l1 z* x' g& M( lunsigned char frq;
2 A  [2 P6 e5 r, Z0 z! g
: W, f3 Q8 {$ |6 ^void DelayUs2x(unsigned char t);//函数声明 # N; T, d" L+ e9 M, [) h. B* R& J
void DelayMs(unsigned char t);3 S/ K. I$ h3 [0 g2 S) a
/*------------------------------------------------& m& N) _2 e  i
                    定时器初始化子程序7 f9 ~$ o) x. o+ a
------------------------------------------------*/! c: n' q+ H2 o. F7 h% ]5 v
void Init_Timer0(void)
  c6 y/ D6 V- U/ w  m& G* i, X{$ K* K, y% u0 _! j# i$ j: g
TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
: S2 J$ w6 ]2 V1 n8 @' e1 y" t8 Z //TH0=0x00;              //给定初值* q, e7 }7 L; h& C
//TL0=0x00;
/ `  u& q; N3 i/ W2 h/ G: B& t% H5 r& s EA=1;            //总中断打开
9 ]* T4 H: V* i0 ?- n' o/ z ET0=1;           //定时器中断打开* q3 u# i' j4 A4 T2 X
TR0=1;           //定时器开关打开+ Y9 X/ N; u+ s9 I4 w; ]
}
) S$ h8 y1 Y" }3 Q- I/*------------------------------------------------
: ^4 J& S0 T% x2 L; C5 C                    主函数) j" i( P; h3 U, \. A
------------------------------------------------*/
6 j3 q. p8 c1 E( Tmain()! j$ |9 p) d6 E8 k
{
! P( T8 R' _3 b1 F9 k unsigned char i;
% u. Z, n( |% M' N* h% A Init_Timer0(); //初始化定时器# N1 E5 C! M, P  ]) w3 ?
while(1)
. F6 Z5 c4 p+ H$ M6 J      {
' J7 Z4 u0 ]2 |% ?6 C* k/ V6 v   frq=0;
" O( r  [! `% Z% t# |8 @1 y   for(i=0;i<60;i++)//播放1s左右一种频率
' _4 ^$ ]  o  |0 T. H$ V4 [      {
+ Q! W( H. j, U5 u      DelayMs(10); - r: C2 w8 I4 ?: o6 C( T
          }
; F+ `7 P' i, }4 u- W; b   frq=100;
+ B, l  k4 x, x; Y5 S   for(i=0;i<60;i++)//播放1s左右另外一种频率  f* w9 A8 c1 Y: r: p/ X; R
      {  6 a5 V4 O  W7 k
      DelayMs(10);
4 _  j5 M4 C: J! p8 C; y          }( M4 ^0 F/ g4 ^, v5 a' L& @3 L
* W" X( H2 }6 t2 f9 x
         }
. A( P& i- |+ u4 u3 W2 r}
/ ]# _2 Q* P# _/ G: O) _3 M3 {5 N/*------------------------------------------------
4 ?6 r1 v. ^$ z uS延时函数,含有输入参数 unsigned char t,无返回值
) w6 b( j1 j+ V7 M: o9 M& r% g5 e/ o unsigned char 是定义无符号字符变量,其值的范围是+ _# }* b/ S5 U& P7 O4 m
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
$ A7 e) P' W. J/ ?( s 长度如下 T=tx2+5 uS . @3 N  |9 z0 v8 \
------------------------------------------------*/
: a$ q& T( l% b) T" E/ I4 w) S4 ~void DelayUs2x(unsigned char t)( V+ N1 o: ]2 Y5 c. C& f( h; W
{   
8 G( s( C3 t+ @& \9 j3 A while(--t);
  n. s4 ~) Y- v# D}
" @5 @; v) ]: E& \/*------------------------------------------------* g% E4 w* U- h/ ^9 C& |1 e
mS延时函数,含有输入参数 unsigned char t,无返回值; e# J. b0 T( S" `
unsigned char 是定义无符号字符变量,其值的范围是
) X4 O, N3 O0 T6 L 0~255 这里使用晶振12M,精确延时请使用汇编
1 a3 e/ \" }4 M' \2 }  {* ^* O0 V------------------------------------------------*/; _5 |+ }; h  s# t. u9 e
void DelayMs(unsigned char t)" U& p1 m. g9 v# z+ G% g; Z
{. Z; G0 }" a  m% }
$ L4 V! S% {. S5 U
while(t--)
: h/ l# j( ]) x {+ M$ e( q) x; p( e. W+ O" j0 b3 e# X
     //大致延时1mS
& ^0 x( Z5 _& t1 H     DelayUs2x(245);0 _. Y& f( P5 Q" X! I* }, I
         DelayUs2x(245);6 R3 ]. t. w4 \
}3 C/ i3 e% v; M) X& m; Q7 I& K
}2 d, S8 f6 N* H6 F$ w
/*------------------------------------------------
4 V6 S3 s" f5 f/ K  b' m7 K                 定时器中断子程序
5 X9 r1 b, Y' b8 K0 \------------------------------------------------*/
7 c* n  ]6 d! N  e. ]void Timer0_isr(void) interrupt 1
# S+ A4 j  R. x( o{
4 H; N$ M1 A# c2 T2 h TH0=0xfe;                  //重新赋值 $ A3 o% m5 W$ f( G+ t" R6 n7 _
TL0=frq;         //低8位值在主程序中不断累加
: U+ P! O# Y$ k' m7 p- |: D2 r; Q6 I4 p$ X/ F, F  ]# A
8 o2 g; C% ^2 [, }6 c# p1 r! P
…………限于本文篇幅 余下代码请从论坛下载附件…………3 F) L1 [4 W3 p( r' m

/ z4 }( [* K" f/ A
1 V6 T/ E: Y7 l6 V$ q/ s" m) ~: b$ L' Q5 K/ d7 Z* H! z

- t9 ~  w& N7 r" N  {. R& d4 t+ \/ m, T8 x8 O" l1 |7 i; }% \5 o* J. j

9 H0 _- F) V5 o, |8 p/*-----------------------------------------------
' G4 t* C( o( a- N  名称:喇叭
$ A' C: i1 h  y1 G5 }( T  修改:无- |4 t" t8 m2 q: k. S* Z# O
  内容:模拟滴答声
/ S, g6 \" W1 e6 b) L4 w/ u6 ^------------------------------------------------*/% j3 C. ~, X# ^
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
4 ]0 ?& q0 h  G5 y( a- B
  R3 a  R8 k# k6 j6 o, l/ O% Jsbit SPK=P1^2;    //定义喇叭端口
; r' O) x& H' U& r' L& M& Y$ Munsigned char frq;
& u1 B* S, }2 i' d
( ]" B' `$ u. S4 s% Y. `; Mvoid DelayUs2x(unsigned char t);//函数声明
4 G, f% ]; b' p- n, J/ Qvoid DelayMs(unsigned char t);7 n# N3 C/ ~+ k$ t5 E; W) |

1 `  m4 [4 B* R0 q5 I/*------------------------------------------------
& k* S9 a! ~2 V8 j                    主函数, f6 V0 i* Q( H( D5 `2 r
------------------------------------------------*/) X7 {* D9 h2 P" R' g
main()8 L- g( f  u+ c4 l6 d
{4 g. [- o$ h8 R5 t$ u: F
unsigned int i;
. t$ E, n' `* J. Q! |! x
: f9 p6 ~! _1 p4 W8 d. k while(1)
! @- R2 w' a1 A$ {      {: |! m* k2 i5 ^6 q3 @/ [1 z4 W
   for(i=0;i<500;i++)! r7 j! U* q, u6 S# W/ ^
      {" L2 ?. a( d) y. J
      DelayUs2x(200);
8 A6 m  L- a7 Y9 D6 E0 R4 p          DelayUs2x(200);
: n% E# h0 ?% L% d7 o          SPK=!SPK;
5 ?! k1 A) |# J! ~3 W8 c          }+ A, d2 \2 \& D
   for(i=0;i<500;i++)
  p' H0 a! S4 A& d' ^- F      {
* z6 t, U9 U- V: x% }  L3 }! Q0 ?+ W      DelayMs(1);  
0 x6 b. g) o7 H          SPK=!SPK;8 Z; k( U, q5 @
          }
+ h4 x8 Z% I. E, Z' j1 [5 h7 z2 Z- }( l  \1 G6 @8 ?6 D
          }$ t. q3 J# D6 g( T
}$ J! L: F, M3 T+ z. r8 v
/*------------------------------------------------2 \/ b4 ~( ?  L% S1 {0 }
uS延时函数,含有输入参数 unsigned char t,无返回值
% e5 Z7 w) v1 e& }, p" c7 R7 P! K# l unsigned char 是定义无符号字符变量,其值的范围是7 t* H$ ~& o: Q$ H5 P/ Q: {
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
: ^# X- [- D. w7 } 长度如下 T=tx2+5 uS
6 \6 J/ g9 T. I) ~------------------------------------------------*/# _! k, Z) w9 d/ m, r. @
void DelayUs2x(unsigned char t)
/ B. a; Z. u6 b+ J{   # r3 p: q! U% i" I
while(--t);7 [$ R0 h9 w3 O6 g9 b2 z" \
}
. {1 N3 b* M3 L+ R/*------------------------------------------------" `) F' @" k8 O8 B0 X
mS延时函数,含有输入参数 unsigned char t,无返回值
, j. a: f$ V! `2 D unsigned char 是定义无符号字符变量,其值的范围是+ U6 s( a; Z! ^- _
0~255 这里使用晶振12M,精确延时请使用汇编
" r" r+ u8 ^% @4 ]4 ^$ {6 A------------------------------------------------*/8 ^5 x. C3 E  t- r
void DelayMs(unsigned char t)1 J4 ?4 U. M' g0 ^+ U
{6 P+ o& G9 e$ ~3 ?3 k
2 u3 P# l/ p. a$ z3 X
while(t--)( t( g4 T" F  l9 Y$ [: p
{0 z4 }2 P9 K, i/ \1 w
  Z8 |0 H+ _& t" N0 I

5 O/ U' S% e. y…………限于本文篇幅 余下代码请从论坛下载附件…………" {9 M* B" @7 ^1 ^5 l2 X3 F
' `$ i  {  ?8 E7 F$ d
游客,如果您要查看本帖隐藏内容请回复
6 {* B& H9 ^7 a
5 |) z- @& H8 D$ l4 M8 r8 @0 n
( k1 I. Q( A8 I5 P; W

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-6 22:07 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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