|
|
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
|
|